ianmackenzie/elm-geometry/3.4.0

NOTE: the latest version is 4.0.0

QuadraticSpline3d

A QuadraticSpline3d is a quadratic Bézier curve in 3D defined by a start point, control point and end point. 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
type alias QuadraticSpline3d units coordinates =
QuadraticSpline3d units coordinates

Constructors

Point3d units coordinates
-> Point3d units coordinates
-> Point3d units coordinates
-> QuadraticSpline3d units coordinates

Construct a spline from its start point, inner control point and end point:

exampleSpline =
    QuadraticSpline3d.fromControlPoints
        (Point3d.meters 1 1 1)
        (Point3d.meters 3 2 1)
        (Point3d.meters 3 3 3)
on :
SketchPlane3d units coordinates3d { defines : coordinates2d }
-> QuadraticSpline2d units coordinates2d
-> QuadraticSpline3d units coordinates3d

Construct a 3D spline lying on a sketch plane by providing a 2D spline specified in XY coordinates within the sketch plane.

QuadraticSpline3d.on SketchPlane3d.xz <|
    QuadraticSpline2d.fromControlPoints
        (Point2d.meters 1 1)
        (Point2d.meters 3 4)
        (Point2d.meters 5 1)
--> QuadraticSpline3d.fromControlPoints
-->     (Point3d.meters 1 0 1)
-->     (Point3d.meters 3 0 4)
-->     (Point3d.meters 5 0 1)

Properties

startPoint : QuadraticSpline3d units coordinates -> Point3d units coordinates

Get the start point of a spline. Equal to firstControlPoint.

firstControlPoint : QuadraticSpline3d units coordinates -> Point3d units coordinates

Get the first control point of a spline. Equal to startPoint.

secondControlPoint : QuadraticSpline3d units coordinates -> Point3d units coordinates

Get the second control point of a spline.

thirdControlPoint : QuadraticSpline3d units coordinates -> Point3d units coordinates

Get the third and last control point of a spline. Equal to endPoint.

endPoint : QuadraticSpline3d units coordinates -> Point3d units coordinates

Get the end point of a spline. Equal to thirdControlPoint.

startDerivative : QuadraticSpline3d units coordinates -> Vector3d units coordinates

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

QuadraticSpline3d.startDerivative exampleSpline
--> Vector3d.meters 4 2 0
endDerivative : QuadraticSpline3d units coordinates -> Vector3d units coordinates

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

QuadraticSpline3d.endDerivative exampleSpline
--> Vector3d.meters 0 2 4
QuadraticSpline3d units coordinates
-> BoundingBox3d units coordinates

Compute a bounding box for a given spline. It is not guaranteed that the result will be the smallest possible bounding box, since for efficiency the bounding box is computed from the spline's control points (which cover a larger volume than the spline itself).

QuadraticSpline3d.boundingBox exampleSpline
--> BoundingBox3d.from
-->     (Point3d.meters 1 1 1)
-->     (Point3d.meters 3 3 3)

Evaluation

QuadraticSpline3d units coordinates
-> Float
-> Point3d units coordinates

Get the point along a spline at a given parameter value.

type Nondegenerate units coordinates

Represents a nondegenerate spline (one that has finite, non-zero length).

QuadraticSpline3d units coordinates
-> Result
(Point3d units coordinates)
(Nondegenerate units coordinates)

Attempt to construct a nondegenerate spline from a general QuadraticSpline3d. If the spline is in fact degenerate (consists of a single point), returns an Err with that point.

Nondegenerate units coordinates
-> QuadraticSpline3d units coordinates

Convert a nondegenerate spline back to a general QuadraticSpline3d.

tangentDirection : Nondegenerate units coordinates -> Float -> Direction3d coordinates

Get the tangent direction to a nondegenerate spline at a given parameter value.

Nondegenerate units coordinates
-> Float
-> ( Point3d units coordinates, Direction3d coordinates )

Get both the point and tangent direction of a nondegenerate spline at a given parameter value.

Transformations

These transformations generally behave just like the ones in the Point3d module.

QuadraticSpline3d units coordinates
-> QuadraticSpline3d units coordinates

Reverse a spline so that the start point becomes the end point, and vice versa.

Point3d units coordinates
-> Float
-> QuadraticSpline3d units coordinates
-> QuadraticSpline3d units coordinates

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

Axis3d units coordinates
-> Angle
-> QuadraticSpline3d units coordinates
-> QuadraticSpline3d units coordinates

Rotate a spline counterclockwise around a given axis by a given angle.

Vector3d units coordinates
-> QuadraticSpline3d units coordinates
-> QuadraticSpline3d units coordinates

Translate a spline by a given displacement.

Direction3d coordinates
-> Quantity Float units
-> QuadraticSpline3d units coordinates
-> QuadraticSpline3d units coordinates

Translate an arc in a given direction by a given distance.

Plane3d units coordinates
-> QuadraticSpline3d units coordinates
-> QuadraticSpline3d units coordinates

Mirror a spline across a plane.

Plane3d units coordinates
-> QuadraticSpline3d units coordinates
-> QuadraticSpline3d units coordinates

Find the orthographic projection of a spline onto a plane.

Unit conversions

at :
Quantity Float (Rate units2 units1)
-> QuadraticSpline3d units1 coordinates
-> QuadraticSpline3d units2 coordinates

Convert a spline 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.

at_ :
Quantity Float (Rate units1 units2)
-> QuadraticSpline3d units1 coordinates
-> QuadraticSpline3d units2 coordinates

Convert a spline 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.

Coordinate conversions

Frame3d units globalCoordinates { defines : localCoordinates }
-> QuadraticSpline3d units globalCoordinates
-> QuadraticSpline3d units localCoordinates

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

Frame3d units globalCoordinates { defines : localCoordinates }
-> QuadraticSpline3d units localCoordinates
-> QuadraticSpline3d units globalCoordinates

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

Sketch planes

SketchPlane3d units coordinates3d { defines : coordinates2d }
-> QuadraticSpline3d units coordinates3d
-> QuadraticSpline2d units coordinates2d

Project a spline into a given sketch plane. Conceptually, finds the orthographic projection of the spline onto the plane and then expresses the projected spline in 2D sketch coordinates.

Subdivision

QuadraticSpline3d units coordinates
-> ( QuadraticSpline3d units coordinates
, QuadraticSpline3d units coordinates
)

Split a spline into two roughly equal halves. Equivalent to QuadraticSpline3d.splitAt 0.5.

Float
-> QuadraticSpline3d units coordinates
-> ( QuadraticSpline3d units coordinates
, QuadraticSpline3d units coordinates
)

Split a spline at a particular parameter value, resulting in two smaller splines.

Arc length parameterization

type ArcLengthParameterized units coordinates

A spline that has been parameterized by arc length.

{ maxError : Quantity Float units }
-> Nondegenerate units coordinates
-> ArcLengthParameterized units coordinates

Build an arc length parameterization of the given spline, with a given accuracy.

arcLength : ArcLengthParameterized units coordinates -> Quantity Float units

Find the total arc length of a spline, to within the accuracy specified when calling arcLengthParameterized.

For the following evaluation functions, the given arc length will be clamped to the arc length of the spline, so the result will always be on the spline.

ArcLengthParameterized units coordinates
-> Quantity Float units
-> Point3d units coordinates

Get the point along a spline at a given arc length.

ArcLengthParameterized units coordinates
-> Point3d units coordinates

Get the midpoint of a spline. Note that this is the point half way along the spline by arc length, which is not in general the same as evaluating at a parameter value of 0.5.

ArcLengthParameterized units coordinates
-> Quantity Float units
-> Direction3d coordinates

Get the tangent direction along a spline at a given arc length.

ArcLengthParameterized units coordinates
-> Quantity Float units
-> ( Point3d units coordinates, Direction3d coordinates )

Get the point and tangent direction along a spline at a given arc length.

Low level

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

ArcLengthParameterized units coordinates
-> QuadraticSpline3d units coordinates

Get the original QuadraticSpline3d from which an ArcLengthParameterized value was constructed.

Differentiation

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

QuadraticSpline3d units coordinates
-> Float
-> Vector3d units coordinates

Get the first derivative of a spline at a given parameter value. Note that the derivative interpolates linearly from end to end.

secondDerivative : QuadraticSpline3d units coordinates -> Vector3d units coordinates

Get the second derivative of a spline (for a quadratic spline, this is a constant).