opensolid/geometry/1.2.0

NOTE: this package is not compatible with Elm 0.19.1

OpenSolid.QuadraticSpline2d

QuadraticSpline2d

A QuadraticSpline2d is a quadratic Bézier curve in 2D defined by three control points. This module contains functionality for

  • Evaluating points and derivatives along a spline
  • Scaling, rotating, translating or mirroring a spline
  • Converting a spline between local and global coordinates in different reference frames

Splines can be constructed by passing a tuple of control points to the QuadraticSpline2d constructor, for example

exampleSpline =
    QuadraticSpline2d
        ( Point2d ( 1, 1 )
        , Point2d ( 3, 4 )
        , Point2d ( 5, 1 )
        )

Constructors

bezier : Point2d -> Point2d -> Point2d -> QuadraticSpline2d

Construct a spline from its three control points. This is the same as just using the QuadraticSpline2d constructor directly;

QuadraticSpline2d.bezier p1 p2 p3

is equivalent to

QuadraticSpline2d ( p1, p2, p3 )

Accessors

controlPoints : QuadraticSpline2d -> ( Point2d, Point2d, Point2d )

Get the control points of a spline as a tuple.

( p1, p2, p3 ) =
    QuadraticSpline2d.controlPoints exampleSpline




--> p1 = Point2d ( 1, 1 )
--> p2 = Point2d ( 3, 4 )
--> p3 = Point2d ( 5, 1 )
startPoint : QuadraticSpline2d -> Point2d

Get the start point of a spline. This is equal to the spline's first control point.

QuadraticSpline2d.startPoint exampleSpline
--> Point2d ( 1, 1 )
endPoint : QuadraticSpline2d -> Point2d

Get the end point of a spline. This is equal to the spline's last control point.

QuadraticSpline2d.endPoint exampleSpline
--> Point2d ( 5, 1 )
startDerivative : QuadraticSpline2d -> Vector2d

Get the start derivative of a spline. This is equal to twice the vector from the spline's first control point to its second.

QuadraticSpline2d.startDerivative exampleSpline
--> Vector2d ( 4, 6 )
endDerivative : QuadraticSpline2d -> Vector2d

Get the end derivative of a spline. This is equal to twice the vector from the spline's second control point to its third.

QuadraticSpline2d.endDerivative exampleSpline
--> Vector2d ( 4, -6 )

Evaluation

point : QuadraticSpline2d -> Float -> Point2d

Get a point along a spline, based on a parameter that ranges from 0 to 1. A parameter value of 0 corresponds to the start point of the spline and a value of 1 corresponds to the end point.

QuadraticSpline2d.point exampleSpline 0
--> Point2d ( 1, 1 )


QuadraticSpline2d.point exampleSpline 0.5
--> Point2d ( 3, 2.5 )


QuadraticSpline2d.point exampleSpline 1
--> Point2d ( 5, 1 )
derivative : QuadraticSpline2d -> Float -> Vector2d

Get the deriative value at a point along a spline, based on a parameter that ranges from 0 to 1. A parameter value of 0 corresponds to the start derivative of the spline and a value of 1 corresponds to the end derivative.

QuadraticSpline2d.derivative exampleSpline 0
--> Vector2d ( 4, 6 )


QuadraticSpline2d.derivative exampleSpline 0.5
--> Vector2d ( 4, 0 )


QuadraticSpline2d.derivative exampleSpline 1
--> Vector2d ( 4, -6 )

Note that the derivative interpolates linearly from end to end.

Transformations

scaleAbout : Point2d -> Float -> QuadraticSpline2d -> QuadraticSpline2d

Scale a spline about the given center point by the given scale.

QuadraticSpline2d.scaleAbout Point2d.origin 2 exampleSpline
--> QuadraticSpline2d
-->     ( Point2d ( 2, 2 )
-->     , Point2d ( 6, 8 )
-->     , Point2d ( 10, 2 )
-->     )
rotateAround : Point2d -> Float -> QuadraticSpline2d -> QuadraticSpline2d

Rotate a spline counterclockwise around a given center point by a given angle (in radians).

QuadraticSpline2d.rotateAround Point2d.origin (degrees 90) exampleSpline
--> QuadraticSpline2d
-->     ( Point2d ( -1, 1 )
-->     , Point2d ( -4, 3 )
-->     , Point2d ( -1, 5 )
-->     )
translateBy : Vector2d -> QuadraticSpline2d -> QuadraticSpline2d

Translate a spline by a given displacement.

displacement =
    Vector2d ( 2, 3 )


QuadraticSpline2d.translateBy displacement exampleSpline
--> QuadraticSpline2d
-->     ( Point2d ( 3, 4 )
-->     , Point2d ( 5, 7 )
-->     , Point2d ( 7, 4 )
-->     )
mirrorAcross : Axis2d -> QuadraticSpline2d -> QuadraticSpline2d

Mirror a spline across an axis.

QuadraticSpline2d.mirrorAcross Axis2d.x exampleSpline
--> QuadraticSpline2d
-->     ( Point2d ( 1, -1 )
-->     , Point2d ( 3, -4 )
-->     , Point2d ( 5, -1 )
-->     )

Coordinate frames

relativeTo : Frame2d -> QuadraticSpline2d -> QuadraticSpline2d

Take a spline defined in global coordinates, and return it expressed in local coordinates relative to a given reference frame.

localFrame =
    Frame2d.at (Point2d ( 1, 2 ))


QuadraticSpline2d.relativeTo localFrame exampleSpline
--> QuadraticSpline2d
-->     ( Point2d ( 0, -1 )
-->     , Point2d ( 2, 2 )
-->     , Point2d ( 4, -1 )
-->     )
placeIn : Frame2d -> QuadraticSpline2d -> QuadraticSpline2d

Take a spline considered to be defined in local coordinates relative to a given reference frame, and return that spline expressed in global coordinates.

localFrame =
    Frame2d.at (Point2d ( 1, 2 ))


QuadraticSpline2d.placeIn localFrame exampleSpline
--> QuadraticSpline2d
-->     ( Point2d ( 2, 3 )
-->     , Point2d ( 4, 6 )
-->     , Point2d ( 6, 3 )
-->     )

Sketch planes

placeOnto : SketchPlane3d -> QuadraticSpline2d -> QuadraticSpline3d

Take a spline defined in 2D coordinates within a particular sketch plane and return the corresponding spline in 3D.

QuadraticSpline2d.placeOnto SketchPlane3d.xz exampleSpline
--> QuadraticSpline3d
-->     ( Point3d ( 1, 0, 1 )
-->     , Point3d ( 3, 0, 4 )
-->     , Point3d ( 5, 0, 1 )
-->     )