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.with
--> { originPoint = Point2d.origin
--> , direction = Direction2d.x
--> }The global Y axis.
Axis2d.y
--> Axis2d.with
--> { originPoint = Point2d.origin
--> , direction = Direction2d.y
--> }Construct an axis from its origin point and direction:
exampleAxis =
Axis2d.with
{ originPoint =
Point2d.fromCoordinates ( 1, 3 )
, direction =
Direction2d.fromAngle (degrees 30)
}Get 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.flip exampleAxis
--> Axis2d.with
--> { originPoint =
--> Point2d.fromCoordinates ( 1, 3 )
--> , direction =
--> 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.with
--> { originPoint =
--> Point2d.fromCoordinates ( 4, 5 )
--> , direction =
--> 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.
Axis2d.rotateAround Point2d.origin
(degrees 90)
exampleAxis
--> Axis2d.with
--> { originPoint =
--> Point2d.fromCoordinates ( -3, 1 )
--> , direction =
--> 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.with
--> { originPoint =
--> Point2d.fromCoordinates ( 3, 6 )
--> , direction =
--> Direction2d.fromAngle (degrees 30)
--> }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.with
--> { originPoint =
--> Point2d.fromCoordinates ( 1, -3 )
--> , direction =
--> Direction2d.fromAngle (degrees -30)
--> }Functions for transforming axes between local and global coordinates in different coordinate frames.
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.with
--> { originPoint =
--> Point2d.fromCoordinates ( -1, 0 )
--> , direction =
--> 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.with
--> { originPoint =
--> Point2d.fromCoordinates ( 3, 6 )
--> , direction =
--> Direction2d.fromAngle (degrees 30)
--> }