Le langage SMS est exclu sur les forums ProgBoards, tout message ne respectant pas la charte sera déplacé, modifié, ou supprimé par nos modérateurs.

Forum Langages » BASIC » Dessin avec LINE et CIRCLE sous qb4.5

diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 18/02/2008 à 18:57
Bonjour,
je m'explique plus clairement (enfin je vais essayer)
j'ai un fichier de données géométriques comprenant des droites, des cercles et des rayons.
pour les droites pas de problèmes avec "LINE"
pour les cercles "CIRCLE" sans donner d'angle début et fin trace le cercle avec le rayon
pour les arcs la fonction "CIRCLE" demande un angle de début d'arc et un angle de fin.
comment les calculer automatiquement en sachant que je prend les données dans mon fichier sous la forme suivante pour les arcs :


165.765,42.192,163.887,44.247,167.386,45.56 ' arc
163.887,44.247,163.887,129.139,2068.986,86.693 ' arc
80.78,17.1,80.78,17.1,80,20 ' cercle => X et Y départ = X et Y fin
163.887,129.139,164.765,131.194,166.886,129.072 ' arc
'soit : dans les variables c,d,e,f,g,h
' (c=X depart)(d=Y depart)
' (e=X arrivee)(f=Y arrivee)
' (g=X centre rayon)(h=Y centre rayon)


Je ne sais pas comment trouver les angles avec ces infos
D'avance merci,
DMF
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
SFLPMEA
ProgBoarder
RemonterCiter Windows 98 Firefox 2 - Posté le 18/02/2008 à 20:13
(héhé Salutations.

Une petite chose me chagrine, c'est ton calcul du rayon repris ci-dessous :
' (c=X depart)(d=Y depart)
' (e=X arrivee)(f=Y arrivee)
' (g=X centre rayon)(h=Y centre rayon)
' calcul du rayon
R2 = ((c - g) ^ 2) + ((d - h) ^ 2)
R = SQR(R2)
En fait, tu calcules la distance entre le départ et le centre.
Car tu admets que les coordonnées du centre sont correctes. Le sont-elles vraiment ?
As-tu contrôlé que le centre est à égale distance du départ et de l'arrivée ?
Tu devrais avoir également un deuxième calcul (distance entre l'arrivée et le centre) :
R2 = ((e - g) ^ 2) + ((f - h) ^ 2)
R = SQR(R2)
Obtiens-tu le même résultat ?

(héhé Salutations.

Edité par SFLPMEA ( 18/02/2008 20:29:47 )
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 18/02/2008 à 20:47
les infos dans le fichier sont une exportation d'un logiciel de cao-dao professionnel qui ont une précision de 0.001 ce qui est suffisant car en fait,
je créer un convertisseur de fichier dessins (ascii) exportés d'un logiciel.
Ce logiciel n'ayant pas de drivers pour une machine à commande numerique.
je converti les lignes de ce fichier en language machine (déjà fini !)
puis avant d'envoyer à la machine, je souhaite avoir un affichage graphique de la pièce à fabriquer.
Cet affichage ne demande pas de précision au micron, mais qu'il soit propre.

Donc je pense SFLPMEA, que les valeurs exportées doivent être bonnes.
hou lalà, j'ai pas dû être clair ?!!?? (gêné)
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 18/02/2008 à 22:18
Pour Francesco,

Je n'ai pas trouvé la fonction acos ?
et à quoi correspond "X- Xcentre" ?

"Donc, pour le calcul, un petit pythagore suffit
acos((X - Xcentre) / rayon)"

Bonne soirée
DMF
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
neamar
Modérateur
RemonterCiter Windows NT Firefox 2 - Posté le 18/02/2008 à 22:23
Les fonctions récipriques trigonométriques ne sont pas implémentée spar défaut, sauf pour Atn. (les plus vieux de ce forum se souviendront d'un long débat à ce sujet...).
Enfin, trêve de banalités, je te joins un petit tableau qui saura se rendre utile :


Fonction Équivalents
Sécante Sec(X) = 1 / Cos(X)
Cosécante Cosec(X) = 1 / Sin(X)
Cotangente Cotan(X) = 1 / Tan(X)
Arcsinus Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Arccosinus Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Arcsécante Arcsec(X) = Atn(X / Sqr(X * X – 1)) + Sgn((X) – 1) * (2 * Atn(1))
Arccosécante Arccosec(X) = Atn(X / Sqr(X * X – 1)) + (Sgn(X) – 1) * (2 * Atn(1))
Arccotangente Arccotan(X) = Atn(X) + 2 * Atn(1)
Sinus hyperbolique HSin(X) = (Exp(X) – Exp(-X)) / 2
Cosinus hyperbolique HCos(X) = (Exp(X) + Exp(-X)) / 2
Tangente hyperbolique HTan(X) = (Exp(X) – Exp(-X)) / (Exp(X) + Exp(-X))
Sécante hyperbolique HSec(X) = 2 / (Exp(X) + Exp(-X))
Cosécante hyperbolique HCosec(X) = 2 / (Exp(X) – Exp(-X))
Cotangente hyperbolique HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) – Exp(-X))
Arcsinus hyperbolique HArcsin(X) = Log(X + Sqr(X * X + 1))
Arccosinus hyperbolique HArccos(X) = Log(X + Sqr(X * X – 1))
Arctangente hyperbolique HArctan(X) = Log((1 + X) / (1 – X)) / 2
Arcsécante hyperbolique HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Arccosécante hyperbolique HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Arccotangente hyperbolique HArccotan(X) = Log((X + 1) / (X – 1)) / 2
Logarithme de base N LogN(X) = Log(X) / Log(N)


Voilà !

Edité par neamar ( 18/02/2008 22:24:07 )
Before you criticize someone, you should walk a mile in their shoes. That way when you criticize them, you are a mile away from them and you have their shoes.

http://neamar.free.fr
Ou le portail général : http://neamar.fr
Francesco
Modérateur
RemonterCiter Linux Firefox 2 - Posté le 18/02/2008 à 22:42
Arf, l'habitude du C, désolé ^^
Donc, comme le dis Neamar, il faut utiliser l'arctangente.

Donc, en gros :
angle = ATN((Y - Ycentre) / (X - Xcentre))

Cette formule de donne un angle entre -PI/2 et PI/2, qui correspond donc à la partie droite du cercle trigonométrique.

X et Y sont les coordonnées d'un point sur le cercle, et Xcentre et Ycentre les coordonnées du centre de cercle.

Attention toutefois, avec cette formule, tu auras une division par 0, si jamais l'angle vaut pi/2 ou -pi/2...
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 19/02/2008 à 14:00
Bonjour,

Pour SFLPMEA,
j'ai essayé ton prog mais il y a des erreurs suivant les arcs, je précise :


SLEEP: CLS
Sinus.D! = (Yc% - Y%) / R% ' dépassement de capacité
Cosinus.D! = (Xc% - X%) / R%
'Formule pour transformer en grades
'Grades! = ATN(Sinus! / SQR(1 - Sinus! ^ 2)) / 3.141593 * 200
IF Sinus.D! = 0 THEN Sinus.D! = .01 ' pour éviter une division par zéro ' (pourtant !)
Grades.D! = ATN(Sinus.D! / SQR(1 - Sinus.D! ^ 2)) / 3.141593 * 200 ' division par zero
Grades.F! = Grades.D! + A!



pour Francesco,
les rayons peuvent ce trouver n'importe où !
tu m'as fourni :


angle = ATN((Y - Ycentre) / (X - Xcentre))
' Cette formule de donne un angle entre -PI/2 et PI/2, qui correspond donc à la partie droite du cercle trigonométrique.
'X et Y sont les coordonnées d'un point sur le cercle, et Xcentre et Ycentre les coordonnées du centre de cercle.


Merci à vous pour votre patience avec moi !
(héhé

Edité par diemaker form ( 19/02/2008 14:01:48 )
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
Freem
Modérateur
RemonterCiter Windows XP Firefox 2 - Posté le 19/02/2008 à 14:13

CitationMerci à vous pour votre patience avec moi !


Mais qui à dit que c'est gratuit?
J'espère que tu as un compte paypal xD....
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin
diemaker form
ProgBoarder
RemonterCiter Windows XP Firefox 2 - Posté le 19/02/2008 à 16:01
Re-bonjour Freem,
un petit rappel de la charte du forum :
Aucune insulte, ou allusion diffamatoire ne seront tolérées.
(clein d'oeil) (clein d'oeil) (clein d'oeil) (sourire) (héhé
DMF
(question)
Formes de Découpe, Outils Coupants pour l'imprimerie sur http://www.diemakerform.fr
SFLPMEA
ProgBoarder
RemonterCiter Windows 98 Firefox 2 - Posté le 19/02/2008 à 16:27
(héhé Salutations :

Essaye de voir pour quelle valeur de l'angle tu as un dépassement (ou fonction interdite) :

FOR I% = 1 TO 15
SLEEP
Radian.D! = Radian.F!
Radian.F! = (Radian.F! + .3): PRINT Radian.F!
CIRCLE (X%, Y%), R%, I%, Radian.D!, Radian.F!
NEXT I%

Déplace le SLEEP juste avant CIRCLE (Tu ne peux pas avoir un angle supérieur à 2 PI).

Pour le dépassement de capacité, je comprends mal :
Un nombre en simple précision positif peut être compris entre 3.402823E+38 et 2.802597E-45 En négatif, son intervalle est -2.802597E-45 à -3.402823E+38. Nous avons de la marge !
Essaye en double précision en remplaçant tous les ! par #.

(héhé Salutations.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !

Poster une réponse

STOP aux fautes volontaires !
Message
Formatage
Note: pour partager du code source, merci d'utiliser le wall !
Smileys (sourire) (yekyek) (clein d'oeil) (désapprouve) (triste) (cool) (langue) (confus) (gêné) (neutre) (eek) (surpris) (diable) (flèche) (exclamation) (question) (diable) (idée) (méchant)
Pseudonyme
Recopiez le code
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,089 s - Crédits - Stats
1 connecté