Algorithme pour arcs de cercles

Bonjour,

Ma question n'est pas électronique, mais j'imagine que certains ont déjà été confrontés à ce problème.

J'ai réalisé une table à découper plasma pilotée par un PC sur le port parallèle.

Aujourd'hui je me tourne vers quelque chose de plus "portable" (utilisation d'un microcontroleur) et Je suis à la recherche d'une formule mathématique n'utilisant ni fonctions trigonométriques, ni table (quantité de ram limitée) ,me permettant de calculer les points d'un arc de cercle.

pour ceux qui utilisent des machines à commande numérique, je cherche à refaire les fonctions G02 et G03. donc suivre une courbe avec 2 moteurs PAP grace aux informations suivantes :

- position de départ

- position de fin

- rayon

- sens horaire/inverse (G02 ou G03)

- > ou < que 180°

Si vous avez des idées, je suis toutes ouïes

merci

a+ François

Reply to
Francois
Loading thread data ...

Bonjour, y = racine(rayon² - x²) En faisant varier x de -rayon à + rayon, tu obtiens un demi-cercle Cordialement Michel dit "Sam"

"Francois" a écrit dans le message de news: 4c124ddf$0$2986$ snipped-for-privacy@reader.news.orange.fr...

Reply to
Sam

Francois a tapoté du bout de ses petites papattes :

Oui mais en fait tu veux quoi ?

--
LeLapin
Reply to
LeLapin

"Francois" a écrit dans le message de news: 4c124ddf$0$2986$ snipped-for-privacy@reader.news.orange.fr...

==================== Il te faudra tout de même utiliser un peu de trigonométrie, transformer les coordonnées polaires (angle et rayon) en coordonnées rectangulaire ( x et y ) x=rayon * cos(phi) y=rayon * sin(phi) Ce qui est d'une grande simplicité à calculer pour un microcontrôleur moyen Si tu programmes en asm et que tu ne trouves pas les routines mathématiques adéquates , tu peux ajouter au µC un coprocesseur mathématique de ce genre par exemple

formatting link

Reply to
maioré

On Jun 11, 6:34 pm, "maior "

les

et

Il a dit qu'il ne voulait pas de fonctions trigo.

ues

re

Ajouter un chip au lieu d'=E9muler ca par soft ? Tu en as d'autres comme ca, des solutions qui compliquent ?

Reply to
Jean-Christophe

On Jun 11, 4:53 pm, Francois

La question est : pr=E9f=E8res-tu optimiser la vitesse de calcul ou la taille m=E9moire ?

Soit tu devras =E9muler les fonctions par soft (une seule fonction en fait, puisque sin et cos c'est la meme chose =E0 pi/2 pr=E8s) et cela prendra du temps de calcul, soit tu impl=E9mentes une table avant autant de points qu'il te faut sachant que tu n'as pas forc=E9ment besoin de 360 points ... et que la table n'a pas besoin d'etre en RAM.

Et pour mettre dans une table par exemple la fonction sin, tu peux gagner un facteur 4 sur la taille de la table en n'y impl=E9mentant que les valeurs de z=E9ro =E0 pi/2 (le reste se retrouve par sym=E9trie)

Reply to
Jean-Christophe

En graphique 2D, il y a des algorithmes int=E9ressants pour tracer =E0 bas niveau des cercles et des lignes de fa=E7on efficace en temps et en m=E9moire. Pour les arcs de cercle, voici une page int=E9ressante de Wikipedia :

formatting link

Reply to
Darwin

Bonjour, tu as perdu les "² "!

je ne savais même pas que la géométrie hyperbolique existait ! tout comme je fais de la prose, je crois que je fais de la géométrie euclidienne.

la perte de tes ² m'intrigue, je vais écrire la formule autrement y=racine(rayon*rayon - x*x)

Cordialement Michel dit "Sam"

"Stan" a écrit dans le message de news: snipped-for-privacy@y4g2000yqy.googlegroups.com... > Bonjour,

En géométrie euclidienne ou hyperbolique ?

--

-Stan

Reply to
Sam

Pourtant, ils sont bien l=E0 =E0 pr=E9sent. Mais je ne sais pas d'o=F9 viennent ces pb d'encodage de page...

--

-Stan

Reply to
Stan

le

s :

J'avais pens=E9 au courbes de B=E9zier :

formatting link

Mais on ne peut pas tracer d'arc de cercle :-(

--

-Stan

Reply to
Stan

il y a d=E9j=E0 eu plein de pistes post=E9es, j'ajoute la mienne : CORDIC :-) il faut une multiplication constante suivie d'it=E9rations de d=E9calages/additions, et on fait toutes les fonctions trigo et m=EAme plus, les doigts dans le nez. c'est un peu bourring mais =E7a prend peu de place en m=E9moire et les op=E9rations sont possibles en pr=E9cision arbitraires, tant qu'on a les primitives qu'il faut (addition, soustraction, d=E9calage, multiplication par constante). =E7a fonctionne en "virgule fixe", tout est normalis=E9 entre 0 et 1.

j'ai fait joujou avec =E7a =E0 une =E9poque, pour faire des oscillateurs num=E9riques mais chut...

formatting link
(ne pas faire gaffe aux maths, c'est juste pour comprendre pourquoi =E7a marche et =E0 quoi servent chaque op=E9ration)
formatting link
(pas pire, avec du code source plus digeste)

note : le 8087 (coproc arithm=E9tique du 8086) utilisait =E7a en interne, sur 80 bits. un peu lent, mais efficace. en nombres entiers sur 16 ou 32 bits on fait d=E9j=E0 des trucs sympas :-)

Sinon, pour les cercles il y aussi l'algorithme de Bresenham

formatting link
e_Bresenham et
formatting link
s (meilleur)

ben bon courage ! on attend de voir les r=E9sultats ;-)

yg

--=20

formatting link
/
formatting link

Reply to
whygee

il y a déjà eu plein de pistes postées, j'ajoute la mienne : CORDIC :-) il faut une multiplication constante suivie d'itérations de décalages/additions, et on fait toutes les fonctions trigo et même plus, les doigts dans le nez. c'est un peu bourring mais ça prend peu de place en mémoire et les opérations sont possibles en précision arbitraires, tant qu'on a les primitives qu'il faut (addition, soustraction, décalage, multiplication par constante). ça fonctionne en "virgule fixe", tout est normalisé entre 0 et 1.

j'ai fait joujou avec ça à une époque, pour faire des oscillateurs numériques mais chut...

formatting link
(ne pas faire gaffe aux maths, c'est juste pour comprendre pourquoi ça marche et à quoi servent chaque opération)
formatting link
(pas pire, avec du code source plus digeste)

note : le 8087 (coproc arithmétique du 8086) utilisait ça en interne, sur 80 bits. un peu lent, mais efficace. en nombres entiers sur 16 ou 32 bits on fait déjà des trucs sympas :-)

Sinon, pour les cercles il y aussi l'algorithme de Bresenham

formatting link
et
formatting link
(meilleur)

ben bon courage ! on attend de voir les résultats ;-)

yg

--
http://ygdes.com / http://yasep.org
Reply to
kiriak

On Jun 12, 7:45=A0am, whygee

C'est pas mal, mais l'algo Cordic n=E9c=E9ssite une table ? Alors autant y coller directement les valeurs des cosinus, non ?

Reply to
Jean-Christophe

dans mes souvenirs, non, CORDIC n'a besoin que d'une constante.

je n'ai pas pris le temps de bien regarder l'article de wikipedia, je ne sais pas ce qu'ils ont bien pu traficoter avec l'algorithme... qui est d'ailleurs assez fascinant :-) yg

--=20

formatting link
/
formatting link

Reply to
whygee

res

je l'ai mis comme dernier lien dans mon post :-D comme quoi il faut lire jusqu'au bout avant de cliquer partout ;-)

yg

--=20

formatting link
/
formatting link

Reply to
whygee

On Jun 12, 9:38=A0pm, whygee

Pas dans le lien que tu as donn=E9 :

formatting link

Reply to
Jean-Christophe

Bonjour,

Je n'ai pas eu accès au net de tout le WE (merci les orages), et ce matin je vois tous ces messages : SUPER !!

Merci à vous tous, je vais aller voir toutes vos pistes (pour le tracé de cercle avec racine carré j'avais déjà fait, mais ça ne résoud pas mon problème d'arcs)

a+ François

Reply to
Francois

Francois wrote: Si vous avez des idées, je suis tout ouïe ================ Si tu préfères un copié-collé (qui marche ..) , voici un fichier source extrait d'un compilateur commercial

formatting link

( J'ai trouvé ça, fonction élaborée par les informaticiens de la société CCS qui normalement ne devrait pas se trouver sur le Web car, attachée seulement à chaque licence du produit ) Cette méthode, s'inspirant des (vieux) travaux de Bresenham est surtout adaptée pour "allumer" des pixels sur un écran. La transposition en n'importe quel langage est simple , int 16 bits mais "signed"

Reply to
maioré

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.