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
#ellipseCenter Source
ellipseCenter :: Ellipse -> Point 2
#ellipseInternal Source
ellipseInternal :: Ellipse -> Polynomial (Polynomial Number)
#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]
#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.
#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).
#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 .