opensolid/geometry/3.0.1

NOTE: this package is not compatible with Elm 0.19.1

EllipticalArc2d

EllipticalArc2d

An EllipticalArc2d is a section of an Ellipse2d with a start and end point. This module includes functionality for

  • Constructing an elliptical arc from its center or end points
  • Scaling, rotating, translating and mirroring elliptical arcs
  • Evaluating points and derivative vectors along elliptical arcs
  • Forming arc length parameterizations of elliptical arcs

The startAngle and sweptAngle values referred to below are not actually proper angles but instead refer to values of the ellipse parameter. However, in simple cases you don't need to worry about the difference - if startAngle and sweptAngle are both multiples of 90 degrees, then you can treat them as actual angles and everything will behave as you expect.

type alias EllipticalArc2d =
EllipticalArc2d

Constructors

{ centerPoint : Point2d
, xDirection : Direction2d
, xRadius : Float
, yRadius : Float
, startAngle : Float
, sweptAngle : Float
}
-> EllipticalArc2d
{ startPoint : Point2d
, endPoint : Point2d
, xRadius : Float
, yRadius : Float
, xDirection : Direction2d
, sweptAngle : SweptAngle
}
-> Maybe EllipticalArc2d

Properties

startAngle : EllipticalArc2d -> Float
sweptAngle : EllipticalArc2d -> Float
startPoint : EllipticalArc2d -> Point2d
endPoint : EllipticalArc2d -> Point2d
centerPoint : EllipticalArc2d -> Point2d
axes : EllipticalArc2d -> Frame2d
xAxis : EllipticalArc2d -> Axis2d
yAxis : EllipticalArc2d -> Axis2d
xDirection : EllipticalArc2d -> Direction2d
yDirection : EllipticalArc2d -> Direction2d
xRadius : EllipticalArc2d -> Float
yRadius : EllipticalArc2d -> Float

Evaluation

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

Transformations

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

Coordinate conversions

relativeTo : Frame2d -> EllipticalArc2d -> EllipticalArc2d
placeIn : Frame2d -> EllipticalArc2d -> EllipticalArc2d

Arc length parameterization

arcLengthParameterized : { maxError : Float } -> EllipticalArc2d -> 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 EllipticalArc2d. If you need to do something fancy, you can extract these two values separately.

arcLengthParameterization : ArcLengthParameterized -> ArcLengthParameterization
fromArcLengthParameterized : ArcLengthParameterized -> EllipticalArc2d

Differentiation

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

firstDerivative : EllipticalArc2d -> ParameterValue -> Vector2d
firstDerivativesAt : List ParameterValue -> EllipticalArc2d -> List Vector2d
maxSecondDerivativeMagnitude : EllipticalArc2d -> Float