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