Resoudre des équation de cercle

Signaler
Messages postés
75
Date d'inscription
vendredi 20 janvier 2006
Statut
Membre
Dernière intervention
16 janvier 2007
-
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
-
slt ts le monde, alors j'ai besoin de petite aide,alors je vais essayer d'étre clair, donc je programme en C++, j'ai dans un tableau un nuage de point ( avec les coordonné x,y), et je vouddrais définir si ces point appartienne à un cercle ( dont je connais le rayon), si oui définir le centre.

Enfait j'ai un télémétre laser, qui scanne une scéne, et je voudrai reconnaitre certain objet dont un cercle, et je voudrai connaitre ça position dans l'espace ( d'ou le calcul du centre ), est ce que qu'elqu'un peut m'aider?
A voir également:

11 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
De manière formelle il suffit de trois points distincts pour définir un cercle de façon unique :
si (x1,y1), (x2,y2), (x3,y3) sont les coordonnées de ces  points alors les coordonnées du centre du cercle (x,y) vérifient l'équation:
(x-x1)^2+(y-y1)^2=(x-x2)^2+(y-y2)^2=(x-x3)^2+(y-y3)^2=R^2
et il n'y a qu'à résoudre cette équation pour déterminer x,y.
Puis il faut vérifier que les autres points sont à même distance du centre:(x-x4)^2+(y-y4)^2=R^2...
Cependant, vu les additions d'erreurs dues aux arrondis et au calcul flottant, il te faudra adapter l'algorithme pour en tenir compte (définitions d'écarts admissibles etc...) sous peine de mauvais fonctionnement.
Messages postés
75
Date d'inscription
vendredi 20 janvier 2006
Statut
Membre
Dernière intervention
16 janvier 2007

merci pour ton aide, mais àa je le savais, le pb c comment résoudre c trois équatoin? je ne vois vraiment pas l'algo a faire...
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
21
Tu peux aussi calculer la distance du point X(x,y) par rapport au Centre du centre C(xc, yc)
sqrt((x-xc)(x-xc) + (y-yc)(y-yc)) < R => dans le cercle                                                    R> sur le cercle
                                                   > R => en dehors du cercle
++
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Suffit de développer et tu retombes sur un système linéaire à 2 inconnues niveau 2nde....
Soit:
x1^2+y1^2-2(x1*x+y1*y)=x2^2+y2^2-2(x2*x+y2*y)=x3^2+y3^2-2(x3*x+y3*y)
Y a plus qu'à résoudre ce truc mais je mettrai pas la solution : d'abord c'est enfantin et en plus c'est long à taper.
Au passage on peut vérifier que le déterminant n'est pas nul sinon il faut changer les points (il y en a 2 qui coïncident).
laurent1024->c'est exactement ce que j'ai proposé sauf qu'il vaut mieux mettre au carré pour virer la racine, un calcul de moins.
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Oui mais son pb de base, c'est qu'il a un nuage de point, pas 3 ! Donc c'est bcp plus compliqué, a mon avis, ca mène sur des statistiques. Et personnellement je vois du tout comment faire.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
luthor->il veut vérifier que tous les points appartiennent à un cercle : il suffit de définir un cercle avec trois points et de vérifier que les autres sont dessus.
Messages postés
793
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
10 février 2021
8
Si c'est un nuage de points, il faut passer par les statisitstiques et introduire l'erreur admise pour dire que le point  appartient ou non à un cecle. Il faut passer par les moindres carrés, ou bien utiliser un algorithme de résolution tel que le Marquardt ( le code est disponible sur numerical recipes in C++, il doit y avoir aussi les algo pour les statisitiques).
On utilise les moindres carrés par seulement pour les droites, mais pour n'importe quelle courbe dont on connait l'équation et dont il faut déterminer les paramètres.
C'est l'approche que j'adopterai, surtout qu'il s'agit de mesures qui ont une certaine incertitude

louis14
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
juj12 => non tu peux pas faire comme ca, car tes points sur prends lesquels ? Faut pas que ca devienne du bricolage, encore que ca dépend du contexte dans lequel il a besoin de faire ca. Si c'est un truc artisanal, ca ira en prenant des points empiriquement, mais c'est tout sauf rigoureux.
Messages postés
75
Date d'inscription
vendredi 20 janvier 2006
Statut
Membre
Dernière intervention
16 janvier 2007

merci a vous ts, tu sait juj au point au je suis un truc qui marche méme si c'est du bricolage je prend... mais ça marche comme els moindre carré? il y a un code sur le forum?
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
21
Il y a une autres technique pour trouver les cercles, mais je sais pas si  tu peux l'utiliser. Normalement c'est pour la détection de cercle dans une image (donc avec des coordonnées entieres). Pour tous les points xi (qui a priori sont sur un cercle) tu trace un cercle de centre xi et de rayon R et tu dessine ton cercle sur une image noire de la meme taille (tu rajout +1 sur les pixels correspondant au cercle). Tu fais ca pour tous les points que tu as. A la fin le pixel qui a la plus grande valeur, c'est le centre du cercle.

++
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Ca vient de me revenir en tete, mais tu peux aussi utiliser le produit convolution. Tu donnes a tes points une petite épaisseur pour qu'il se joigne les uns les autres. Tu construis un cercle de la taille connue avec une petite épaisseur et tu convolues les deux. Tu prends le max des produits et ca te donnera le centre du cercle. Le seul pb, c'est un peu lourd en calcul.