An Axis2d represents an infinitely long straight line in 2D and is defined
by an origin point and direction. Axes have several uses, such as:
The global X axis.
Axis2d.x
--> Axis2d.through Point2d.origin Direction2d.xThe global Y axis.
Axis2d.y
--> Axis2d.through Point2d.origin Direction2d.yConstruct an axis through the given origin point with the given direction.
exampleAxis =
Axis2d.through (Point2d.meters 1 3)
(Direction2d.degrees 30)Construct an axis with the given direction, through the given origin point.
Flipped version of through. Having both versions allow you to do different
things with partial application:
-- A list of axes in different directions all passing
-- through the same origin point
List.map (Axis2d.through point) directions
-- A list of parallel axes (all having the same
-- direction) through different points
List.map (Axis2d.withDirection direction) pointsGet the origin point of an axis.
Axis2d.originPoint exampleAxis
--> Point2d.meters 1 3Get the direction of an axis.
Axis2d.direction exampleAxis
--> Direction2d.degrees 30Convert an axis from one units type to another, by providing a conversion factor given as a rate of change of destination units with respect to source units.
Convert an axis from one units type to another, by providing an 'inverse' conversion factor given as a rate of change of source units with respect to destination units.
Reverse the direction of an axis while keeping the same origin point.
Axis2d.reverse exampleAxis
--> Axis2d.through (Point2d.meters 1 3)
--> (Direction2d.degrees -150)Move an axis so that it has the given origin point but unchanged direction.
newOrigin =
Point2d.meters 4 5
Axis2d.moveTo newOrigin exampleAxis
--> Axis2d.through (Point2d.meters 4 5)
--> (Direction2d.degrees 30)Rotate an axis around a given center point by a given angle. Rotates the axis' origin point around the given point by the given angle and the axis' direction by the given angle.
exampleAxis
|> Axis2d.rotateAround Point2d.origin
(Angle.degrees 90)
--> Axis2d.through (Point2d.meters -3 1)
--> (Direction2d.degrees 120)Rotate an axis around its own origin point by the given angle.
Translate an axis by a given displacement. Applies the given displacement to the axis' origin point and leaves the direction unchanged.
displacement =
Vector2d.meters 2 3
Axis2d.translateBy displacement exampleAxis
--> Axis2d.through (Point2d.meters 3 6)
--> (Direction2d.degrees 30)Translate an axis in a given direction by a given distance.
Mirror one axis across another. The axis to mirror across is given first and the axis to mirror is given second.
Axis2d.mirrorAcross Axis2d.x exampleAxis
--> Axis2d.through (Point2d.meters 1 -3)
--> (Direction2d.degrees -30)Take an axis defined in global coordinates, and return it expressed in local coordinates relative to a given reference frame.
frame =
Frame2d.atPoint (Point2d.meters 2 3)
Axis2d.relativeTo frame exampleAxis
--> Axis2d.through (Point2d.meters -1 0)
--> (Direction2d.degrees 30)Take an axis defined in local coordinates relative to a given reference frame, and return that axis expressed in global coordinates.
frame =
Frame2d.atPoint (Point2d.meters 2 3)
Axis2d.placeIn frame exampleAxis
--> Axis2d.through (Point2d.meters 3 6)
--> (Direction2d.degrees 30)