Module

Data.Geometry.Ellipse

Package
purescript-geometria
Repository
Ebmtranceboy/purescript-geometria

#Ellipse Source

newtype Ellipse

| ;TLDR : | | ------ | | | | e@ | | ( | | Ellipse | | { center | | , a | | , b | | , c | | } | | ) = ellipse center (radiusMax /\ radiusMin) alpha | | | | represents the set of points (x/\y) satisfying: | | | | a * (x - center.x)^2 | | + b * (y - center.y)^2 | | + c * (x - center.x) (y - center.y) - residualConstant(e) | | = 0 | | | | THE ellipse FUNCTION CANNOT REPRESENT AN ELLIPSE | | PASSING THROUGH THE ORIGIN | | |


ELLIPSES

Représentations implicites d'ellipses : 5 degrés de liberté

  • Représentation en ligne de niveau: ................................. f(x,y) = ax2 + by2 + cxy + dx + ey = 1

  • Représentation par équation matricielle: ....................................... _ _ _ _ | a c/2 d/2 | | x | _ _ | c/2 b e/2 | | y | | x y 1| | d/2 e/2 -1 | | 1 | = X^TAX = 0


  • Centrage (abandon des termes de degré 1): ........ Changements de variables: x = X+h et y = Y+k tels que f(x,y) = g(X,Y) = aX2 + bY2 + cXY + L => [h; k] = [ec-2bd; cd-2ae] / (4ab-c2) et L = L(a,b,c,d,e,h,k) = ah2 + bk2 + chk + dh + ek. De plus, f(x,y) = 1 => aX2 + bY2 + cXY = l = 1-L. La représentation de l'ellipse peut alors se limiter à: _ _ _ _ _ _ | a c/2 | | x | | x y | | c/2 b | | y | = X^TBX = l


(cf. fonctions ellipseInternal et residualConstant)

  • Alignement (abandon du terme couplé, après centrage): .......... Diagonalisation de B, matrice symétrique :
  • une matrice diagonale D =[D00, 0; 0, D11] : 2 ddl
  • un angle t : 1 ddl => soit 5 ddl avec les 2 ddl du centrage.

(cf. fonction unCouple)

Représentation explicite d'ellipses :

On fait correspondre à tout point (x,y) du cercle trigonométrique, un point (X,Y) de l'ellipse centrée en (h,k) par la transformation affine :


| X | | h | | cos(t) -sin(t) || s0=sqrt(|l/D00|) 0 || x | | Y |=| k |+| sin(t) cos(t) || 0 s1=sqrt(|l/D11|) || y |


dont la partie linéaire s'apparente à une décomposition SVD (si, comme ici, on choisit V=Id, c'est-à-dire que les points cardinaux du cercle unité correspondent aux points extrêmes de l'ellipse). Ainsi, inversement, à toute matrice T=USV', on peut retrouver les paramètres t, s0 et s1 en

  • diagonalisant T'T
  • orthonormalisant ses vecteurs propres
  • prenant la racine carrée de ses valeurs propres.

(cf. fonctions ellipseDimensions et fromUnitCircle)

Constructors

Instances

#ellipse Source

ellipse :: Point 2 -> Number /\ Number -> Number -> Ellipse

Smart constructor computing the ellipse parameters from :

  • its center
  • the values of the two semi-axes
  • the value of the tilt

#ellipseCenter Source

#residualConstant Source

residualConstant :: Ellipse -> Number

Value of the second member in the updated equation after centering.

#unCouple Source

unCouple :: Ellipse -> Number /\ Number /\ Number

Equivalent to the diagonalization of the symmetric input matrix : t est l'angle de rotation autour de l'origine tel que c'=0 dans la nouvelle representation:

  • tan(2t) = c/(a-b)
  • vec = matrice de rotation d'angle t
  • val = recip vec * m * vec = [d00, 0; 0, d11]

#ellipseDimensions Source

ellipseDimensions :: Ellipse -> Number /\ Number

Semi-axes of the ellipse

#fromUnitCircle Source

fromUnitCircle :: Ellipse -> Point 2 -> Point 2

Explicit construction of a point of the ellipse from a point of the unit circle such that the four cardinal circular points correspond to the extremities of the axes of the ellipse.

#foci Source

foci :: Ellipse -> (Point 2) /\ (Point 2)

The 2 points F0 and F1 such that MF0 + MF1 = 2 X max(units e) for every M of the ellipse.

#quadratic Source

quadratic :: Array (Point 2) -> Ellipse

Extracts the relevant parts of an ellipse defined by 5 points (all different from the origin): symmetric 2X2 matrix /\ position of the center

#brianchon Source

brianchon :: Point 2 -> Point 2 -> Point 2 -> Point 2 -> Point 2 -> Ellipse

The only ellipse tangent to the 5 sides of the polygon described by its vertices.

#cardinal Source

cardinal :: Point 2 -> Point 2 -> Number -> Ellipse

Computes the relevant parts of an ellipse defined by :

  • its center
  • one of its cardinal points, (this sets the first semi-axis), and
  • the length of the other semi-axis. Could also be defined with 5 points :
  • the 4 cardinal points,
  • a fifth point defined as the sum of two consecutive cardinal vectors, over sqrt(2).

#rytz Source

rytz :: Point 2 -> Point 2 -> Point 2 -> Ellipse

Biggest ellipse in a parallelogram defined by:

  • its center
  • the middle of one of its sides
  • the middle of the next side.

#steiner Source

steiner :: Point 2 -> Point 2 -> Point 2 -> Ellipse

Biggest ellipse in a triangle. Could also be defined with 5 points :

  • the 3 segment's middles,
  • the intersection of a median and the symmetric of the opposite side with respect to isobarycenter and
  • another intersection of a median and the symmetric of the opposite side with respect to isobarycenter.

#moveEllipse Source

moveEllipse :: Vector 2 -> Ellipse -> Ellipse

Translation adapted to the chosen representation of an ellipse .

#turnEllipse Source

turnEllipse :: Number -> Ellipse -> Ellipse

Rotation adapted to the chosen representation of an ellipse .

#expandEllipse Source

expandEllipse :: Number /\ Number -> Ellipse -> Ellipse

Scaling adapted to the chosen representation of an ellipse .

#canonicalEllipseCircle Source

#canonicalEllipseLine Source