/*************************************************************************************************************************************/ /* */ /* D E T E R M I N A T I O N D E L ' E Q U A T I O N D ' U N E E L L I P S E : */ /* */ /* */ /* Author of '$xtc/EquationEllipse.01$vv$c' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20221010122955). */ /* */ /*************************************************************************************************************************************/ #include <stdio.h> extern double sqrt(); #define CARRE(z) \ ((z)*(z)) #define CHECK(x,y) \ (CARRE(x)/CARRE(a))+(CARRE(y)/CARRE(b)) void main() { double x1=+143150528185.577606; double y1=+383656913569.580444; double x2=+312520841585.724304; double y2=+127567417275.454803; /* Les points {x1,y1} et {x2,Y2} sont deux points de l'ellipse obtenue par integration */ /* des equations de Newton ('v $xiirk/$Fnota Debut_listG_NCOS_81_coordonnees_XY'). Ces */ /* deux points ont ete choisis au hasard dans la liste de coordonnees precedemment citee... */ double X1=CARRE(x1); double Y1=CARRE(y1); double X2=CARRE(x2); double Y2=CARRE(y2); /* ATTENTION : les coordonnees ne correspondant pas a une ellipse centree (voir */ /* 'v $xtc/EquationEllipse.02$vv$c centrer.l.ellipse') l'usage de l'equation "canonique" */ /* de l'ellipse ci-apres est en fait illegal... */ /* */ /* On va travailler simplement sur les carres en passant de : */ /* */ /* 2 2 2 2 */ /* x1 y1 x2 y2 */ /* ----- + ----- = 1 ----- + ----- = 1 */ /* 2 2 2 2 */ /* a b a b */ /* */ /* a : */ /* */ /* X1 Y1 X2 Y2 */ /* ---- + ---- = 1 ---- + ---- = 1 */ /* A B A B */ /* */ /* puis a : */ /* */ /* iA.X1 + iB.Y1 = 1 iA.X2 + iB.Y2 = 1 */ /* */ /* {iA,iB} etant les inverses de {A,B}. On est donc en presence d'un systeme lineaire de */ /* deux equations a deux inconnues trivial a resoudre... */ double a,A,iA; double b,B,iB; double determinant=((Y2*X1)-(Y1*X2)); iB = (X1-X2)/determinant; iA = (Y2-Y1)/determinant; A = 1/iA; B = 1/iB; a = sqrt(A); b = sqrt(B); printf("\n"); printf("ATTENTION : les valeurs des parametres 'a' et 'b' ci-dessous sont tres 'approximatives...\n\n"); printf("a=%f\n",a); printf("b=%f\n",b); /* ATTENTION : les coordonnees ne correspondant pas a une ellipse centree (voir */ /* 'v $xtc/EquationEllipse.02$vv$c centrer.l.ellipse') l'usage de l'equation "canonique" */ /* de l'ellipse est en fait illegal et les parametres {a,b} calcules ci-dessus sont tres */ /* certainement "approximatifs"... */ printf("\n"); printf("Check1=%f\n",CHECK(x1,y1)); printf("Check2=%f\n",CHECK(x2,y2)); }