[{"name":"Hyperbolic","comment":" Explore the hyperbolic space using this module.\nCheckout [the doc for examples](https://orasund.github.io/elm-hyperbolic).\n\n\n# Points\n\n@docs Point, origin, pointAtInfinity, pointsAreEqual, distanceTo, distanceToOrigin, discFillingPolygon\n\n\n# Lines And Line Segments\n\n@docs Line, IdealPoint, HyperIdealPoint, LineSegment, poleOfLine, lineFromIdealPoints, lineSectionTo, lineFromPoints, lineFromLineSegment, midpointOfLine, midpointOfLineSegment, lineFromHyperIdealPointThrough, perpendicularLineThrough, intersectLines, bisectorThrough, reflectBy, nearestIdealPointOf\n\n\n# Gyrovectors\n\n@docs Gyrovector, vectorTo, negate, add, length, einsteinVelocityAddition, rotateClockwise, rotatePointClockwise, scaleBy\n\n\n# Convertion\n\n@docs pointsAlongLine, pointsAlongLineSegment, fromPolarCoords, projectFromEuclideanSpace, projectOntoBeltramiKleinDisc, projectOntoPoincareDisc, toPoincareVector, fromPoincareVector\n\n\n# Advanced\n\n@docs unsafeFromAxialCoord, unsafeFromIdealPoint, unsafeFromRecord, unsafeHyperIdealPointToRecord, unsafePoincareVectorFromRecord, unsafePoincareVectorToRecord, unsafeToAxialCoord, unsafeToRecord\n\n","unions":[{"name":"Gyrovector","comment":" Gyrovector in Poincare-Model\n","args":[],"cases":[]},{"name":"HyperIdealPoint","comment":" A hyper ideal point is a point that only exists in the euclidean projection of the hyperbolic plane into the Beltrami–Klein model.\n","args":[],"cases":[]},{"name":"IdealPoint","comment":" An [ideal point](https://en.wikipedia.org/wiki/Ideal_point) is a point at infinity and can be represented by an angle\n","args":[],"cases":[]},{"name":"Point","comment":" Module for working with hyperbolic geometry. Uses the Beltrami–Klein model.\n\nIdeal points have Beltrami coordinates with length 1.\n\nHyper ideal points have Beltrami coordinates with length > 1.\n\n","args":[],"cases":[]}],"aliases":[{"name":"Line","comment":" We define a line by two [ideal points](https://en.wikipedia.org/wiki/Ideal_point).\n","args":[],"type":"( Hyperbolic.IdealPoint, Hyperbolic.IdealPoint )"},{"name":"LineSegment","comment":" A line segment is defined by two points\n","args":[],"type":"( Hyperbolic.Point, Hyperbolic.Point )"}],"values":[{"name":"add","comment":" Using the Möbius Addition to add two vectors in the poincare disc\n","type":"Hyperbolic.Gyrovector -> Hyperbolic.Gyrovector -> Hyperbolic.Gyrovector"},{"name":"bisectorThrough","comment":" Construct a bisector through a point\n","type":"Hyperbolic.Point -> ( Hyperbolic.Point, Hyperbolic.Point ) -> Maybe.Maybe Hyperbolic.Line"},{"name":"discFillingPolygon","comment":" If you want to construct a tiling in the hyperbolic space, then the length of the polygon specifies how many polygons fit around a point.\n\nIf you look up tilings, you will usually find a Schläfli symbol {p,q}. In that case p = vertices, q = polygonsAroundAPoint.\n\nThe resulting length is for BeltramiCoords\n\n","type":"{ vertices : Basics.Int, polygonsAroundAPoint : Basics.Int } -> Basics.Float"},{"name":"distanceTo","comment":" Get the distance between two points\n","type":"Hyperbolic.Point -> Hyperbolic.Point -> Basics.Float"},{"name":"distanceToOrigin","comment":" Distance to the origin\n","type":"Hyperbolic.Point -> Basics.Float"},{"name":"einsteinVelocityAddition","comment":" Addition for Gyrovectors in the Beltrami Disc Model.\n","type":"Hyperbolic.Point -> Hyperbolic.Point -> Hyperbolic.Point"},{"name":"fromPoincareVector","comment":" convert a vector into a point\n","type":"Hyperbolic.Gyrovector -> Hyperbolic.Point"},{"name":"fromPolarCoords","comment":" Constructs a point using polar coordinates.\n","type":"{ radius : Basics.Float, angle : Basics.Float } -> Hyperbolic.Point"},{"name":"intersectLines","comment":" Two lines may intersect at exactly one point\n","type":"Hyperbolic.Line -> Hyperbolic.Line -> Maybe.Maybe Hyperbolic.Point"},{"name":"length","comment":" Return the length of a vector\n","type":"Hyperbolic.Gyrovector -> Basics.Float"},{"name":"lineFromHyperIdealPointThrough","comment":" Construct a line using an hyper ideal point\n","type":"Hyperbolic.Point -> Hyperbolic.HyperIdealPoint -> Maybe.Maybe Hyperbolic.Line"},{"name":"lineFromIdealPoints","comment":" Constructs a line from two ideal points\n\n    lineFromIdealPoints : IdealPoint -> IdealPoint -> Line\n    lineFromIdealPoints =\n        Tuple.pair\n\n","type":"Hyperbolic.IdealPoint -> Hyperbolic.IdealPoint -> Hyperbolic.Line"},{"name":"lineFromLineSegment","comment":" Convert a line segment into a line\n","type":"Hyperbolic.LineSegment -> Maybe.Maybe Hyperbolic.Line"},{"name":"lineFromPoints","comment":" constructs a line from two points\n","type":"Hyperbolic.Point -> Hyperbolic.Point -> Maybe.Maybe Hyperbolic.Line"},{"name":"lineSectionTo","comment":" Constructs a line segment to a point\n\n    lineSectionTo : BeltramiPoint -> BeltramiPoint -> LineSegment\n    lineSectionTo =\n        Tuple.pair\n\n","type":"Hyperbolic.Point -> Hyperbolic.Point -> Hyperbolic.LineSegment"},{"name":"midpointOfLine","comment":" Construct the midpoint of a line\n","type":"Hyperbolic.Line -> Hyperbolic.Point"},{"name":"midpointOfLineSegment","comment":" Get the midpoint of a line segment\n","type":"Hyperbolic.LineSegment -> Maybe.Maybe Hyperbolic.Point"},{"name":"nearestIdealPointOf","comment":" return the nearest ideal point of a line from a given point\n","type":"Hyperbolic.Line -> Hyperbolic.Point -> Hyperbolic.IdealPoint"},{"name":"negate","comment":" Negate a vector\n","type":"Hyperbolic.Gyrovector -> Hyperbolic.Gyrovector"},{"name":"origin","comment":" The origin is the point in the center.\n","type":"Hyperbolic.Point"},{"name":"perpendicularLineThrough","comment":" Point as to lie on the line\n","type":"Hyperbolic.Point -> Hyperbolic.Line -> Maybe.Maybe Hyperbolic.Line"},{"name":"pointAtInfinity","comment":" An ideal point is a point at infinity, uniquely defined by an angle.\n","type":"Basics.Float -> Hyperbolic.IdealPoint"},{"name":"pointsAlongLine","comment":" Constructs a given amount of point along a line\n","type":"Basics.Int -> Hyperbolic.Line -> List.List Hyperbolic.Point"},{"name":"pointsAlongLineSegment","comment":" Constructs a given amount of point along a line segment\n","type":"Basics.Int -> Hyperbolic.LineSegment -> List.List Hyperbolic.Point"},{"name":"pointsAreEqual","comment":" Returns if two point can be considered equal.\n","type":"Hyperbolic.Point -> Hyperbolic.Point -> Basics.Bool"},{"name":"poleOfLine","comment":" Any line except lines going through the origin, can be associated by a unique hyper ideal point.\n","type":"Hyperbolic.Line -> Maybe.Maybe Hyperbolic.HyperIdealPoint"},{"name":"projectFromEuclideanSpace","comment":" Projects points from euclidean space into hyperbolic space.\nHowever, you can not expect the proportions to stay the same.\n\nPoints further out experience more distortion.\n\n","type":"( Basics.Float, Basics.Float ) -> Hyperbolic.Point"},{"name":"projectOntoBeltramiKleinDisc","comment":" Project Hyperbolic points to the Beltrami klein disc\n","type":"Hyperbolic.Point -> ( Basics.Float, Basics.Float )"},{"name":"projectOntoPoincareDisc","comment":" Project Hyperbolic points to the Poincare disc\n","type":"Hyperbolic.Point -> ( Basics.Float, Basics.Float )"},{"name":"reflectBy","comment":" reflect a point by a line\n","type":"Hyperbolic.Line -> Hyperbolic.Point -> Hyperbolic.Point"},{"name":"rotateClockwise","comment":" Rotate the vector clockwise\n","type":"Basics.Float -> Hyperbolic.Gyrovector -> Hyperbolic.Gyrovector"},{"name":"rotatePointClockwise","comment":" Rotate a point clockwise around the origin\n","type":"Basics.Float -> Hyperbolic.Point -> Hyperbolic.Point"},{"name":"scaleBy","comment":" scale a vector by a factor\n","type":"Basics.Float -> Hyperbolic.Gyrovector -> Hyperbolic.Gyrovector"},{"name":"toPoincareVector","comment":" convert a point into a vector\n","type":"Hyperbolic.Point -> Hyperbolic.Gyrovector"},{"name":"unsafeFromAxialCoord","comment":" Converts Beltrami Coordinates into [Axial coordinates](https://en.wikipedia.org/wiki/Coordinate_systems_for_the_hyperbolic_plane#Axial_coordinates).\n","type":"( Basics.Float, Basics.Float ) -> Hyperbolic.Point"},{"name":"unsafeFromIdealPoint","comment":" ","type":"Hyperbolic.IdealPoint -> Hyperbolic.Point"},{"name":"unsafeFromRecord","comment":" ","type":"{ x : Basics.Float, y : Basics.Float } -> Hyperbolic.Point"},{"name":"unsafeHyperIdealPointToRecord","comment":" ","type":"Hyperbolic.HyperIdealPoint -> { x : Basics.Float, y : Basics.Float }"},{"name":"unsafePoincareVectorFromRecord","comment":" ","type":"{ x : Basics.Float, y : Basics.Float } -> Hyperbolic.Gyrovector"},{"name":"unsafePoincareVectorToRecord","comment":" ","type":"Hyperbolic.Gyrovector -> { x : Basics.Float, y : Basics.Float }"},{"name":"unsafeToAxialCoord","comment":" Converts [Axial coordinates](https://en.wikipedia.org/wiki/Coordinate_systems_for_the_hyperbolic_plane#Axial_coordinates) into Beltrami Coordinates.\n","type":"Hyperbolic.Point -> Maybe.Maybe ( Basics.Float, Basics.Float )"},{"name":"unsafeToRecord","comment":" ","type":"Hyperbolic.Point -> { x : Basics.Float, y : Basics.Float }"},{"name":"vectorTo","comment":" Creates a vector from two points. The length of the vector\n","type":"Hyperbolic.Gyrovector -> Hyperbolic.Gyrovector -> Hyperbolic.Gyrovector"}],"binops":[]}]