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



Copyright © Jean-François Colonna, 2022-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2023.