/*************************************************************************************************************************************/
/* */
/* 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));
}