Faire un algorithme de débutant

cs_momo_1 Messages postés 3 Date d'inscription mercredi 17 mars 2004 Statut Membre Dernière intervention 18 mars 2004 - 18 mars 2004 à 09:41
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 18 mars 2004 à 19:35
Aider moi à faire un algo pour calculer le barycentre d'un cercle : le centre en gros.

5 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
18 mars 2004 à 13:00
D'accord mais avec quoi comme données initiales ?
0
cs_momo_1 Messages postés 3 Date d'inscription mercredi 17 mars 2004 Statut Membre Dernière intervention 18 mars 2004
18 mars 2004 à 14:26
j'ai un ensemble de pixel au départ.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 mars 2004 à 15:06
je sais pas trop mais je dirais le point(x0, y0) avec

x0= somme(xi)/n pour chacun des n points du cercle
y0= somme(yi)/n pour chacun des n points du cercle

vraiment très simple a écrire en C si c'est bien de cela qu'il s'agit
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
18 mars 2004 à 19:05
Ba c est bien le calcul d un isobarycentre cette formule donc ca doit marcher...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
18 mars 2004 à 19:35
vecchio56 :
cette formule ne marche que si les points utilisés pour le calculs sont bien répartis sur le cercle.

méthode à partir de 3 points non alignés :

#include <stdio.h>
#include <math.h>

//*******************************************************************
// équation d'un cercle de centre (x0,y0) et de rayon R :
// (x-x0)² + (y-y0)² = R²
// 
// avec 3 point A, B et C non alignés, on peut trouver le
// cercle passant par ces 3 points:
//
// les 3 équations de base (développées) :
// (1) xA² + x0² - 2*xA*x0 + yA² + y0² - 2*yA*y0 = R²
// (2) xB² + x0² - 2*xB*x0 + yB² + y0² - 2*yB*y0 = R²
// (3) xC² + x0² - 2*xC*x0 + yC² + y0² - 2*yC*y0 = R²
//// on réalise (2)' (2)-(1) et (3)' (3)-(1)
// après simplification et réarrangement :
// (2)' 2*x0*(xA-xB) + 2*y0*(yA-yB) = xA² - xB² + yA² - yB²
// (3)' 2*x0*(xA-xC) + 2*y0*(yA-yC) = xA² - xC² + yA² - yC²
//
// (2)' A*x0 + B*y0 = C
// (3)' D*x0 + E*y0 = F
//
//
// système de 2 équations à 2 inconnues, calcul du déterminant
// (si nul, le système n'a pas de solution unique et on n'a pas
// affaire à un cercle) :
// det = A*E - B*D
//
// les solutions sont :
// x0 = (EC-BF)/det
// y0 = (AF-DC)/det
//
// le rayon s'obtient ensuite :
// R = sqrt( (xA-x0)² + (yA-y0)² )
//*******************************************************************

int main(int argc, char* argv[])
{
// les 3 points initiaux (cercle de centre (2,3) et de rayon 4,
// correspondant à des angles de 60°, 150° et 225°)double xA 4.0000, yA 6.4641;double xB -1.4641, yB 5.0000;double xC -0.8284, yC 0.1716;

// calcul de A, B, C, D, E, F et det
double A = 2*(xA-xB);
double B = 2*(yA-yB);
double C = xA*xA - xB*xB + yA*yA - yB*yB;
double D = 2*(xA-xC);
double E = 2*(yA-yC);
double F = xA*xA - xC*xC + yA*yA - yC*yC;
double det = A*E - B*D;printf("A %lf, B %lf, C = %lf\r\n", A, B, C);printf("D %lf, E %lf, F = %lf\r\n", D, E, F);
printf("det = %lf\r\n", det);
if(det == 0)
{
printf("det = 0, ce n'est pas un cercle\r\n");
return 0;
}

// calcul de x0 et y0
double x0 = (E*C-B*F)/det;
double y0 = (A*F-D*C)/det;
printf("x0 = %lf\r\n", x0);
printf("y0 = %lf\r\n", y0);

// calcul de R
double R = sqrt( (xA-x0)*(xA-x0) + (yA-y0)*(yA-y0) );
printf("R = %lf\r\n", R);
return 0;
}

0
Rejoignez-nous