A QuadraticSpline2d
is a quadratic Bézier curve
in 2D defined by a start point, control point and end point. This module
contains functionality for
Geometry.Types.QuadraticSpline2d units coordinates
fromControlPoints : Point2d units coordinates -> Point2d units coordinates -> Point2d units coordinates -> QuadraticSpline2d units coordinates
Construct a spline from its start point, inner control point and end point:
exampleSpline =
QuadraticSpline2d.fromControlPoints
(Point2d.meters 1 1)
(Point2d.meters 3 4)
(Point2d.meters 5 1)
bSplineSegments : List Basics.Float -> List (Point2d units coordinates) -> List (QuadraticSpline2d units coordinates)
Construct a B-spline from a list of knot values and a list of control points, and return the individual segments of that B-spline as a list.
The number of knots should be one greater than the number of control points; any extra knots or control points will be dropped. In most cases the first and last knots will be repeated two times; for example, the knots
[ 0, 0, 1, 2, 3, 4, 4 ]
could be used along with 6 control points to form 4 spline segments.
Note that a popular alternate convention uses two extra 'dummy' knot values at the start and end, so if you see an example where the number of knots is three greater than the number of control points (especially if you also notice that the first and last knots are repeated three times instead of two!) then you should drop the first and last knot values.
Knot values should be given in ascending order but will be sorted if necessary.
bSplineIntervals : List Basics.Float -> List (Interval Basics.Float)
For a given set of B-spline knots, return the corresponding intervals between knots that correspond to individual spline segments.
startPoint : QuadraticSpline2d units coordinates -> Point2d units coordinates
Get the start point of a spline. Equal to firstControlPoint
.
firstControlPoint : QuadraticSpline2d units coordinates -> Point2d units coordinates
Get the first control point of a spline. Equal to startPoint
.
secondControlPoint : QuadraticSpline2d units coordinates -> Point2d units coordinates
Get the second control point of a spline.
thirdControlPoint : QuadraticSpline2d units coordinates -> Point2d units coordinates
Get the third and last control point of a spline. Equal to endPoint
.
endPoint : QuadraticSpline2d units coordinates -> Point2d units coordinates
Get the end point of a spline. Equal to thirdControlPoint
.
startDerivative : QuadraticSpline2d units coordinates -> Vector2d 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.
QuadraticSpline2d.startDerivative exampleSpline
--> Vector2d.meters 4 6
endDerivative : QuadraticSpline2d units coordinates -> Vector2d 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.
QuadraticSpline2d.endDerivative exampleSpline
--> Vector2d.meters 4 -6
boundingBox : QuadraticSpline2d units coordinates -> BoundingBox2d 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 area than the spline itself).
QuadraticSpline2d.boundingBox exampleSpline
--> BoundingBox2d.from
--> (Point2d.meters 1 1)
--> (Point2d.meters 5 4)
pointOn : QuadraticSpline2d units coordinates -> Basics.Float -> Point2d units coordinates
Get the point along a spline at a given parameter value.
Represents a nondegenerate spline (one that has finite, non-zero length).
nondegenerate : QuadraticSpline2d units coordinates -> Result (Point2d units coordinates) (Nondegenerate units coordinates)
Attempt to construct a nondegenerate spline from a general
QuadraticSpline2d
. If the spline is in fact degenerate (consists of a single
point), returns an Err
with that point.
fromNondegenerate : Nondegenerate units coordinates -> QuadraticSpline2d units coordinates
Convert a nondegenerate spline back to a general QuadraticSpline2d
.
tangentDirection : Nondegenerate units coordinates -> Basics.Float -> Direction2d coordinates
Get the tangent direction to a nondegenerate spline at a given parameter value.
sample : Nondegenerate units coordinates -> Basics.Float -> ( Point2d units coordinates, Direction2d coordinates )
Get both the point and tangent direction of a nondegenerate spline at a given parameter value.
segments : Basics.Int -> QuadraticSpline2d units coordinates -> Polyline2d units coordinates
Approximate a quadratic spline by a given number of line segments. Note that the number of points in the polyline will be one more than the number of segments.
approximate : Quantity Basics.Float units -> QuadraticSpline2d units coordinates -> Polyline2d units coordinates
Approximate a quadratic spline as a polyline, within a given tolerance. Every point on the returned polyline will be within the given tolerance of the spline.
These transformations generally behave just like the ones in the Point2d
module.
reverse : QuadraticSpline2d units coordinates -> QuadraticSpline2d units coordinates
Reverse a spline so that the start point becomes the end point, and vice versa.
scaleAbout : Point2d units coordinates -> Basics.Float -> QuadraticSpline2d units coordinates -> QuadraticSpline2d units coordinates
Scale a spline about the given center point by the given scale.
rotateAround : Point2d units coordinates -> Angle -> QuadraticSpline2d units coordinates -> QuadraticSpline2d units coordinates
Rotate a spline counterclockwise around a given center point by a given angle.
translateBy : Vector2d units coordinates -> QuadraticSpline2d units coordinates -> QuadraticSpline2d units coordinates
Translate a spline by a given displacement.
translateIn : Direction2d coordinates -> Quantity Basics.Float units -> QuadraticSpline2d units coordinates -> QuadraticSpline2d units coordinates
Translate a spline in a given direction by a given distance.
mirrorAcross : Axis2d units coordinates -> QuadraticSpline2d units coordinates -> QuadraticSpline2d units coordinates
Mirror a spline across an axis.
at : Quantity Basics.Float (Quantity.Rate units2 units1) -> QuadraticSpline2d units1 coordinates -> QuadraticSpline2d 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 Basics.Float (Quantity.Rate units1 units2) -> QuadraticSpline2d units1 coordinates -> QuadraticSpline2d 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.
relativeTo : Frame2d units globalCoordinates { defines : localCoordinates } -> QuadraticSpline2d units globalCoordinates -> QuadraticSpline2d units localCoordinates
Take a spline defined in global coordinates, and return it expressed in local coordinates relative to a given reference frame.
placeIn : Frame2d units globalCoordinates { defines : localCoordinates } -> QuadraticSpline2d units localCoordinates -> QuadraticSpline2d 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.
bisect : QuadraticSpline2d units coordinates -> ( QuadraticSpline2d units coordinates, QuadraticSpline2d units coordinates )
Split a spline into two roughly equal halves. Equivalent to
QuadraticSpline2d.splitAt 0.5
.
splitAt : Basics.Float -> QuadraticSpline2d units coordinates -> ( QuadraticSpline2d units coordinates, QuadraticSpline2d units coordinates )
Split a spline at a particular parameter value, resulting in two smaller splines.
A spline that has been parameterized by arc length.
arcLengthParameterized : { maxError : Quantity Basics.Float units } -> Nondegenerate units coordinates -> ArcLengthParameterized units coordinates
Build an arc length parameterization of the given spline, with a given accuracy.
pointAlong : ArcLengthParameterized units coordinates -> Quantity Basics.Float units -> Point2d units coordinates
Get the point along a spline at a given arc length.
midpoint : ArcLengthParameterized units coordinates -> Point2d 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.
tangentDirectionAlong : ArcLengthParameterized units coordinates -> Quantity Basics.Float units -> Direction2d coordinates
Get the tangent direction along a spline at a given arc length.
sampleAlong : ArcLengthParameterized units coordinates -> Quantity Basics.Float units -> ( Point2d units coordinates, Direction2d coordinates )
Get the point and tangent direction along a spline at a given arc length.
An ArcLengthParameterized
value is a combination of an
ArcLengthParameterization
and an
underlying QuadraticSpline2d
. If you need to do something fancy, you can
extract these two values separately.
arcLengthParameterization : ArcLengthParameterized units coordinates -> ArcLength.Parameterization units
fromArcLengthParameterized : ArcLengthParameterized units coordinates -> QuadraticSpline2d units coordinates
Get the original QuadraticSpline2d
from which an ArcLengthParameterized
value was constructed.
You are unlikely to need to use these functions directly, but they are useful if you are writing low-level geometric algorithms.
firstDerivative : QuadraticSpline2d units coordinates -> Basics.Float -> Vector2d 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 : QuadraticSpline2d units coordinates -> Vector2d units coordinates
Get the second derivative of a spline (for a quadratic spline, this is a constant).
firstDerivativeBoundingBox : QuadraticSpline2d units coordinates -> VectorBoundingBox2d units coordinates
Get the bounds on the first deriative of a spline.
numApproximationSegments : Quantity Basics.Float units -> QuadraticSpline2d units coordinates -> Basics.Int
Determine the number of linear segments needed to approximate a quadratic spline to within a given tolerance.