Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

cercle point a point

Posté par
ecureuil744
12-12-15 à 14:27

Bonjour a tous,

je tombe sur un problème mathématique lors de la programmation d'une nouvelle machine de ma fabrication.

Je vous expose donc mon problème, j'aimerais calculer les points d'un cercle avec un certain pas, j'ai cherche coté trigo. mais impossible de trouver les bons résultat :

je part d'un point XY (ex X1 ; Y1) pour arriver à un autre point (ex X'3 Y'3), tout en ayant un Rayon défini ainsi qu'un "pas" qui serait de 0.025 (et qui peut être variable comme tout les autres chiffre d'ailleurs)  ,
il me faudrait alors trouvé les point en X pour y+"pas" etc...

en suivant les chiffre d'exemple, je chercherais alors le point en X pour Y0.025
puis le point en X pour Y0.05
puis le point en X pour Y0.075 etc...

Je ne sait pas si mon explication est clair, mais je vous remercies d'avance pour votre aide.

Amicalement
Guillaume

PS : si nécessaire je ferais un petit croquis explicatif.

Posté par
Glapion Moderateur
re : cercle point a point 12-12-15 à 14:35

Bonjour, ça serait beaucoup plus facile si tu avais le centre du cercle C(a;b) parce que tu ferais
x = a + R cos
y = b + R sin
avec variant entre deux angle avec un pas.

Posté par
ecureuil744
re : cercle point a point 12-12-15 à 17:40

Bonjour Glapion,
merci pour ta réponse, j'ai chercher sur internet pour trouver le centre d'un cercle par deux point, j'ai alors compris qu'il fallait  faire une équation du second degré ... je doute que mon microprocesseur puissent établir de tels calcules :s
et de plus après réflexion, je ne connais pas l'angle de départ par rapport au centre du cercle, et le deuxième petit problème est que si je me décale d'un pas, la valeur linéaire "Y" ne sera jamais le même ... je me trompe peut être mais je ne trouve toujours pas de solution a mon problème :/

As tu d'autre solutions ?

Posté par
Glapion Moderateur
re : cercle point a point 12-12-15 à 19:36

le centre d'un cercle par deux point, c'est pas possible vu qu'il faut 3 points pour définir un cercle. Sauf si tu as le rayon, et encore il y a deux solutions possibles (une de chaque coté de la médiatrice des deux points).
Avant de programmer quelque chose, il faut résoudre mathématiquement la question, c.a.d trouver le centre du cercle. C'est pas très dur, tu prends l'équation de la médiatrice des deux points que tu as et sur cette médiatrice tu cherches le point qui est à la distance R des deux premiers. C'est faisable.

Posté par
ecureuil744
re : cercle point a point 12-12-15 à 20:40

Je t'expose mon probleme en image ce sera plus simple je pense, voila un petit croquis :

les cotes en gris sont les cotes que je recherche , le 0.1 est une variable, les point de départ et d'arrivé sont des variable, et pour le sens du cercle je le connais c'est soit "sens horaire " soit "antihoraire"

cercle point a point

Posté par
mathafou Moderateur
re : cercle point a point 12-12-15 à 23:49

Bonjour,

en faisant confiance à ton dessin, il semble que ton cercle soit en fait défini par un point, la tangente en ce point (horizontale) et le rayon

tu as tout ce qu'il faut pour calculer la position du centre si tu connais le "point de départ" (le sommet)

évidemment si on ne connait pas le point de départ ... c'est un peu peine perdue, tu dis "c'est une variable" oui, l'essentiel est de savoir si cet variable est une donnée variable du calcul à faire ou un truc inconnu qu'il faut trouver.

et on se demande ce que sont tous ces ovnis verts...

Citation :
je doute que mon microprocesseur puissent établir de tels calculs
tu serais étonné de voir tout ce qu'un simple microprocesseur "moderne" peut calculer ...
c'est quoi ?
de toute façon ce que pourra calculer le microprocesseur c'est avant tout les conséquences d'une étude mathématique sérieuse du problème

comme dans tout problème d'algorithme (microprocesseur = programme = algorithme) la première chose à faire est de déclarer précisément ce qui est entrées et sorties du programme

entrées :
cordonnées de trucmuche et de machin, valeurs de ceci, cela = données variables puisque ce sont des entrées.


sortie : les points du cercle, etc.

pour clarifier la chose tu devrais nommer les points de ton dessin !!
ça évitera des périphrases incompréhensibles du genre "le point bleu qui est à gauche du trait vert" ...

Posté par
ecureuil744
re : cercle point a point 13-12-15 à 11:28

Bonjour Mathafou,
merci de ta réponse;
voila une explication un peu mieux détaillée sans ovnis :p
Au niveau de mon micro. c'est un ATmega32U4  de Atmel qui cadence a 16 MHz, et au cas ou il ne suive pas j' ai la possibilité de passer en Intel double cœur 500 MHz mais ça c'est un autre problème.

cercle point a point

Posté par
mathafou Moderateur
re : cercle point a point 14-12-15 à 12:12

OK donc le point de départ A et le point d'arrivée B ainsi que le rayon R sont connus

et par conséquent, n'est ce pas, on peut très bien avoir un truc comme ça :

cercle point a point

(la donnée de A, B et R impose que la tangente en A n'a rigoureusement aucune raison d'être horizontale et que tes dessins montrent des exemples fallacieux)

il faudra pratiquement obligatoirement trouver le centre

ce centre de coordonnées x, y est à la distance R de A et de B ce qui donne un système d'équations (du second degré) à deux inconnues que l'on résout et dont ne garde que la solution d'ordonnée la plus petite

ce système serait largement simplifié en une simple soustraction si on imposait que la tangente en A soit horizontale mais alors l'une des 5 données xA, yA, xB, yB, R est de trop ...
données redondantes = aucune chance qu'elles soient compatibles entre elles
à moins que ce ne soit pas des données, mais des résultats de calculs préalables avec d'autres données, par exemple seulement 5 des 6 données : xA, yA, xB, yB, R, tangente en A, ou autre chose.
et dans ce cas il serait judicieux de partir de ces données là plutôt que de perdre l'info véritablement donnée et de ne repartir que de résultats malcommodes...


ensuite on a donc puisqu'on connait le centre, l'équation du cercle
et pour avoir des points dont l'espacement vertical est donné (= Pas) le plus simple est à chaque fois de résoudre l'équation en x,
y étant connu = yB + n fois le pas

reste donc dans tous les cas à savoir résoudre des équations du second degré avec un microprocesseur sans trop consommer de ressources
c'est à dire juste à savoir extraire des racines carrées (on suppose tout de même que l'on sait faire les 4 opérations + - : ×)
il y a des techniques éprouvées pour faire ça, mais c'est forcément spécifique à chaque cas, à chaque microprocesseur

s'il y a un processeur en virgule flottante incorporé, la question ne se pose même pas, vu qu'il sait extraire la racine carrée directement.
si le microprocesseur ne sait faire que des additions et soustractions sur 8 bit et c'est tout c'est "un peu plus délicat" !

enfin il serait bon de se poser les vraies questions : à quoi vont servir ces calculs, que cherche-t-on à faire réellement
avec quelle précision ... etc ...
les techniques employées, et l'énoncé lui même ("cercle" ?) dépendent de cette interrogation.
parce que en fonction des réponses à ces vraies question on peut parfaitement faire des approximations qui consistent à dire que chaque arc élémentaire est en fait un segment de droite !!

si le pas est suffisamment petit

de l'équation du cercle (x-x0)² + (y-y0)² = R²
en la dérivant on obtient
2(x-x0)dx + 2(y-y0)dy = 0
et donc dx = -(y-y0)/(x-x0) dy
une approximation consistant à dire : le pas y est suffisamment petit pour en première approximation on ait :

x = -(y-y0)/(x-x0) y
et on calcule les coordonnées de proche en proche par une simple boucle :

donnée pas = y
x = xB
y = yB
tant que nécessaire :
x = -((y-y0)/(x-x0))*y
x = x+x
y = y +y


au besoin si on "n'est pas pressé" on peut faire pareil avec un pas divisé par 1000 par exemple et on ne sort le résultat, x, y que toutes les 1000 boucles

mais dans ce cas le temps de calcul pour faire ces 999 boucles "un peu inutiles" pourrait être largement mis à profit pour calculer une valeur "exacte" (= au moins aussi précise) de racine carrée !!

Posté par
ecureuil744
re : cercle point a point 14-12-15 à 17:50

merci de cette réponse bien prometteuse, il y a la solution , mais je ne suis pas au top dans les math qui touche a l'algèbre ...

je me souviens effectivement des équations du second degré :
f(x) ax2+bx+c mais dans cette équation par quel chiffres de mon calcul doit-je remplacer A B et C ?

pour ce qui es de la précision, le "PAS" est en réalité la précision que je recherche, en calculant des points du cercle je remplace donc les arc par des segment comme mentionné , pour mieux comprendre, ce calcul me servira a faire des interpolation circulaire sur un chariot croisée d'une commande numérique, sachant que je ne suis capable avec celle-ci de ne faire que des "segments" je découpe mon cercle en point pour me rapprocher de la réalité (sachant que les fraiseuse a commande numérique fonctionnent comme çà dans l'industrie)

pour me recentrer sur l'électronique,  mon microprocesseur est tout à fait capable de gérer des racines carrée ainsi que des chiffres a virgule (de type virgule flottante)

le principe de "l'approximation" m'intéresse beaucoup mais j'ai du mal a comprendre le fonctionnement clairement ( j'ai une bonne logique mais j'ai du mal avec les math un peu abstrait )

comment puis-je donc faire mon calcul ?

au niveau de mes "données" ce ne sont pas des valeurs précédemment calculé mais bien des valeurs arrivée de mon "programme" d'exécution

je te remercie pour le temps que tu m'accorde et l'intérêt que tu porte a mon projet

PS : la machine fonctionne déjà  mais ce calcul me manque pour améliorer ses performances

Posté par
bbomaths
re : cercle point a point 20-12-15 à 10:14

Bonjour.

Peut-être pourriez-vous regarder l'algorithme de Bresenham appliqué à un cercle.

Cordialement, bbomaths

Posté par
J-P Posteur d'énigmes
re : cercle point a point 20-12-15 à 10:57

Soit B(0 ; 0) et A(a ; b)  (dessin de mathafou)

La médiatrice de [AB] (lieu du centre du cercle) a pour équation : y = (-a/b).x + (a²+b²)/(2b)  (si b est diff de 0)

Les coordonnées du centre du cercle sont donc les solutions du système :

y = (-a/b).x + (a²+b²)/(2b)
x² + y² = R² (cercle de centre B et de rayon R)

il faut donc résoudre l'équation :
x² + ((-a/b).x + (a²+b²)/(2b))² = R²

Simple équation du second degré ... et ne retenir que la solution qui convient (pour obéir à ton "on sait de quel coté du segment [AB], le centre se trouve)

Le x gardé sera l'abscisse du centre du cercle.
Son ordonnée sera alors déduite de  : y = (-a/b).x + (a²+b²)/(2b)

Ayant les coordonnées du centre et connaissant le rayon R, l'équation du cercle est alors immédiate.

Et on peut écrire l'équation de cet arc de cercle sous la forme  x = f(y) (avec une racine carrée et le signe adéquat).

On se sert de cette équation pour trouver les valeurs de x correspondant aux différents y (incréments par pas).
-----

Si B n'est pas à l'origine du repère, on peut soit un peu compliquer les calculs ci-dessus, soit commencer par faire une translation d'axe (quasi instantané) pour ramener B à l'origine du repère ... et faire la translation dans l'autre sens avec les résultats obtenus.
-----
Remarque, les calculs ne sont à faire qu'une fois de manière littérale, ils ne comportent pas de réelles difficultés. (au plus dur, la résolution d'une équation du second degré).

On a alors l'expression littérale de x = f(y) et n'importe quel µP fera alors facilement le boulot de calculer les x correspondant aux pas des y.

Sauf distraction.  



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !