par nada114 » 17 Jan 2006, 12:04
Salut,
Merci pour votre aide.
Jai utilisé une solution qui ressemble a celles proposées :
Jai retrouvé le point (C) diamétralement opposé à lun de mes points (B) : en utilisant la perpendiculaires à mon segment [AB] en A et tel que le triangle ABC soit droit en A (théorème de Pythagore). Le centre est le milieu du segment [BC].
Jai formulé ma solution en un procédure (C++) que voici
Sachant que « sqr » est le carré et « sqrt » est la racine carré
void getCenter(double x1,double y1,double x2,double y2,double R, double &X1,double &Y1, double &X2,double &Y2)
{
if(x1==x2)
{
Y1=y1;
Y2=y1;
X1=x1-R;
X2=x1+R;
X1=(X1+x2)/2;
Y1=(Y1+y2)/2;
X2=(X2+x2)/2;
Y2=(Y2+y2)/2;
}
else
{
double d,D, a, b,A,B,C, q;
d=sqr(x1-x2) + sqr(y1-y2);
D=4*sqr(R)- d;[COLOR=YellowGreen]//carré de la distance AC
//Xc=a*Yc+b
a=(y1-y2)/(x2-x1);
b=x1+y1*((y2-y1)/(x2-x1));
//A*Yc*Yc +B*Yc + C=0
A=sqr(a)+1;
B= 2*(a*(b-x1)-y1);
C=sqr(b-x1) +sqr(y1)-D;
q = sqr(B)-(4*A*C);
if (q0)
{
Y1= (-B-(sqrt(q)))/2*A;
X1=a*Y1+b;
X1=(X1+x2)/2;
Y1=(Y1+y2)/2;
Y2= (-B+(sqrt(q)))/2*A;
X2=a*Y2+b;
X2=(X2+x2)/2;
Y2=(Y2+y2)/2;
}
}
} [/COLOR]