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.fromCoordinates ( 1, 3 ))
(Direction2d.fromAngle (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.fromCoordinates ( 1, 3 )Get the direction of an axis.
Axis2d.direction exampleAxis
--> Direction2d.fromAngle (degrees 30)Reverse the direction of an axis while keeping the same origin point.
Axis2d.reverse exampleAxis
--> Axis2d.through (Point2d.fromCoordinates ( 1, 3 ))
--> (Direction2d.fromAngle (degrees -150))Move an axis so that it has the given origin point but unchanged direction.
newOrigin =
Point2d.fromCoordinates ( 4, 5 )
Axis2d.moveTo newOrigin exampleAxis
--> Axis2d.through (Point2d.fromCoordinates ( 4, 5 ))
--> (Direction2d.fromAngle (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 (degrees 90)
--> Axis2d.through (Point2d.fromCoordinates ( -3, 1 ))
--> (Direction2d.fromAngle (degrees 120))Translate an axis by a given displacement. Applies the given displacement to the axis' origin point and leaves the direction unchanged.
displacement =
Vector2d.fromComponents ( 2, 3 )
Axis2d.translateBy displacement exampleAxis
--> Axis2d.through (Point2d.fromCoordinates ( 3, 6 ))
--> (Direction2d.fromAngle (degrees 30))Translate an axis in a given direction by a given distance;
Axis2d.translateIn direction distanceis equivalent to
Axis2d.translateBy
(Vector2d.withLength distance direction)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.fromCoordinates ( 1, -3 ))
--> (Direction2d.fromAngle (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.fromCoordinates ( 2, 3 ))
Axis2d.relativeTo frame exampleAxis
--> Axis2d.through (Point2d.fromCoordinates ( -1, 0 ))
--> (Direction2d.fromAngle (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.fromCoordinates ( 2, 3 ))
Axis2d.placeIn frame exampleAxis
--> Axis2d.through (Point2d.fromCoordinates ( 3, 6 ))
--> (Direction2d.fromAngle (degrees 30))