ianmackenzie / elm-geometry / EllipticalArc3d

An EllipticalArc3d is a section of an Ellipse3d with a start and end point, or equivalently a 3D version of an EllipticalArc2d. This module includes functionality for


type alias EllipticalArc3d units coordinates =
Geometry.Types.EllipticalArc3d units coordinates

Constructors

on : SketchPlane3d units coordinates { defines : coordinates2d } -> EllipticalArc2d units coordinates2d -> EllipticalArc3d units coordinates

Construct a 3D elliptical arc by placing a 2D elliptical arc on a sketch plane.

Properties

startAngle : EllipticalArc3d units coordinates -> Angle

The start angle of an elliptical arc is the value of the ellipse parameter at the start point of the arc.

sweptAngle : EllipticalArc3d units coordinates -> Angle

The swept angle of an elliptical arc is the difference between values of the ellipse parameter from the start point to the end point of the arc.

startPoint : EllipticalArc3d units coordinates -> Point3d units coordinates

Get the start point of an elliptical arc.

centerPoint : EllipticalArc3d units coordinates -> Point3d units coordinates

axes : EllipticalArc3d units coordinates -> SketchPlane3d units coordinates defines

xAxis : EllipticalArc3d units coordinates -> Axis3d units coordinates

yAxis : EllipticalArc3d units coordinates -> Axis3d units coordinates

xDirection : EllipticalArc3d units coordinates -> Direction3d coordinates

yDirection : EllipticalArc3d units coordinates -> Direction3d coordinates

xRadius : EllipticalArc3d units coordinates -> Quantity Basics.Float units

yRadius : EllipticalArc3d units coordinates -> Quantity Basics.Float units

Bounds

boundingBox : EllipticalArc3d units coordinates -> BoundingBox3d units coordinatets

Get the bounding box of an elliptical arc.

signedDistanceAlong : Axis3d units coordinates -> EllipticalArc3d units coordinates -> Quantity.Interval.Interval Basics.Float units

Project an elliptical arc onto an axis, returning the range of projected distances along that axis.

Evaluation

pointOn : EllipticalArc3d units coordinates -> Basics.Float -> Point3d units coordinates

Get the point along an elliptical arc at a given parameter value.


type Nondegenerate units coordinates

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

nondegenerate : EllipticalArc3d units coordinates -> Result (Point3d units coordinates) (Nondegenerate units coordinates)

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

fromNondegenerate : Nondegenerate units coordinates -> EllipticalArc3d units coordinates

Convert a nondegenerate elliptical arc back to a general EllipticalArc3d.

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

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

sample : Nondegenerate units coordinates -> Basics.Float -> ( Point3d units coordinates, Direction3d coordinates )

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

Linear approximation

segments : Basics.Int -> EllipticalArc3d units coordinates -> Polyline3d units coordinates

Approximate an elliptical arc 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 -> EllipticalArc3d units coordinates -> Polyline3d units coordinates

Approximate an elliptical arc as a polyline, within a given tolerance. Every point on the returned polyline will be within the given tolerance of the elliptical arc.

Transformations

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

reverse : EllipticalArc3d units coordinates -> EllipticalArc3d units coordinates

Reverse the direction of an elliptical arc, so that the start point becomes the end point and vice versa. Does not change the shape of the arc or any properties of the underlying ellipse.

scaleAbout : Point3d units coordinates -> Basics.Float -> EllipticalArc3d units coordinates -> EllipticalArc3d units coordinates

Scale an elliptical arc about a given point by a given scale.

rotateAround : Axis3d units coordinates -> Angle -> EllipticalArc3d units coordinates -> EllipticalArc3d units coordinates

Rotate an elliptical arc around a given axis by a given angle.

translateBy : Vector3d units coordinates -> EllipticalArc3d units coordinates -> EllipticalArc3d units coordinates

Translate an elliptical arc by a given displacement.

translateIn : Direction3d coordinates -> Quantity Basics.Float units -> EllipticalArc3d units coordinates -> EllipticalArc3d units coordinates

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

mirrorAcross : Plane3d units coordinates -> EllipticalArc3d units coordinates -> EllipticalArc3d units coordinates

Mirror an elliptical arc across a given plane.

projectOnto : Plane3d units coordinates -> EllipticalArc3d units coordinates -> EllipticalArc3d units coordinates

Project an elliptical arc onto a plane.

projectInto : SketchPlane3d units coordinates { defines : coordinates2d } -> EllipticalArc3d units coordinates -> EllipticalArc2d units coordinates2d

Project a 3D elliptical arc into a sketch plane.

Unit conversions

at : Quantity Basics.Float (Quantity.Rate units2 units1) -> EllipticalArc3d units1 coordinates -> EllipticalArc3d units2 coordinates

Convert an elliptical arc 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) -> EllipticalArc3d units1 coordinates -> EllipticalArc3d units2 coordinates

Convert an elliptical arc 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

relativeTo : Frame3d units globalCoordinates { defines : localCoordinates } -> EllipticalArc3d units globalCoordinates -> EllipticalArc3d units localCoordinates

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

placeIn : Frame3d units globalCoordinates { defines : localCoordinates } -> EllipticalArc3d units localCoordinates -> EllipticalArc3d units globalCoordinates

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

Arc length parameterization


type ArcLengthParameterized units coordinates

An elliptical arc 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 elliptical arc, with a given accuracy.

pointAlong : ArcLengthParameterized units coordinates -> Quantity Basics.Float units -> Point3d units coordinates

Get the point along an elliptical arc at a given arc length.

midpoint : ArcLengthParameterized units coordinates -> Point3d units coordinates

Get the midpoint of an elliptical arc. Note that this is the point half way along the elliptical arc 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 -> Direction3d coordinates

Get the tangent direction along an elliptical arc at a given arc length.

sampleAlong : ArcLengthParameterized units coordinates -> Quantity Basics.Float units -> ( Point3d units coordinates, Direction3d coordinates )

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

Low level

An ArcLengthParameterized value is a combination of an ArcLengthParameterization and an underlying EllipticalArc3d. 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 -> EllipticalArc3d units coordinates

Advanced

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

firstDerivative : EllipticalArc3d units coordinates -> Basics.Float -> Vector3d units coordinates

Get the first derivative of an elliptical arc at a given parameter value.

firstDerivativeBoundingBox : EllipticalArc3d units coordinates -> VectorBoundingBox3d units coordinates

Get the bounds on the first derivative of an elliptical arc.

maxSecondDerivativeMagnitude : EllipticalArc3d units coordinates -> Quantity Basics.Float units

Find a conservative upper bound on the magnitude of the second derivative of an elliptical arc. This can be useful when determining error bounds for various kinds of linear approximations.

numApproximationSegments : Quantity Basics.Float units -> EllipticalArc3d units coordinates -> Basics.Int

Determine the number of linear segments needed to approximate an elliptical arc to within a given tolerance.