opensolid/geometry/3.0.1

NOTE: this package is not compatible with Elm 0.19.1

CubicSpline2d

CubicSpline2d

A CubicSpline2d is a cubic Bézier curve in 2D defined by a start point, end point and two control points. This module contains functionality for

  • Constructing splines
  • Evaluating points and tangent directions along a spline
  • Scaling, rotating, translating or mirroring a spline
  • Converting a spline between local and global coordinates in different reference frames
type alias CubicSpline2d =
CubicSpline2d

Constructors

{ startPoint : Point2d
, startControlPoint : Point2d
, endControlPoint : Point2d
, endPoint : Point2d
}
-> CubicSpline2d
{ startPoint : Point2d
, startDerivative : Vector2d
, endPoint : Point2d
, endDerivative : Vector2d
}
-> CubicSpline2d
fromQuadraticSpline : QuadraticSpline2d -> CubicSpline2d

Properties

startPoint : CubicSpline2d -> Point2d
endPoint : CubicSpline2d -> Point2d
startControlPoint : CubicSpline2d -> Point2d
endControlPoint : CubicSpline2d -> Point2d
startDerivative : CubicSpline2d -> Vector2d
endDerivative : CubicSpline2d -> Vector2d
boundingBox : CubicSpline2d -> BoundingBox2d

Evaluation

pointOn : CubicSpline2d -> ParameterValue -> Point2d
pointsAt : List ParameterValue -> CubicSpline2d -> List Point2d
nondegenerate : CubicSpline2d -> Result Point2d Nondegenerate
fromNondegenerate : Nondegenerate -> CubicSpline2d
tangentDirection : Nondegenerate -> ParameterValue -> Direction2d
tangentDirectionsAt : List ParameterValue -> Nondegenerate -> List Direction2d
sample : Nondegenerate -> ParameterValue -> ( Point2d, Direction2d )
List ParameterValue
-> Nondegenerate
-> List ( Point2d, Direction2d )

Transformations

reverse : CubicSpline2d -> CubicSpline2d
scaleAbout : Point2d -> Float -> CubicSpline2d -> CubicSpline2d
rotateAround : Point2d -> Float -> CubicSpline2d -> CubicSpline2d
translateBy : Vector2d -> CubicSpline2d -> CubicSpline2d
translateIn : Direction2d -> Float -> CubicSpline2d -> CubicSpline2d
mirrorAcross : Axis2d -> CubicSpline2d -> CubicSpline2d

Coordinate conversions

relativeTo : Frame2d -> CubicSpline2d -> CubicSpline2d
placeIn : Frame2d -> CubicSpline2d -> CubicSpline2d

Subdivision

bisect : CubicSpline2d -> ( CubicSpline2d, CubicSpline2d )
splitAt : ParameterValue -> CubicSpline2d -> ( CubicSpline2d, CubicSpline2d )

Arc length parameterization

arcLengthParameterized : { maxError : Float } -> CubicSpline2d -> ArcLengthParameterized
arcLength : ArcLengthParameterized -> Float
pointAlong : ArcLengthParameterized -> Float -> Maybe Point2d
tangentDirectionAlong : ArcLengthParameterized -> Float -> Maybe Direction2d
sampleAlong : ArcLengthParameterized -> Float -> Maybe ( Point2d, Direction2d )

Low level

An ArcLengthParameterized value is a combination of an ArcLengthParameterization and an underlying CubicSpline2d. If you need to do something fancy, you can extract these two values separately.

arcLengthParameterization : ArcLengthParameterized -> ArcLengthParameterization
fromArcLengthParameterized : ArcLengthParameterized -> CubicSpline2d

Differentiation

You are unlikely to need to use these functions directly, but they are useful if you are writing low-level geometric algorithms.

firstDerivative : CubicSpline2d -> ParameterValue -> Vector2d
firstDerivativesAt : List ParameterValue -> CubicSpline2d -> List Vector2d
secondDerivative : CubicSpline2d -> ParameterValue -> Vector2d
secondDerivativesAt : List ParameterValue -> CubicSpline2d -> List Vector2d
thirdDerivative : CubicSpline2d -> Vector2d
maxSecondDerivativeMagnitude : CubicSpline2d -> Float