Longueur d'une portion d'ellipse

 

Rappel théorique

Considérons une ellipse de centre O, de demi-axe x égal à rx, de demi-axe y égal à ry.
Soit un point P(x, y) de l'ellipse et θ l'angle (OP, Ox).

ellipse

Tout point P de l'ellipse a pour coordonnées :

ellipse

2 points infiniment voisins de l'ellipse sont tels que :

ellipse

Autrement dit, la longueur de l'ellipse entre ces 2 points est :

ellipse

Par conséquent, la longueur de l'ellipse entre 2 points P1 et P2 peut s'écrire :

ellipse

en ayant posé au préalable A = 0.5 [rx² + ry²] et B = 0.5 [rx² - ry²]
Cette intégrale, dite intégrale elliptique, n'est pas calculable; c'est ici que l'outil informatique intervient.
On va discrétiser : L'arc d'ellipse sera assimilé à une ligne polygonale de n segments

Méthodologie

Le sens de parcours trigonométrique sera adopté, de sorte qu'il n'existe aucune ambiguité.
En effet, avec 2 points, il y a 2 portions d'ellipse. Donc , l'ordre point de départ - point d'arrivée est fondamental.
- On demande d'abord rx, ry, les abscisses respectives de P1 et P2 : x1 et x2, puis les signes des ordonnées de P1 et de P2.

- Aprés avoir vérifié que rx et ry sont strictement positifs, on vérifie que x1 et x2 sont plausibles, c'est-à-dire que |x1| ≤ rx et |x2| ≤ rx
Les signes des ordonnées indiqueront dans quel quadrant on se trouve.
Remarque :
Pour calculer le périmêtre total de l'ellipse, il suffira que l'utilisateur entre x1=0 , signe + et x2=0, signe -

- on définit le nombre de segments d'interpolation n

- on calcule les coefficients A et B définis précédemment

- on définit une fonction teta dans laquelle :
       si x=rx alors retourne 0 ( pas de calcul ! teta=0)
       si le signe est négatif alors eps=-1 sinon eps=1
       si x=0 alors retourne eps . Π/2 sinon retourne eps.acos(x / rx)

- on calcule l'incrément angulaire Δθ
       si les 2 angles sont nuls, c'est que l'on veut le périmêtre alors Δθ=2Π/ n
       sinon on calcule la différence angulaire diff = θ2 - θ1
       Comme on s'impose le sens trigonométrique, on teste le signe :
              si diff < 0 alors Δθ=2θ + diff / n sinon Δθ= diff / n

- on calcule enfin la longueur :
       initialisation de la longueur à 0.
pour i =1 jusqu'à la valeur n faire
       θi = θ1+(i*Δθ)
       longueur = longueur + |Δθ| * sqrt( A - B * cos(2*θi) )

Traduction en php

Développement

On pourrait continuer en faisant varier le nombre d'incréments n et faire un calcul de précision relative de façon à voir à partir de quelle valeur de n le gain de précision supplémentaire obtenu en augmentant n soit en dessous d'une valeur définie.

On pourrait aussi tenir compte d'une position absolue à l'écran comme l'indique la figure suivante

ellipse

 


Page chargée en 0.015 sec.

Dernière Modification : Lun 13 Janvier 2025 14:22
Copyright © 1999-2025 Jean-Paul Molina Tous droits réservés.

 

to Google