Module

Data.Geometry

Package
purescript-geometria
Repository
Ebmtranceboy/purescript-geometria

Re-exports from Data.Geometry.Ellipse

#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

#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]

#turnEllipse Source

turnEllipse :: Number -> Ellipse -> Ellipse

Rotation adapted to the chosen representation of an ellipse .

#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.

#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.

#residualConstant Source

residualConstant :: Ellipse -> Number

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

#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

#moveEllipse Source

moveEllipse :: Vector 2 -> Ellipse -> Ellipse

Translation adapted to the chosen representation of an 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.

#expandEllipse Source

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

Scaling adapted to the chosen representation of an ellipse .

#ellipseDimensions Source

ellipseDimensions :: Ellipse -> Number /\ Number

Semi-axes of the ellipse

#ellipseCenter Source

#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

#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).

#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.

Re-exports from Data.Geometry.Space

#wedge Source

wedge :: Vector 3 -> Vector 3 -> Vector 3

#revolution Source

revolution :: Vector 3 -> Number -> Vector 3 -> Vector 3

rotation de u d'un angle a autour de l'axe normalisé n

#land Source

land :: Vector 3 -> Vector 3 -> Vector 3

Re-exports from Data.Geometry.Types

#Vector Source

newtype Vector :: Int -> Typenewtype Vector (n :: Int)

Constructors

Instances

#Point Source

newtype Point :: Int -> Typenewtype Point (n :: Int)

Constructors

Instances

#Analytic Source

class Analytic a  where

Members

Instances

#EuclideanSpace Source

class EuclideanSpace a  where

Members

Instances

#Metric Source

class Metric a  where

Members

Instances

#Shape Source

class Shape :: Int -> (Int -> Type) -> Constraintclass Shape n s  where

Members

Instances

#vector Source

vector :: forall n. Point n -> Point n -> Vector n

#translatedBy Source

translatedBy :: forall n. Point n -> Vector n -> Point n

#system Source

#segment Source

segment :: forall n. Point n -> Point n -> Segment n

#scale Source

scale :: forall n. Number -> Vector n -> Vector n

#rotated Source

#projector Source

projector :: forall n s. ToString n s => IsSymbol s => Vector n -> Vector n -> Matrix Number

Matrix used by the project function.

#projection Source

projection :: forall n. Vector n -> Vector n -> Vector n

projection d v projects a vector v on a vector d.

#project Source

project :: forall n s. ToString n s => IsSymbol s => Vector n -> Vector n -> Vector n -> Vector n

project n d u projects a vector u on a plane, passing through the origin and of normal vector n, using a direction parallel to d.

#point Source

point :: forall @n. Shape n Point => Polynomial Number -> Point n

#normalized Source

normalized :: forall n. Vector n -> Vector n

#normalTo Source

#middle Source

middle :: forall n. Segment n -> Point n

#line Source

line :: forall n. Point n -> Point n -> Line n

#immerse Source

immerse :: forall a n n1. Analytic (a n) => Analytic (a n1) => Add n 1 n1 => a n -> a n1

Increment the dimension of a point/vector by adding a zero coordinate after the other coordinates.

#halfline Source

halfline :: forall n. Point n -> Vector n -> HalfLine n

#freeVector Source

freeVector :: forall @n. Shape n Vector => Polynomial Number -> Vector n

#drain Source

drain :: forall a s n n1. ToString n1 s => IsSymbol s => Analytic (a n) => Analytic (a n1) => Add n1 1 n => a n -> a n1

Decrement the dimension of a point/vector by removing its last coordinate.

#cosAngle Source

cosAngle :: forall n. Vector n -> Vector n -> Number

#circle Source

#anyVector2 Source

#anyPoint2 Source

#(<+|) Source

Operator alias for Data.Geometry.Types.translatedBy (left-associative / precedence 6)