[
    {
        "name": "Arc3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Arc3d/icon.svg\" alt=\"Arc3d\" width=\"160\">\n\nAn `Arc3d` is a section of a circle in 3D, defined by its central axis,\nstart point and swept angle (the counterclockwise angle around the axis from the\nstart point to the arc's end point). This module includes functionality for\n\n  - Constructing arcs through given points\n  - Scaling, rotating, translating and mirroring arcs\n  - Converting arcs between different coordinate systems\n\n@docs Arc3d\n\n\n# Constructors\n\n@docs on, sweptAround, throughPoints\n\n\n# Properties\n\n@docs axialDirection, axis, centerPoint, radius, startPoint, endPoint, sweptAngle\n\n\n# Evaluation\n\n@docs pointOn, pointsAt\n@docs Nondegenerate, nondegenerate, fromNondegenerate\n@docs tangentDirection, tangentDirectionsAt, sample, samplesAt\n\n\n# Linear approximation\n\n@docs toPolyline\n\n\n# Transformations\n\n@docs reverse, scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectInto\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n\n# Differentiation\n\nYou are unlikely to need to use these functions directly, but they are useful if\nyou are writing low-level geometric algorithms.\n\n@docs firstDerivative, firstDerivativesAt\n\n",
        "unions": [
            {
                "name": "Nondegenerate",
                "comment": " ",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [
            {
                "name": "Arc3d",
                "comment": " ",
                "args": [],
                "type": "Arc3d"
            }
        ],
        "values": [
            {
                "name": "axialDirection",
                "comment": " ",
                "type": "Arc3d -> Direction3d"
            },
            {
                "name": "axis",
                "comment": " ",
                "type": "Arc3d -> Axis3d"
            },
            {
                "name": "centerPoint",
                "comment": " ",
                "type": "Arc3d -> Point3d"
            },
            {
                "name": "endPoint",
                "comment": " ",
                "type": "Arc3d -> Point3d"
            },
            {
                "name": "firstDerivative",
                "comment": " ",
                "type": "Arc3d -> ParameterValue -> Vector3d"
            },
            {
                "name": "firstDerivativesAt",
                "comment": " ",
                "type": "List ParameterValue -> Arc3d -> List Vector3d"
            },
            {
                "name": "fromNondegenerate",
                "comment": " ",
                "type": "Nondegenerate -> Arc3d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Arc3d -> Arc3d"
            },
            {
                "name": "nondegenerate",
                "comment": " ",
                "type": "Arc3d -> Result Point3d Nondegenerate"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> Arc2d -> Arc3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Arc3d -> Arc3d"
            },
            {
                "name": "pointOn",
                "comment": " ",
                "type": "Arc3d -> ParameterValue -> Point3d"
            },
            {
                "name": "pointsAt",
                "comment": " ",
                "type": "List ParameterValue -> Arc3d -> List Point3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> Arc3d -> EllipticalArc2d"
            },
            {
                "name": "radius",
                "comment": " ",
                "type": "Arc3d -> Float"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Arc3d -> Arc3d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "Arc3d -> Arc3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Arc3d -> Arc3d"
            },
            {
                "name": "sample",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> ( Point3d, Direction3d )"
            },
            {
                "name": "samplesAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List ( Point3d, Direction3d )"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point3d -> Float -> Arc3d -> Arc3d"
            },
            {
                "name": "startPoint",
                "comment": " ",
                "type": "Arc3d -> Point3d"
            },
            {
                "name": "sweptAngle",
                "comment": " ",
                "type": "Arc3d -> Float"
            },
            {
                "name": "sweptAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Point3d -> Arc3d"
            },
            {
                "name": "tangentDirection",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> Direction3d"
            },
            {
                "name": "tangentDirectionsAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List Direction3d"
            },
            {
                "name": "throughPoints",
                "comment": " ",
                "type": "Point3d -> Point3d -> Point3d -> Maybe Arc3d"
            },
            {
                "name": "toPolyline",
                "comment": " ",
                "type": "{ maxError : Float } -> Arc3d -> Polyline3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> Arc3d -> Arc3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> Arc3d -> Arc3d"
            }
        ],
        "binops": []
    },
    {
        "name": "Triangle3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Triangle3d/icon.svg\" alt=\"Triangle3d\" width=\"160\">\n\nA `Triangle3d` represents a triangle in 3D space, and is defined by its three\nvertices. This module contains triangle-related functionality such as:\n\n  - Finding the area and centroid of triangles\n  - Scaling, rotating, translating, mirroring and projecting triangles\n  - Converting triangles between different coordinate systems\n\n@docs Triangle3d\n\n\n# Constructors\n\n@docs fromVertices, on\n\n\n# Properties\n\n@docs vertices, edges, centroid, area, normalDirection, boundingBox, circumcircle\n\n\n# Transformations\n\nTransforming a triangle is equivalent to transforming its vertices.\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto, mapVertices\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn, projectInto\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Triangle3d",
                "comment": " ",
                "args": [],
                "type": "Triangle3d"
            }
        ],
        "values": [
            {
                "name": "area",
                "comment": " ",
                "type": "Triangle3d -> Float"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "Triangle3d -> BoundingBox3d"
            },
            {
                "name": "centroid",
                "comment": " ",
                "type": "Triangle3d -> Point3d"
            },
            {
                "name": "circumcircle",
                "comment": " ",
                "type": "Triangle3d -> Maybe Circle3d"
            },
            {
                "name": "edges",
                "comment": " ",
                "type": "Triangle3d -> ( LineSegment3d, LineSegment3d, LineSegment3d )"
            },
            {
                "name": "fromVertices",
                "comment": " ",
                "type": "( Point3d, Point3d, Point3d ) -> Triangle3d"
            },
            {
                "name": "mapVertices",
                "comment": " ",
                "type": "(Point3d -> Point3d) -> Triangle3d -> Triangle3d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Triangle3d -> Triangle3d"
            },
            {
                "name": "normalDirection",
                "comment": " ",
                "type": "Triangle3d -> Maybe Direction3d"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> Triangle2d -> Triangle3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Triangle3d -> Triangle3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> Triangle3d -> Triangle2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Plane3d -> Triangle3d -> Triangle3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Triangle3d -> Triangle3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Triangle3d -> Triangle3d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point3d -> Float -> Triangle3d -> Triangle3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> Triangle3d -> Triangle3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> Triangle3d -> Triangle3d"
            },
            {
                "name": "vertices",
                "comment": " ",
                "type": "Triangle3d -> ( Point3d, Point3d, Point3d )"
            }
        ],
        "binops": []
    },
    {
        "name": "Sphere3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Sphere3d/icon.svg\" alt=\"Sphere3d\" width=\"160\">\n\nA `Sphere3d` is defined by its center point and radius. This module contains\nfunctionality for:\n\n  - Constructing spheres through points\n  - Scaling, rotating and translating spheres\n  - Extracting sphere properties like center point and volume\n\n@docs Sphere3d\n\n\n# Constants\n\n@docs unit\n\n\n# Constructors\n\n@docs withRadius, throughPoints\n\n\n# Properties\n\n@docs centerPoint, radius, diameter, volume, surfaceArea, circumference, boundingBox\n\n\n# Queries\n\n@docs contains\n\n\n# Transformations\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto, projectInto\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Sphere3d",
                "comment": " ",
                "args": [],
                "type": "Sphere3d"
            }
        ],
        "values": [
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "Sphere3d -> BoundingBox3d"
            },
            {
                "name": "centerPoint",
                "comment": " ",
                "type": "Sphere3d -> Point3d"
            },
            {
                "name": "circumference",
                "comment": " ",
                "type": "Sphere3d -> Float"
            },
            {
                "name": "contains",
                "comment": " ",
                "type": "Point3d -> Sphere3d -> Bool"
            },
            {
                "name": "diameter",
                "comment": " ",
                "type": "Sphere3d -> Float"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Sphere3d -> Sphere3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Sphere3d -> Sphere3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> Sphere3d -> Circle2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Plane3d -> Sphere3d -> Circle3d"
            },
            {
                "name": "radius",
                "comment": " ",
                "type": "Sphere3d -> Float"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Sphere3d -> Sphere3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Sphere3d -> Sphere3d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point3d -> Float -> Sphere3d -> Sphere3d"
            },
            {
                "name": "surfaceArea",
                "comment": " ",
                "type": "Sphere3d -> Float"
            },
            {
                "name": "throughPoints",
                "comment": " ",
                "type": "Point3d -> Point3d -> Point3d -> Point3d -> Maybe Sphere3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> Sphere3d -> Sphere3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> Sphere3d -> Sphere3d"
            },
            {
                "name": "unit",
                "comment": " ",
                "type": "Sphere3d"
            },
            {
                "name": "volume",
                "comment": " ",
                "type": "Sphere3d -> Float"
            },
            {
                "name": "withRadius",
                "comment": " ",
                "type": "Float -> Point3d -> Sphere3d"
            }
        ],
        "binops": []
    },
    {
        "name": "Polyline3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Polyline3d/icon.svg\" alt=\"Polyline3d\" width=\"160\">\n\nA `Polyline3d` represents a sequence of vertices in 3D connected by line\nsegments. This module contains a variety of polyline-related functionality, such\nas\n\n  - Computing the length of polylines\n  - Scaling, rotating, translating and mirroring polylines\n  - Converting polylines between different coordinate systems\n\n@docs Polyline3d\n\n\n# Constructors\n\n@docs fromVertices, on\n\n\n# Properties\n\n@docs vertices, segments, length, boundingBox\n\n\n# Transformations\n\nTransforming a polyline is equivalent to transforming each of its vertices.\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto, mapVertices\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn, projectInto\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Polyline3d",
                "comment": " ",
                "args": [],
                "type": "Polyline3d"
            }
        ],
        "values": [
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "Polyline3d -> Maybe BoundingBox3d"
            },
            {
                "name": "fromVertices",
                "comment": " ",
                "type": "List Point3d -> Polyline3d"
            },
            {
                "name": "length",
                "comment": " ",
                "type": "Polyline3d -> Float"
            },
            {
                "name": "mapVertices",
                "comment": " ",
                "type": "(Point3d -> Point3d) -> Polyline3d -> Polyline3d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Polyline3d -> Polyline3d"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> Polyline2d -> Polyline3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Polyline3d -> Polyline3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> Polyline3d -> Polyline2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Plane3d -> Polyline3d -> Polyline3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Polyline3d -> Polyline3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Polyline3d -> Polyline3d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point3d -> Float -> Polyline3d -> Polyline3d"
            },
            {
                "name": "segments",
                "comment": " ",
                "type": "Polyline3d -> List LineSegment3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> Polyline3d -> Polyline3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> Polyline3d -> Polyline3d"
            },
            {
                "name": "vertices",
                "comment": " ",
                "type": "Polyline3d -> List Point3d"
            }
        ],
        "binops": []
    },
    {
        "name": "CubicSpline3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/CubicSpline3d/icon.svg\" alt=\"CubicSpline3d\" width=\"160\">\n\nA `CubicSpline3d` is a cubic [Bézier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)\nin 3D defined by a start point, end point and two control points. This module\ncontains functionality for\n\n  - Constructing splines\n  - Evaluating points and derivatives along a spline\n  - Scaling, rotating, translating or mirroring a spline\n  - Converting a spline between local and global coordinates in different\n    reference frames\n\n@docs CubicSpline3d\n\n\n# Constructors\n\n@docs with, fromEndpoints, on, fromQuadraticSpline\n\n\n# Properties\n\n@docs startPoint, endPoint, startControlPoint, endControlPoint, startDerivative, endDerivative, boundingBox\n\n\n# Evaluation\n\n@docs pointOn, pointsAt\n@docs Nondegenerate, nondegenerate, fromNondegenerate\n@docs tangentDirection, tangentDirectionsAt, sample, samplesAt\n\n\n# Transformations\n\n@docs reverse, scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn, projectInto\n\n\n# Subdivision\n\n@docs bisect, splitAt\n\n\n# Arc length parameterization\n\n@docs ArcLengthParameterized, arcLengthParameterized, arcLength, pointAlong, tangentDirectionAlong, sampleAlong\n\n\n## Low level\n\nAn `ArcLengthParameterized` value is a combination of an\n[`ArcLengthParameterization`](Geometry-ArcLengthParameterization) and an\nunderlying `CubicSpline3d`. If you need to do something fancy, you can extract\nthese two values separately.\n\n@docs arcLengthParameterization, fromArcLengthParameterized\n\n\n# Differentiation\n\nYou are unlikely to need to use these functions directly, but they are useful if\nyou are writing low-level geometric algorithms. As with the other curve\nevaluation functions, passing a parameter value outside the range 0 to 1 will\nresult in `Nothing`.\n\n@docs firstDerivative, firstDerivativesAt, secondDerivative, secondDerivativesAt, thirdDerivative, maxSecondDerivativeMagnitude\n\n",
        "unions": [
            {
                "name": "ArcLengthParameterized",
                "comment": " ",
                "args": [],
                "cases": []
            },
            {
                "name": "Nondegenerate",
                "comment": " ",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [
            {
                "name": "CubicSpline3d",
                "comment": " ",
                "args": [],
                "type": "CubicSpline3d"
            }
        ],
        "values": [
            {
                "name": "arcLength",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float"
            },
            {
                "name": "arcLengthParameterization",
                "comment": " ",
                "type": "ArcLengthParameterized -> ArcLengthParameterization"
            },
            {
                "name": "arcLengthParameterized",
                "comment": " ",
                "type": "{ maxError : Float } -> CubicSpline3d -> ArcLengthParameterized"
            },
            {
                "name": "bisect",
                "comment": " ",
                "type": "CubicSpline3d -> ( CubicSpline3d, CubicSpline3d )"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "CubicSpline3d -> BoundingBox3d"
            },
            {
                "name": "endControlPoint",
                "comment": " ",
                "type": "CubicSpline3d -> Point3d"
            },
            {
                "name": "endDerivative",
                "comment": " ",
                "type": "CubicSpline3d -> Vector3d"
            },
            {
                "name": "endPoint",
                "comment": " ",
                "type": "CubicSpline3d -> Point3d"
            },
            {
                "name": "firstDerivative",
                "comment": " ",
                "type": "CubicSpline3d -> ParameterValue -> Vector3d"
            },
            {
                "name": "firstDerivativesAt",
                "comment": " ",
                "type": "List ParameterValue -> CubicSpline3d -> List Vector3d"
            },
            {
                "name": "fromArcLengthParameterized",
                "comment": " ",
                "type": "ArcLengthParameterized -> CubicSpline3d"
            },
            {
                "name": "fromEndpoints",
                "comment": " ",
                "type": "{ startPoint : Point3d, startDerivative : Vector3d, endPoint : Point3d, endDerivative : Vector3d } -> CubicSpline3d"
            },
            {
                "name": "fromNondegenerate",
                "comment": " ",
                "type": "Nondegenerate -> CubicSpline3d"
            },
            {
                "name": "fromQuadraticSpline",
                "comment": " ",
                "type": "QuadraticSpline3d -> CubicSpline3d"
            },
            {
                "name": "maxSecondDerivativeMagnitude",
                "comment": " ",
                "type": "CubicSpline3d -> Float"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> CubicSpline3d -> CubicSpline3d"
            },
            {
                "name": "nondegenerate",
                "comment": " ",
                "type": "CubicSpline3d -> Result Point3d Nondegenerate"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> CubicSpline2d -> CubicSpline3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> CubicSpline3d -> CubicSpline3d"
            },
            {
                "name": "pointAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe Point3d"
            },
            {
                "name": "pointOn",
                "comment": " ",
                "type": "CubicSpline3d -> ParameterValue -> Point3d"
            },
            {
                "name": "pointsAt",
                "comment": " ",
                "type": "List ParameterValue -> CubicSpline3d -> List Point3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> CubicSpline3d -> CubicSpline2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Plane3d -> CubicSpline3d -> CubicSpline3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> CubicSpline3d -> CubicSpline3d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "CubicSpline3d -> CubicSpline3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> CubicSpline3d -> CubicSpline3d"
            },
            {
                "name": "sample",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> ( Point3d, Direction3d )"
            },
            {
                "name": "sampleAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe ( Point3d, Direction3d )"
            },
            {
                "name": "samplesAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List ( Point3d, Direction3d )"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point3d -> Float -> CubicSpline3d -> CubicSpline3d"
            },
            {
                "name": "secondDerivative",
                "comment": " ",
                "type": "CubicSpline3d -> ParameterValue -> Vector3d"
            },
            {
                "name": "secondDerivativesAt",
                "comment": " ",
                "type": "List ParameterValue -> CubicSpline3d -> List Vector3d"
            },
            {
                "name": "splitAt",
                "comment": " ",
                "type": "ParameterValue -> CubicSpline3d -> ( CubicSpline3d, CubicSpline3d )"
            },
            {
                "name": "startControlPoint",
                "comment": " ",
                "type": "CubicSpline3d -> Point3d"
            },
            {
                "name": "startDerivative",
                "comment": " ",
                "type": "CubicSpline3d -> Vector3d"
            },
            {
                "name": "startPoint",
                "comment": " ",
                "type": "CubicSpline3d -> Point3d"
            },
            {
                "name": "tangentDirection",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> Direction3d"
            },
            {
                "name": "tangentDirectionAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe Direction3d"
            },
            {
                "name": "tangentDirectionsAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List Direction3d"
            },
            {
                "name": "thirdDerivative",
                "comment": " ",
                "type": "CubicSpline3d -> Vector3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> CubicSpline3d -> CubicSpline3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> CubicSpline3d -> CubicSpline3d"
            },
            {
                "name": "with",
                "comment": " ",
                "type": "{ startPoint : Point3d, startControlPoint : Point3d, endControlPoint : Point3d, endPoint : Point3d } -> CubicSpline3d"
            }
        ],
        "binops": []
    },
    {
        "name": "Circle3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Circle3d/icon.svg\" alt=\"Circle3d\" width=\"160\">\n\nA `Circle3d` is defined by its center point, axial direction and radius. The\naxial direction is the direction of the axis through the center of the circle\nthat all points on the circle are equidistant from, or equivalently the normal\ndirection of the plane defined by the circle. This module contains functionality\nfor:\n\n  - Constructing circles around axes, on planes, or through points\n  - Scaling, rotating and translating circles\n  - Extracting circle properties like center point and area\n\n@docs Circle3d\n\n\n# Constructors\n\n@docs withRadius, sweptAround, on, throughPoints\n\n\n# Properties\n\n@docs centerPoint, axialDirection, radius, diameter, axis, plane, area, circumference, boundingBox\n\n\n# Transformations\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectInto\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Circle3d",
                "comment": " ",
                "args": [],
                "type": "Circle3d"
            }
        ],
        "values": [
            {
                "name": "area",
                "comment": " ",
                "type": "Circle3d -> Float"
            },
            {
                "name": "axialDirection",
                "comment": " ",
                "type": "Circle3d -> Direction3d"
            },
            {
                "name": "axis",
                "comment": " ",
                "type": "Circle3d -> Axis3d"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "Circle3d -> BoundingBox3d"
            },
            {
                "name": "centerPoint",
                "comment": " ",
                "type": "Circle3d -> Point3d"
            },
            {
                "name": "circumference",
                "comment": " ",
                "type": "Circle3d -> Float"
            },
            {
                "name": "diameter",
                "comment": " ",
                "type": "Circle3d -> Float"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Circle3d -> Circle3d"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> Circle2d -> Circle3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Circle3d -> Circle3d"
            },
            {
                "name": "plane",
                "comment": " ",
                "type": "Circle3d -> Plane3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> Circle3d -> Ellipse2d"
            },
            {
                "name": "radius",
                "comment": " ",
                "type": "Circle3d -> Float"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Circle3d -> Circle3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Circle3d -> Circle3d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point3d -> Float -> Circle3d -> Circle3d"
            },
            {
                "name": "sweptAround",
                "comment": " ",
                "type": "Axis3d -> Point3d -> Circle3d"
            },
            {
                "name": "throughPoints",
                "comment": " ",
                "type": "Point3d -> Point3d -> Point3d -> Maybe Circle3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> Circle3d -> Circle3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> Circle3d -> Circle3d"
            },
            {
                "name": "withRadius",
                "comment": " ",
                "type": "Float -> Direction3d -> Point3d -> Circle3d"
            }
        ],
        "binops": []
    },
    {
        "name": "LineSegment3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/LineSegment3d/icon.svg\" alt=\"LineSegment3d\" width=\"160\">\n\nA `LineSegment3d` is a line between two points in 3D. This module contains\nfunctionality such as:\n\n  - Interpolating within a line segment or measuring its length\n  - Scaling, rotating, translating, mirroring or projecting a line segment\n  - Converting a line segment between local and global coordinates in different\n    reference frames\n\n@docs LineSegment3d\n\n\n# Constructors\n\n@docs fromEndpoints, from, along, on\n\n\n# Properties\n\n@docs startPoint, endPoint, endpoints, midpoint, length, squaredLength, direction, perpendicularDirection, vector, boundingBox\n\n\n# Interpolation\n\n@docs interpolate\n\n\n# Transformations\n\n@docs reverse, scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto, mapEndpoints\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn, projectInto\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "LineSegment3d",
                "comment": " ",
                "args": [],
                "type": "LineSegment3d"
            }
        ],
        "values": [
            {
                "name": "along",
                "comment": " ",
                "type": "Axis3d -> Float -> Float -> LineSegment3d"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "LineSegment3d -> BoundingBox3d"
            },
            {
                "name": "direction",
                "comment": " ",
                "type": "LineSegment3d -> Maybe Direction3d"
            },
            {
                "name": "endPoint",
                "comment": " ",
                "type": "LineSegment3d -> Point3d"
            },
            {
                "name": "endpoints",
                "comment": " ",
                "type": "LineSegment3d -> ( Point3d, Point3d )"
            },
            {
                "name": "from",
                "comment": " ",
                "type": "Point3d -> Point3d -> LineSegment3d"
            },
            {
                "name": "fromEndpoints",
                "comment": " ",
                "type": "( Point3d, Point3d ) -> LineSegment3d"
            },
            {
                "name": "interpolate",
                "comment": " ",
                "type": "LineSegment3d -> Float -> Point3d"
            },
            {
                "name": "length",
                "comment": " ",
                "type": "LineSegment3d -> Float"
            },
            {
                "name": "mapEndpoints",
                "comment": " ",
                "type": "(Point3d -> Point3d) -> LineSegment3d -> LineSegment3d"
            },
            {
                "name": "midpoint",
                "comment": " ",
                "type": "LineSegment3d -> Point3d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> LineSegment3d -> LineSegment3d"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> LineSegment2d -> LineSegment3d"
            },
            {
                "name": "perpendicularDirection",
                "comment": " ",
                "type": "LineSegment3d -> Maybe Direction3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> LineSegment3d -> LineSegment3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> LineSegment3d -> LineSegment2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Plane3d -> LineSegment3d -> LineSegment3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> LineSegment3d -> LineSegment3d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "LineSegment3d -> LineSegment3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> LineSegment3d -> LineSegment3d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point3d -> Float -> LineSegment3d -> LineSegment3d"
            },
            {
                "name": "squaredLength",
                "comment": " ",
                "type": "LineSegment3d -> Float"
            },
            {
                "name": "startPoint",
                "comment": " ",
                "type": "LineSegment3d -> Point3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> LineSegment3d -> LineSegment3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> LineSegment3d -> LineSegment3d"
            },
            {
                "name": "vector",
                "comment": " ",
                "type": "LineSegment3d -> Vector3d"
            }
        ],
        "binops": []
    },
    {
        "name": "QuadraticSpline3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/QuadraticSpline3d/icon.svg\" alt=\"QuadraticSpline3d\" width=\"160\">\n\nA `QuadraticSpline3d` is a quadratic [Bézier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)\nin 3D defined by a start point, control point and end point. This module\ncontains functionality for\n\n  - Evaluating points and derivatives along a spline\n  - Scaling, rotating, translating or mirroring a spline\n  - Converting a spline between local and global coordinates in different\n    reference frames\n\n@docs QuadraticSpline3d\n\n\n# Constructors\n\n@docs with, on\n\n\n# Properties\n\n@docs startPoint, endPoint, controlPoint, startDerivative, endDerivative, boundingBox\n\n\n# Evaluation\n\n@docs pointOn, pointsAt\n@docs Nondegenerate, nondegenerate, fromNondegenerate\n@docs tangentDirection, tangentDirectionsAt, sample, samplesAt\n\n\n# Transformations\n\n@docs reverse, scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n\n# Sketch planes\n\n@docs projectInto\n\n\n# Subdivision\n\n@docs bisect, splitAt\n\n\n# Arc length parameterization\n\n@docs ArcLengthParameterized, arcLengthParameterized, arcLength, pointAlong, tangentDirectionAlong, sampleAlong\n\n\n## Low level\n\nAn `ArcLengthParameterized` value is a combination of an\n[`ArcLengthParameterization`](Geometry-ArcLengthParameterization) and an\nunderlying `QuadraticSpline3d`. If you need to do something fancy, you can\nextract these two values separately.\n\n@docs arcLengthParameterization, fromArcLengthParameterized\n\n\n# Differentiation\n\nYou are unlikely to need to use these functions directly, but they are useful if\nyou are writing low-level geometric algorithms.\n\n@docs firstDerivative, firstDerivativesAt, secondDerivative\n\n",
        "unions": [
            {
                "name": "ArcLengthParameterized",
                "comment": " ",
                "args": [],
                "cases": []
            },
            {
                "name": "Nondegenerate",
                "comment": " ",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [
            {
                "name": "QuadraticSpline3d",
                "comment": " ",
                "args": [],
                "type": "QuadraticSpline3d"
            }
        ],
        "values": [
            {
                "name": "arcLength",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float"
            },
            {
                "name": "arcLengthParameterization",
                "comment": " ",
                "type": "ArcLengthParameterized -> ArcLengthParameterization"
            },
            {
                "name": "arcLengthParameterized",
                "comment": " ",
                "type": "{ maxError : Float } -> QuadraticSpline3d -> ArcLengthParameterized"
            },
            {
                "name": "bisect",
                "comment": " ",
                "type": "QuadraticSpline3d -> ( QuadraticSpline3d, QuadraticSpline3d )"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "QuadraticSpline3d -> BoundingBox3d"
            },
            {
                "name": "controlPoint",
                "comment": " ",
                "type": "QuadraticSpline3d -> Point3d"
            },
            {
                "name": "endDerivative",
                "comment": " ",
                "type": "QuadraticSpline3d -> Vector3d"
            },
            {
                "name": "endPoint",
                "comment": " ",
                "type": "QuadraticSpline3d -> Point3d"
            },
            {
                "name": "firstDerivative",
                "comment": " ",
                "type": "QuadraticSpline3d -> ParameterValue -> Vector3d"
            },
            {
                "name": "firstDerivativesAt",
                "comment": " ",
                "type": "List ParameterValue -> QuadraticSpline3d -> List Vector3d"
            },
            {
                "name": "fromArcLengthParameterized",
                "comment": " ",
                "type": "ArcLengthParameterized -> QuadraticSpline3d"
            },
            {
                "name": "fromNondegenerate",
                "comment": " ",
                "type": "Nondegenerate -> QuadraticSpline3d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> QuadraticSpline3d -> QuadraticSpline3d"
            },
            {
                "name": "nondegenerate",
                "comment": " ",
                "type": "QuadraticSpline3d -> Result Point3d Nondegenerate"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> QuadraticSpline2d -> QuadraticSpline3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> QuadraticSpline3d -> QuadraticSpline3d"
            },
            {
                "name": "pointAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe Point3d"
            },
            {
                "name": "pointOn",
                "comment": " ",
                "type": "QuadraticSpline3d -> ParameterValue -> Point3d"
            },
            {
                "name": "pointsAt",
                "comment": " ",
                "type": "List ParameterValue -> QuadraticSpline3d -> List Point3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> QuadraticSpline3d -> QuadraticSpline2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Plane3d -> QuadraticSpline3d -> QuadraticSpline3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> QuadraticSpline3d -> QuadraticSpline3d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "QuadraticSpline3d -> QuadraticSpline3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> QuadraticSpline3d -> QuadraticSpline3d"
            },
            {
                "name": "sample",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> ( Point3d, Direction3d )"
            },
            {
                "name": "sampleAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe ( Point3d, Direction3d )"
            },
            {
                "name": "samplesAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List ( Point3d, Direction3d )"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point3d -> Float -> QuadraticSpline3d -> QuadraticSpline3d"
            },
            {
                "name": "secondDerivative",
                "comment": " ",
                "type": "QuadraticSpline3d -> Vector3d"
            },
            {
                "name": "splitAt",
                "comment": " ",
                "type": "ParameterValue -> QuadraticSpline3d -> ( QuadraticSpline3d, QuadraticSpline3d )"
            },
            {
                "name": "startDerivative",
                "comment": " ",
                "type": "QuadraticSpline3d -> Vector3d"
            },
            {
                "name": "startPoint",
                "comment": " ",
                "type": "QuadraticSpline3d -> Point3d"
            },
            {
                "name": "tangentDirection",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> Direction3d"
            },
            {
                "name": "tangentDirectionAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe Direction3d"
            },
            {
                "name": "tangentDirectionsAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List Direction3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> QuadraticSpline3d -> QuadraticSpline3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> QuadraticSpline3d -> QuadraticSpline3d"
            },
            {
                "name": "with",
                "comment": " ",
                "type": "{ startPoint : Point3d, controlPoint : Point3d, endPoint : Point3d } -> QuadraticSpline3d"
            }
        ],
        "binops": []
    },
    {
        "name": "Polygon2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Polygon2d/icon.svg\" alt=\"Polygon2d\" width=\"160\">\n\nA `Polygon2d` represents a closed polygon in 2D, optionally with holes. It is\ndefined by an outer loop of vertices and a list of inner loops defining any\nholes. This module contains a variety of polygon-related functionality, such as\n\n  - Computing the perimeter and area of polygons\n  - Scaling, rotating, translating and mirroring polygons\n  - Converting polygons between different coordinate systems\n  - Triangulating polygons\n\n@docs Polygon2d\n\n\n# Constructors\n\n@docs singleLoop, with, convexHull\n\n\n# Properties\n\n@docs outerLoop, innerLoops, vertices, edges, perimeter, area, boundingBox\n\n\n# Transformations\n\nTransforming a polygon is equivalent to transforming each of its vertices.\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n\n# Triangulation\n\n@docs triangulate\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Polygon2d",
                "comment": " ",
                "args": [],
                "type": "Polygon2d"
            }
        ],
        "values": [
            {
                "name": "area",
                "comment": " ",
                "type": "Polygon2d -> Float"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "Polygon2d -> Maybe BoundingBox2d"
            },
            {
                "name": "convexHull",
                "comment": " ",
                "type": "List Point2d -> Polygon2d"
            },
            {
                "name": "edges",
                "comment": " ",
                "type": "Polygon2d -> List LineSegment2d"
            },
            {
                "name": "innerLoops",
                "comment": " ",
                "type": "Polygon2d -> List (List Point2d)"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Polygon2d -> Polygon2d"
            },
            {
                "name": "outerLoop",
                "comment": " ",
                "type": "Polygon2d -> List Point2d"
            },
            {
                "name": "perimeter",
                "comment": " ",
                "type": "Polygon2d -> Float"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Polygon2d -> Polygon2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Polygon2d -> Polygon2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> Polygon2d -> Polygon2d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> Polygon2d -> Polygon2d"
            },
            {
                "name": "singleLoop",
                "comment": " ",
                "type": "List Point2d -> Polygon2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> Polygon2d -> Polygon2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> Polygon2d -> Polygon2d"
            },
            {
                "name": "triangulate",
                "comment": " ",
                "type": "Polygon2d -> TriangularMesh Point2d"
            },
            {
                "name": "vertices",
                "comment": " ",
                "type": "Polygon2d -> List Point2d"
            },
            {
                "name": "with",
                "comment": " ",
                "type": "{ outerLoop : List Point2d, innerLoops : List (List Point2d) } -> Polygon2d"
            }
        ],
        "binops": []
    },
    {
        "name": "Frame3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Frame3d/icon.svg\" alt=\"Frame3d\" width=\"160\">\n\nA `Frame3d` has an origin point and a set of X, Y and Z directions (which are\nalways perpendicular to each other). It can be thought of as:\n\n  - A local coordinate system: Most geometric types have associated `relativeTo`\n    and `placeIn` functions that convert values of that type from global\n    coordinates to local coordinates in a particular frame, and vice versa.\n  - A set of axes and planes: It is often convenient to (for example) rotate\n    around the Z axis of a frame, or mirror across its XY plane. Frames can\n    also themselves be translated, rotated and mirrored!\n  - A combined 3D position and orientation: For example, a `Frame3d` could be\n    used to define the position and orientation of a spaceship in a 3D game.\n    Movement of the ship would then be done by translating and rotating the\n    frame.\n\n@docs Frame3d\n\n\n# Constants\n\n@docs xyz\n\n\n# Constructors\n\nThe `withXDirection`, `withYDirection` and `withZDirection` functions all\nconstruct a new `Frame3d` with the given axis direction, having the given origin\npoint. The other two directions will be chosen arbitrarily. This can be useful\nwhen constructing 'scratch' frames where (for example) you want a particular Z\ndirection but the specific X/Y directions are unimportant.\n\nNo guarantees are given about the other two directions other than that the three\ndirections will be mutually perpendicular, and will be oriented so that the\nresulting frame is [right-handed](https://en.wikipedia.org/wiki/Cartesian_coordinate_system#Orientation_and_handedness).\n\n@docs withXDirection, withYDirection, withZDirection, atPoint, atCoordinates, unsafe\n\n\n# Properties\n\n@docs originPoint, xDirection, yDirection, zDirection, isRightHanded\n\n\n## Axes\n\n@docs xAxis, yAxis, zAxis\n\n\n## Planes\n\nThe following functions all return planes with the same origin point as the\ngiven frame, but with varying normal directions. In each case the normal\ndirection of the resulting plane is given by the cross product of the two\nindicated basis directions (assuming a right-handed frame).\n\n@docs xyPlane, yxPlane, yzPlane, zyPlane, zxPlane, xzPlane\n\n\n## Sketch planes\n\nThese functions all form a `SketchPlane3d` from two axes of the given frame. The\nX and Y axes of the sketch plane will correspond to the two indicated axes.\n\n@docs xySketchPlane, yxSketchPlane, yzSketchPlane, zySketchPlane, zxSketchPlane, xzSketchPlane\n\n\n# Transformations\n\n@docs reverseX, reverseY, reverseZ, moveTo, rotateAround, rotateAroundOwn, translateBy, translateIn, translateAlongOwn, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Frame3d",
                "comment": " ",
                "args": [],
                "type": "Frame3d"
            }
        ],
        "values": [
            {
                "name": "atCoordinates",
                "comment": " ",
                "type": "( Float, Float, Float ) -> Frame3d"
            },
            {
                "name": "atPoint",
                "comment": " ",
                "type": "Point3d -> Frame3d"
            },
            {
                "name": "isRightHanded",
                "comment": " ",
                "type": "Frame3d -> Bool"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Frame3d -> Frame3d"
            },
            {
                "name": "moveTo",
                "comment": " ",
                "type": "Point3d -> Frame3d -> Frame3d"
            },
            {
                "name": "originPoint",
                "comment": " ",
                "type": "Frame3d -> Point3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Frame3d -> Frame3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Frame3d -> Frame3d"
            },
            {
                "name": "reverseX",
                "comment": " ",
                "type": "Frame3d -> Frame3d"
            },
            {
                "name": "reverseY",
                "comment": " ",
                "type": "Frame3d -> Frame3d"
            },
            {
                "name": "reverseZ",
                "comment": " ",
                "type": "Frame3d -> Frame3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Frame3d -> Frame3d"
            },
            {
                "name": "rotateAroundOwn",
                "comment": " ",
                "type": "(Frame3d -> Axis3d) -> Float -> Frame3d -> Frame3d"
            },
            {
                "name": "translateAlongOwn",
                "comment": " ",
                "type": "(Frame3d -> Axis3d) -> Float -> Frame3d -> Frame3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> Frame3d -> Frame3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> Frame3d -> Frame3d"
            },
            {
                "name": "unsafe",
                "comment": " ",
                "type": "{ originPoint : Point3d, xDirection : Direction3d, yDirection : Direction3d, zDirection : Direction3d } -> Frame3d"
            },
            {
                "name": "withXDirection",
                "comment": " ",
                "type": "Direction3d -> Point3d -> Frame3d"
            },
            {
                "name": "withYDirection",
                "comment": " ",
                "type": "Direction3d -> Point3d -> Frame3d"
            },
            {
                "name": "withZDirection",
                "comment": " ",
                "type": "Direction3d -> Point3d -> Frame3d"
            },
            {
                "name": "xAxis",
                "comment": " ",
                "type": "Frame3d -> Axis3d"
            },
            {
                "name": "xDirection",
                "comment": " ",
                "type": "Frame3d -> Direction3d"
            },
            {
                "name": "xyPlane",
                "comment": " ",
                "type": "Frame3d -> Plane3d"
            },
            {
                "name": "xySketchPlane",
                "comment": " ",
                "type": "Frame3d -> SketchPlane3d"
            },
            {
                "name": "xyz",
                "comment": " ",
                "type": "Frame3d"
            },
            {
                "name": "xzPlane",
                "comment": " ",
                "type": "Frame3d -> Plane3d"
            },
            {
                "name": "xzSketchPlane",
                "comment": " ",
                "type": "Frame3d -> SketchPlane3d"
            },
            {
                "name": "yAxis",
                "comment": " ",
                "type": "Frame3d -> Axis3d"
            },
            {
                "name": "yDirection",
                "comment": " ",
                "type": "Frame3d -> Direction3d"
            },
            {
                "name": "yxPlane",
                "comment": " ",
                "type": "Frame3d -> Plane3d"
            },
            {
                "name": "yxSketchPlane",
                "comment": " ",
                "type": "Frame3d -> SketchPlane3d"
            },
            {
                "name": "yzPlane",
                "comment": " ",
                "type": "Frame3d -> Plane3d"
            },
            {
                "name": "yzSketchPlane",
                "comment": " ",
                "type": "Frame3d -> SketchPlane3d"
            },
            {
                "name": "zAxis",
                "comment": " ",
                "type": "Frame3d -> Axis3d"
            },
            {
                "name": "zDirection",
                "comment": " ",
                "type": "Frame3d -> Direction3d"
            },
            {
                "name": "zxPlane",
                "comment": " ",
                "type": "Frame3d -> Plane3d"
            },
            {
                "name": "zxSketchPlane",
                "comment": " ",
                "type": "Frame3d -> SketchPlane3d"
            },
            {
                "name": "zyPlane",
                "comment": " ",
                "type": "Frame3d -> Plane3d"
            },
            {
                "name": "zySketchPlane",
                "comment": " ",
                "type": "Frame3d -> SketchPlane3d"
            }
        ],
        "binops": []
    },
    {
        "name": "Arc2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Arc2d/icon.svg\" alt=\"Arc2d\" width=\"160\">\n\nAn `Arc2d` is a section of a circle, defined by its center point, start\npoint and swept angle (the counterclockwise angle from the start point to the\nend point). This module includes functionality for\n\n  - Constructing arcs through given points and/or with a given radius\n  - Scaling, rotating, translating and mirroring arcs\n  - Converting arcs between different coordinate systems\n\n@docs Arc2d\n\n\n# Constructors\n\n@docs from, with, sweptAround, throughPoints, withRadius\n\n\n# Properties\n\n@docs centerPoint, radius, startPoint, endPoint, sweptAngle\n\n\n# Evaluation\n\n@docs pointOn, pointsAt\n@docs Nondegenerate, nondegenerate, fromNondegenerate\n@docs tangentDirection, tangentDirectionsAt, sample, samplesAt\n\n\n# Linear approximation\n\n@docs toPolyline\n\n\n# Transformations\n\n@docs reverse, scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n\n# Differentiation\n\nYou are unlikely to need to use these functions directly, but they are useful if\nyou are writing low-level geometric algorithms.\n\n@docs firstDerivative, firstDerivativesAt\n\n",
        "unions": [
            {
                "name": "Nondegenerate",
                "comment": " ",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [
            {
                "name": "Arc2d",
                "comment": " ",
                "args": [],
                "type": "Arc2d"
            }
        ],
        "values": [
            {
                "name": "centerPoint",
                "comment": " ",
                "type": "Arc2d -> Point2d"
            },
            {
                "name": "endPoint",
                "comment": " ",
                "type": "Arc2d -> Point2d"
            },
            {
                "name": "firstDerivative",
                "comment": " ",
                "type": "Arc2d -> ParameterValue -> Vector2d"
            },
            {
                "name": "firstDerivativesAt",
                "comment": " ",
                "type": "List ParameterValue -> Arc2d -> List Vector2d"
            },
            {
                "name": "from",
                "comment": " ",
                "type": "Point2d -> Point2d -> Float -> Arc2d"
            },
            {
                "name": "fromNondegenerate",
                "comment": " ",
                "type": "Nondegenerate -> Arc2d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Arc2d -> Arc2d"
            },
            {
                "name": "nondegenerate",
                "comment": " ",
                "type": "Arc2d -> Result Point2d Nondegenerate"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Arc2d -> Arc2d"
            },
            {
                "name": "pointOn",
                "comment": " ",
                "type": "Arc2d -> ParameterValue -> Point2d"
            },
            {
                "name": "pointsAt",
                "comment": " ",
                "type": "List ParameterValue -> Arc2d -> List Point2d"
            },
            {
                "name": "radius",
                "comment": " ",
                "type": "Arc2d -> Float"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Arc2d -> Arc2d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "Arc2d -> Arc2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> Arc2d -> Arc2d"
            },
            {
                "name": "sample",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> ( Point2d, Direction2d )"
            },
            {
                "name": "samplesAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List ( Point2d, Direction2d )"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> Arc2d -> Arc2d"
            },
            {
                "name": "startPoint",
                "comment": " ",
                "type": "Arc2d -> Point2d"
            },
            {
                "name": "sweptAngle",
                "comment": " ",
                "type": "Arc2d -> Float"
            },
            {
                "name": "sweptAround",
                "comment": " ",
                "type": "Point2d -> Float -> Point2d -> Arc2d"
            },
            {
                "name": "tangentDirection",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> Direction2d"
            },
            {
                "name": "tangentDirectionsAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List Direction2d"
            },
            {
                "name": "throughPoints",
                "comment": " ",
                "type": "Point2d -> Point2d -> Point2d -> Maybe Arc2d"
            },
            {
                "name": "toPolyline",
                "comment": " ",
                "type": "{ maxError : Float } -> Arc2d -> Polyline2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> Arc2d -> Arc2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> Arc2d -> Arc2d"
            },
            {
                "name": "with",
                "comment": " ",
                "type": "{ centerPoint : Point2d, radius : Float, startAngle : Float, sweptAngle : Float } -> Arc2d"
            },
            {
                "name": "withRadius",
                "comment": " ",
                "type": "Float -> SweptAngle -> Point2d -> Point2d -> Maybe Arc2d"
            }
        ],
        "binops": []
    },
    {
        "name": "SketchPlane3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/SketchPlane3d/icon.svg\" alt=\"SketchPlane3d\" width=\"160\">\n\nA `SketchPlane3d` represents a 2D planar coordinate system in 3D space, and is\ndefined by its origin point and X and Y directions (which are always\nperpendicular to each other). Sketch planes are the primary tool for converting\nback and forth between 2D and 3D coordinates:\n\n  - 3D geometry such as points, directions and line segments can be projected\n    _into_ a sketch plane, which effectively projects the geometry _onto_ the\n    sketch plane and then expresses the projected geometry _in_ 2D coordinates.\n  - 2D geometry can be place _onto_ a sketch plane to result in 3D geometry. For\n    example, a 2D point placed onto a sketch plane will result in a 3D point\n    _on_ that sketch plane that has the given 2D coordinate _in_ the sketch\n    plane.\n\nThis allows you to create algorithms that project from 3D into 2D, perform some\ncalculations in 2D, then convert the result back to 3D.\n\nMany 3D data types have `projectInto` functions that return the corresponding 2D\ndata type, and `on` functions for converting back to 3D. For example,\n[`Triangle3d.projectInto`](Triangle3d#projectInto) returns a `Triangle2d` and\n[`Triangle3d.on`](Triangle3d#on) returns a `Triangle3d`.\n\n@docs SketchPlane3d\n\n\n# Constants\n\nThese predefined sketch planes all have the global origin point as their origin\npoint, and use the two indicated global axes as their X and Y axes.\n\n@docs xy, yx, yz, zy, zx, xz\n\n\n# Constructors\n\nSketch planes can also be constructed from `Frame3d` values using\n`Frame3d.xySketchPlane` etc.\n\n@docs withNormalDirection, on, throughPoints, fromPlane, unsafe\n\n\n# Conversions\n\n@docs toPlane\n\n\n# Properties\n\n@docs originPoint, xDirection, yDirection, normalDirection, xAxis, yAxis, normalAxis\n\n\n# Transformations\n\n@docs offsetBy, reverseX, reverseY, moveTo, rotateAround, rotateAroundOwn, translateBy, translateIn, translateAlongOwn, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "SketchPlane3d",
                "comment": " ",
                "args": [],
                "type": "SketchPlane3d"
            }
        ],
        "values": [
            {
                "name": "fromPlane",
                "comment": " ",
                "type": "Plane3d -> SketchPlane3d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "moveTo",
                "comment": " ",
                "type": "Point3d -> SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "normalAxis",
                "comment": " ",
                "type": "SketchPlane3d -> Axis3d"
            },
            {
                "name": "normalDirection",
                "comment": " ",
                "type": "SketchPlane3d -> Direction3d"
            },
            {
                "name": "offsetBy",
                "comment": " ",
                "type": "Float -> SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> Frame2d -> SketchPlane3d"
            },
            {
                "name": "originPoint",
                "comment": " ",
                "type": "SketchPlane3d -> Point3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "reverseX",
                "comment": " ",
                "type": "SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "reverseY",
                "comment": " ",
                "type": "SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "rotateAroundOwn",
                "comment": " ",
                "type": "(SketchPlane3d -> Axis3d) -> Float -> SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "throughPoints",
                "comment": " ",
                "type": "Point3d -> Point3d -> Point3d -> Maybe SketchPlane3d"
            },
            {
                "name": "toPlane",
                "comment": " ",
                "type": "SketchPlane3d -> Plane3d"
            },
            {
                "name": "translateAlongOwn",
                "comment": " ",
                "type": "(SketchPlane3d -> Axis3d) -> Float -> SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> SketchPlane3d -> SketchPlane3d"
            },
            {
                "name": "unsafe",
                "comment": " ",
                "type": "{ originPoint : Point3d, xDirection : Direction3d, yDirection : Direction3d } -> SketchPlane3d"
            },
            {
                "name": "withNormalDirection",
                "comment": " ",
                "type": "Direction3d -> Point3d -> SketchPlane3d"
            },
            {
                "name": "xAxis",
                "comment": " ",
                "type": "SketchPlane3d -> Axis3d"
            },
            {
                "name": "xDirection",
                "comment": " ",
                "type": "SketchPlane3d -> Direction3d"
            },
            {
                "name": "xy",
                "comment": " ",
                "type": "SketchPlane3d"
            },
            {
                "name": "xz",
                "comment": " ",
                "type": "SketchPlane3d"
            },
            {
                "name": "yAxis",
                "comment": " ",
                "type": "SketchPlane3d -> Axis3d"
            },
            {
                "name": "yDirection",
                "comment": " ",
                "type": "SketchPlane3d -> Direction3d"
            },
            {
                "name": "yx",
                "comment": " ",
                "type": "SketchPlane3d"
            },
            {
                "name": "yz",
                "comment": " ",
                "type": "SketchPlane3d"
            },
            {
                "name": "zx",
                "comment": " ",
                "type": "SketchPlane3d"
            },
            {
                "name": "zy",
                "comment": " ",
                "type": "SketchPlane3d"
            }
        ],
        "binops": []
    },
    {
        "name": "CubicSpline2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/CubicSpline2d/icon.svg\" alt=\"CubicSpline2d\" width=\"160\">\n\nA `CubicSpline2d` is a cubic [Bézier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)\nin 2D defined by a start point, end point and two control points. This module\ncontains functionality for\n\n  - Constructing splines\n  - Evaluating points and tangent directions along a spline\n  - Scaling, rotating, translating or mirroring a spline\n  - Converting a spline between local and global coordinates in different\n    reference frames\n\n@docs CubicSpline2d\n\n\n# Constructors\n\n@docs with, fromEndpoints, fromQuadraticSpline\n\n\n# Properties\n\n@docs startPoint, endPoint, startControlPoint, endControlPoint, startDerivative, endDerivative, boundingBox\n\n\n# Evaluation\n\n@docs pointOn, pointsAt\n@docs Nondegenerate, nondegenerate, fromNondegenerate\n@docs tangentDirection, tangentDirectionsAt, sample, samplesAt\n\n\n# Transformations\n\n@docs reverse, scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n\n# Subdivision\n\n@docs bisect, splitAt\n\n\n# Arc length parameterization\n\n@docs ArcLengthParameterized, arcLengthParameterized, arcLength, pointAlong, tangentDirectionAlong, sampleAlong\n\n\n## Low level\n\nAn `ArcLengthParameterized` value is a combination of an\n[`ArcLengthParameterization`](Geometry-ArcLengthParameterization) and an\nunderlying `CubicSpline2d`. If you need to do something fancy, you can extract\nthese two values separately.\n\n@docs arcLengthParameterization, fromArcLengthParameterized\n\n\n# Differentiation\n\nYou are unlikely to need to use these functions directly, but they are useful if\nyou are writing low-level geometric algorithms.\n\n@docs firstDerivative, firstDerivativesAt, secondDerivative, secondDerivativesAt, thirdDerivative, maxSecondDerivativeMagnitude\n\n",
        "unions": [
            {
                "name": "ArcLengthParameterized",
                "comment": " ",
                "args": [],
                "cases": []
            },
            {
                "name": "Nondegenerate",
                "comment": " ",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [
            {
                "name": "CubicSpline2d",
                "comment": " ",
                "args": [],
                "type": "CubicSpline2d"
            }
        ],
        "values": [
            {
                "name": "arcLength",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float"
            },
            {
                "name": "arcLengthParameterization",
                "comment": " ",
                "type": "ArcLengthParameterized -> ArcLengthParameterization"
            },
            {
                "name": "arcLengthParameterized",
                "comment": " ",
                "type": "{ maxError : Float } -> CubicSpline2d -> ArcLengthParameterized"
            },
            {
                "name": "bisect",
                "comment": " ",
                "type": "CubicSpline2d -> ( CubicSpline2d, CubicSpline2d )"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "CubicSpline2d -> BoundingBox2d"
            },
            {
                "name": "endControlPoint",
                "comment": " ",
                "type": "CubicSpline2d -> Point2d"
            },
            {
                "name": "endDerivative",
                "comment": " ",
                "type": "CubicSpline2d -> Vector2d"
            },
            {
                "name": "endPoint",
                "comment": " ",
                "type": "CubicSpline2d -> Point2d"
            },
            {
                "name": "firstDerivative",
                "comment": " ",
                "type": "CubicSpline2d -> ParameterValue -> Vector2d"
            },
            {
                "name": "firstDerivativesAt",
                "comment": " ",
                "type": "List ParameterValue -> CubicSpline2d -> List Vector2d"
            },
            {
                "name": "fromArcLengthParameterized",
                "comment": " ",
                "type": "ArcLengthParameterized -> CubicSpline2d"
            },
            {
                "name": "fromEndpoints",
                "comment": " ",
                "type": "{ startPoint : Point2d, startDerivative : Vector2d, endPoint : Point2d, endDerivative : Vector2d } -> CubicSpline2d"
            },
            {
                "name": "fromNondegenerate",
                "comment": " ",
                "type": "Nondegenerate -> CubicSpline2d"
            },
            {
                "name": "fromQuadraticSpline",
                "comment": " ",
                "type": "QuadraticSpline2d -> CubicSpline2d"
            },
            {
                "name": "maxSecondDerivativeMagnitude",
                "comment": " ",
                "type": "CubicSpline2d -> Float"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> CubicSpline2d -> CubicSpline2d"
            },
            {
                "name": "nondegenerate",
                "comment": " ",
                "type": "CubicSpline2d -> Result Point2d Nondegenerate"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> CubicSpline2d -> CubicSpline2d"
            },
            {
                "name": "pointAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe Point2d"
            },
            {
                "name": "pointOn",
                "comment": " ",
                "type": "CubicSpline2d -> ParameterValue -> Point2d"
            },
            {
                "name": "pointsAt",
                "comment": " ",
                "type": "List ParameterValue -> CubicSpline2d -> List Point2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> CubicSpline2d -> CubicSpline2d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "CubicSpline2d -> CubicSpline2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> CubicSpline2d -> CubicSpline2d"
            },
            {
                "name": "sample",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> ( Point2d, Direction2d )"
            },
            {
                "name": "sampleAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe ( Point2d, Direction2d )"
            },
            {
                "name": "samplesAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List ( Point2d, Direction2d )"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> CubicSpline2d -> CubicSpline2d"
            },
            {
                "name": "secondDerivative",
                "comment": " ",
                "type": "CubicSpline2d -> ParameterValue -> Vector2d"
            },
            {
                "name": "secondDerivativesAt",
                "comment": " ",
                "type": "List ParameterValue -> CubicSpline2d -> List Vector2d"
            },
            {
                "name": "splitAt",
                "comment": " ",
                "type": "ParameterValue -> CubicSpline2d -> ( CubicSpline2d, CubicSpline2d )"
            },
            {
                "name": "startControlPoint",
                "comment": " ",
                "type": "CubicSpline2d -> Point2d"
            },
            {
                "name": "startDerivative",
                "comment": " ",
                "type": "CubicSpline2d -> Vector2d"
            },
            {
                "name": "startPoint",
                "comment": " ",
                "type": "CubicSpline2d -> Point2d"
            },
            {
                "name": "tangentDirection",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> Direction2d"
            },
            {
                "name": "tangentDirectionAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe Direction2d"
            },
            {
                "name": "tangentDirectionsAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List Direction2d"
            },
            {
                "name": "thirdDerivative",
                "comment": " ",
                "type": "CubicSpline2d -> Vector2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> CubicSpline2d -> CubicSpline2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> CubicSpline2d -> CubicSpline2d"
            },
            {
                "name": "with",
                "comment": " ",
                "type": "{ startPoint : Point2d, startControlPoint : Point2d, endControlPoint : Point2d, endPoint : Point2d } -> CubicSpline2d"
            }
        ],
        "binops": []
    },
    {
        "name": "Triangle2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Triangle2d/icon.svg\" alt=\"Triangle2d\" width=\"160\">\n\nA `Triangle2d` represents a triangle in 2D space, and is defined by its three\nvertices. This module contains triangle-related functionality such as:\n\n  - Finding the area and centroid of triangles\n  - Scaling, rotating, translating and mirroring triangles\n  - Converting triangles between different coordinate systems\n\n@docs Triangle2d\n\n\n# Constructors\n\n@docs fromVertices\n\n\n# Properties\n\n@docs vertices, edges, centroid, area, counterclockwiseArea, clockwiseArea, boundingBox, circumcircle\n\n\n# Queries\n\n@docs contains\n\n\n# Transformations\n\nTransforming a triangle is equivalent to transforming its vertices.\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, mapVertices\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Triangle2d",
                "comment": " ",
                "args": [],
                "type": "Triangle2d"
            }
        ],
        "values": [
            {
                "name": "area",
                "comment": " ",
                "type": "Triangle2d -> Float"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "Triangle2d -> BoundingBox2d"
            },
            {
                "name": "centroid",
                "comment": " ",
                "type": "Triangle2d -> Point2d"
            },
            {
                "name": "circumcircle",
                "comment": " ",
                "type": "Triangle2d -> Maybe Circle2d"
            },
            {
                "name": "clockwiseArea",
                "comment": " ",
                "type": "Triangle2d -> Float"
            },
            {
                "name": "contains",
                "comment": " ",
                "type": "Point2d -> Triangle2d -> Bool"
            },
            {
                "name": "counterclockwiseArea",
                "comment": " ",
                "type": "Triangle2d -> Float"
            },
            {
                "name": "edges",
                "comment": " ",
                "type": "Triangle2d -> ( LineSegment2d, LineSegment2d, LineSegment2d )"
            },
            {
                "name": "fromVertices",
                "comment": " ",
                "type": "( Point2d, Point2d, Point2d ) -> Triangle2d"
            },
            {
                "name": "mapVertices",
                "comment": " ",
                "type": "(Point2d -> Point2d) -> Triangle2d -> Triangle2d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Triangle2d -> Triangle2d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Triangle2d -> Triangle2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Triangle2d -> Triangle2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> Triangle2d -> Triangle2d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> Triangle2d -> Triangle2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> Triangle2d -> Triangle2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> Triangle2d -> Triangle2d"
            },
            {
                "name": "vertices",
                "comment": " ",
                "type": "Triangle2d -> ( Point2d, Point2d, Point2d )"
            }
        ],
        "binops": []
    },
    {
        "name": "Polyline2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Polyline2d/icon.svg\" alt=\"Polyline2d\" width=\"160\">\n\nA `Polyline2d` represents a sequence of vertices in 2D connected by line\nsegments. This module contains a variety of polyline-related functionality, such\nas\n\n  - Computing the length of polylines\n  - Scaling, rotating, translating and mirroring polylines\n  - Converting polylines between different coordinate systems\n\n@docs Polyline2d\n\n\n# Constructors\n\n@docs fromVertices\n\n\n# Properties\n\n@docs vertices, segments, length, boundingBox\n\n\n# Transformations\n\nTransforming a polyline is equivalent to transforming each of its vertices.\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto, mapVertices\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Polyline2d",
                "comment": " ",
                "args": [],
                "type": "Polyline2d"
            }
        ],
        "values": [
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "Polyline2d -> Maybe BoundingBox2d"
            },
            {
                "name": "fromVertices",
                "comment": " ",
                "type": "List Point2d -> Polyline2d"
            },
            {
                "name": "length",
                "comment": " ",
                "type": "Polyline2d -> Float"
            },
            {
                "name": "mapVertices",
                "comment": " ",
                "type": "(Point2d -> Point2d) -> Polyline2d -> Polyline2d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Polyline2d -> Polyline2d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Polyline2d -> Polyline2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Axis2d -> Polyline2d -> Polyline2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Polyline2d -> Polyline2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> Polyline2d -> Polyline2d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> Polyline2d -> Polyline2d"
            },
            {
                "name": "segments",
                "comment": " ",
                "type": "Polyline2d -> List LineSegment2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> Polyline2d -> Polyline2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> Polyline2d -> Polyline2d"
            },
            {
                "name": "vertices",
                "comment": " ",
                "type": "Polyline2d -> List Point2d"
            }
        ],
        "binops": []
    },
    {
        "name": "EllipticalArc2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/EllipticalArc2d/icon.svg\" alt=\"EllipticalArc2d\" width=\"160\">\n\nAn `EllipticalArc2d` is a section of an `Ellipse2d` with a start and end point.\nThis module includes functionality for\n\n  - Constructing an elliptical arc from its center or end points\n  - Scaling, rotating, translating and mirroring elliptical arcs\n  - Evaluating points and derivative vectors along elliptical arcs\n  - Forming arc length parameterizations of elliptical arcs\n\nThe `startAngle` and `sweptAngle` values referred to below are not actually\nproper angles but instead refer to values of the [ellipse parameter](https://en.wikipedia.org/wiki/Ellipse#Parametric_representation).\nHowever, in simple cases you don't need to worry about the difference - if\n`startAngle` and `sweptAngle` are both multiples of 90 degrees, then you can\ntreat them as actual angles and everything will behave as you expect.\n\n@docs EllipticalArc2d\n\n\n# Constructors\n\n@docs with, fromEndpoints\n\n\n# Properties\n\n@docs startAngle, sweptAngle, startPoint, endPoint\n@docs centerPoint, axes, xAxis, yAxis, xDirection, yDirection, xRadius, yRadius\n\n\n# Evaluation\n\n@docs pointOn, pointsAt\n@docs Nondegenerate, nondegenerate, fromNondegenerate\n@docs tangentDirection, tangentDirectionsAt, sample, samplesAt\n\n\n# Transformations\n\n@docs reverse, scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n\n# Arc length parameterization\n\n@docs ArcLengthParameterized, arcLengthParameterized, arcLength, pointAlong, tangentDirectionAlong, sampleAlong\n\n\n## Low level\n\nAn `ArcLengthParameterized` value is a combination of an\n[`ArcLengthParameterization`](Geometry-ArcLengthParameterization) and an\nunderlying `EllipticalArc2d`. If you need to do something fancy, you can extract\nthese two values separately.\n\n@docs arcLengthParameterization, fromArcLengthParameterized\n\n\n# Differentiation\n\nYou are unlikely to need to use these functions directly, but they are useful if\nyou are writing low-level geometric algorithms.\n\n@docs firstDerivative, firstDerivativesAt, maxSecondDerivativeMagnitude\n\n",
        "unions": [
            {
                "name": "ArcLengthParameterized",
                "comment": " ",
                "args": [],
                "cases": []
            },
            {
                "name": "Nondegenerate",
                "comment": " ",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [
            {
                "name": "EllipticalArc2d",
                "comment": " ",
                "args": [],
                "type": "EllipticalArc2d"
            }
        ],
        "values": [
            {
                "name": "arcLength",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float"
            },
            {
                "name": "arcLengthParameterization",
                "comment": " ",
                "type": "ArcLengthParameterized -> ArcLengthParameterization"
            },
            {
                "name": "arcLengthParameterized",
                "comment": " ",
                "type": "{ maxError : Float } -> EllipticalArc2d -> ArcLengthParameterized"
            },
            {
                "name": "axes",
                "comment": " ",
                "type": "EllipticalArc2d -> Frame2d"
            },
            {
                "name": "centerPoint",
                "comment": " ",
                "type": "EllipticalArc2d -> Point2d"
            },
            {
                "name": "endPoint",
                "comment": " ",
                "type": "EllipticalArc2d -> Point2d"
            },
            {
                "name": "firstDerivative",
                "comment": " ",
                "type": "EllipticalArc2d -> ParameterValue -> Vector2d"
            },
            {
                "name": "firstDerivativesAt",
                "comment": " ",
                "type": "List ParameterValue -> EllipticalArc2d -> List Vector2d"
            },
            {
                "name": "fromArcLengthParameterized",
                "comment": " ",
                "type": "ArcLengthParameterized -> EllipticalArc2d"
            },
            {
                "name": "fromEndpoints",
                "comment": " ",
                "type": "{ startPoint : Point2d, endPoint : Point2d, xRadius : Float, yRadius : Float, xDirection : Direction2d, sweptAngle : SweptAngle } -> Maybe EllipticalArc2d"
            },
            {
                "name": "fromNondegenerate",
                "comment": " ",
                "type": "Nondegenerate -> EllipticalArc2d"
            },
            {
                "name": "maxSecondDerivativeMagnitude",
                "comment": " ",
                "type": "EllipticalArc2d -> Float"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> EllipticalArc2d -> EllipticalArc2d"
            },
            {
                "name": "nondegenerate",
                "comment": " ",
                "type": "EllipticalArc2d -> Result Point2d Nondegenerate"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> EllipticalArc2d -> EllipticalArc2d"
            },
            {
                "name": "pointAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe Point2d"
            },
            {
                "name": "pointOn",
                "comment": " ",
                "type": "EllipticalArc2d -> ParameterValue -> Point2d"
            },
            {
                "name": "pointsAt",
                "comment": " ",
                "type": "List ParameterValue -> EllipticalArc2d -> List Point2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> EllipticalArc2d -> EllipticalArc2d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "EllipticalArc2d -> EllipticalArc2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> EllipticalArc2d -> EllipticalArc2d"
            },
            {
                "name": "sample",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> ( Point2d, Direction2d )"
            },
            {
                "name": "sampleAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe ( Point2d, Direction2d )"
            },
            {
                "name": "samplesAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List ( Point2d, Direction2d )"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> EllipticalArc2d -> EllipticalArc2d"
            },
            {
                "name": "startAngle",
                "comment": " ",
                "type": "EllipticalArc2d -> Float"
            },
            {
                "name": "startPoint",
                "comment": " ",
                "type": "EllipticalArc2d -> Point2d"
            },
            {
                "name": "sweptAngle",
                "comment": " ",
                "type": "EllipticalArc2d -> Float"
            },
            {
                "name": "tangentDirection",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> Direction2d"
            },
            {
                "name": "tangentDirectionAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe Direction2d"
            },
            {
                "name": "tangentDirectionsAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List Direction2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> EllipticalArc2d -> EllipticalArc2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> EllipticalArc2d -> EllipticalArc2d"
            },
            {
                "name": "with",
                "comment": " ",
                "type": "{ centerPoint : Point2d, xDirection : Direction2d, xRadius : Float, yRadius : Float, startAngle : Float, sweptAngle : Float } -> EllipticalArc2d"
            },
            {
                "name": "xAxis",
                "comment": " ",
                "type": "EllipticalArc2d -> Axis2d"
            },
            {
                "name": "xDirection",
                "comment": " ",
                "type": "EllipticalArc2d -> Direction2d"
            },
            {
                "name": "xRadius",
                "comment": " ",
                "type": "EllipticalArc2d -> Float"
            },
            {
                "name": "yAxis",
                "comment": " ",
                "type": "EllipticalArc2d -> Axis2d"
            },
            {
                "name": "yDirection",
                "comment": " ",
                "type": "EllipticalArc2d -> Direction2d"
            },
            {
                "name": "yRadius",
                "comment": " ",
                "type": "EllipticalArc2d -> Float"
            }
        ],
        "binops": []
    },
    {
        "name": "Plane3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Plane3d/icon.svg\" alt=\"Plane3d\" width=\"160\">\n\nA `Plane3d` is an infinite flat plane in 3D. It is defined by an origin point\nand normal direction and is useful for several operations including:\n\n  - Mirroring across the plane\n  - Projecting onto the plane\n  - Measuring distance from the plane\n\n@docs Plane3d\n\n\n# Constants\n\n@docs xy, yz, zx\n\n\n# Constructors\n\n@docs through, withNormalDirection, throughPoints\n\n\n# Properties\n\n@docs originPoint, normalDirection, normalAxis\n\n\n# Transformations\n\n@docs offsetBy, reverseNormal, rotateAround, translateBy, translateIn, moveTo, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Plane3d",
                "comment": " ",
                "args": [],
                "type": "Plane3d"
            }
        ],
        "values": [
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Plane3d -> Plane3d"
            },
            {
                "name": "moveTo",
                "comment": " ",
                "type": "Point3d -> Plane3d -> Plane3d"
            },
            {
                "name": "normalAxis",
                "comment": " ",
                "type": "Plane3d -> Axis3d"
            },
            {
                "name": "normalDirection",
                "comment": " ",
                "type": "Plane3d -> Direction3d"
            },
            {
                "name": "offsetBy",
                "comment": " ",
                "type": "Float -> Plane3d -> Plane3d"
            },
            {
                "name": "originPoint",
                "comment": " ",
                "type": "Plane3d -> Point3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Plane3d -> Plane3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Plane3d -> Plane3d"
            },
            {
                "name": "reverseNormal",
                "comment": " ",
                "type": "Plane3d -> Plane3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Plane3d -> Plane3d"
            },
            {
                "name": "through",
                "comment": " ",
                "type": "Point3d -> Direction3d -> Plane3d"
            },
            {
                "name": "throughPoints",
                "comment": " ",
                "type": "Point3d -> Point3d -> Point3d -> Maybe Plane3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> Plane3d -> Plane3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> Plane3d -> Plane3d"
            },
            {
                "name": "withNormalDirection",
                "comment": " ",
                "type": "Direction3d -> Point3d -> Plane3d"
            },
            {
                "name": "xy",
                "comment": " ",
                "type": "Plane3d"
            },
            {
                "name": "yz",
                "comment": " ",
                "type": "Plane3d"
            },
            {
                "name": "zx",
                "comment": " ",
                "type": "Plane3d"
            }
        ],
        "binops": []
    },
    {
        "name": "QuadraticSpline2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/QuadraticSpline2d/icon.svg\" alt=\"QuadraticSpline2d\" width=\"160\">\n\nA `QuadraticSpline2d` is a quadratic [Bézier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve)\nin 2D defined by a start point, control point and end point. This module\ncontains functionality for\n\n  - Evaluating points and derivatives along a spline\n  - Scaling, rotating, translating or mirroring a spline\n  - Converting a spline between local and global coordinates in different\n    reference frames\n\n@docs QuadraticSpline2d\n\n\n# Constructors\n\n@docs with\n\n\n# Properties\n\n@docs startPoint, endPoint, controlPoint, startDerivative, endDerivative, boundingBox\n\n\n# Evaluation\n\n@docs pointOn, pointsAt\n@docs Nondegenerate, nondegenerate, fromNondegenerate\n@docs tangentDirection, tangentDirectionsAt, sample, samplesAt\n\n\n# Transformations\n\n@docs reverse, scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n\n# Subdivision\n\n@docs bisect, splitAt\n\n\n# Arc length parameterization\n\n@docs ArcLengthParameterized, arcLengthParameterized, arcLength, pointAlong, tangentDirectionAlong, sampleAlong\n\n\n## Low level\n\nAn `ArcLengthParameterized` value is a combination of an\n[`ArcLengthParameterization`](Geometry-ArcLengthParameterization) and an\nunderlying `QuadraticSpline2d`. If you need to do something fancy, you can\nextract these two values separately.\n\n@docs arcLengthParameterization, fromArcLengthParameterized\n\n\n# Differentiation\n\nYou are unlikely to need to use these functions directly, but they are useful if\nyou are writing low-level geometric algorithms.\n\n@docs firstDerivative, firstDerivativesAt, secondDerivative\n\n",
        "unions": [
            {
                "name": "ArcLengthParameterized",
                "comment": " ",
                "args": [],
                "cases": []
            },
            {
                "name": "Nondegenerate",
                "comment": " ",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [
            {
                "name": "QuadraticSpline2d",
                "comment": " ",
                "args": [],
                "type": "QuadraticSpline2d"
            }
        ],
        "values": [
            {
                "name": "arcLength",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float"
            },
            {
                "name": "arcLengthParameterization",
                "comment": " ",
                "type": "ArcLengthParameterized -> ArcLengthParameterization"
            },
            {
                "name": "arcLengthParameterized",
                "comment": " ",
                "type": "{ maxError : Float } -> QuadraticSpline2d -> ArcLengthParameterized"
            },
            {
                "name": "bisect",
                "comment": " ",
                "type": "QuadraticSpline2d -> ( QuadraticSpline2d, QuadraticSpline2d )"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "QuadraticSpline2d -> BoundingBox2d"
            },
            {
                "name": "controlPoint",
                "comment": " ",
                "type": "QuadraticSpline2d -> Point2d"
            },
            {
                "name": "endDerivative",
                "comment": " ",
                "type": "QuadraticSpline2d -> Vector2d"
            },
            {
                "name": "endPoint",
                "comment": " ",
                "type": "QuadraticSpline2d -> Point2d"
            },
            {
                "name": "firstDerivative",
                "comment": " ",
                "type": "QuadraticSpline2d -> ParameterValue -> Vector2d"
            },
            {
                "name": "firstDerivativesAt",
                "comment": " ",
                "type": "List ParameterValue -> QuadraticSpline2d -> List Vector2d"
            },
            {
                "name": "fromArcLengthParameterized",
                "comment": " ",
                "type": "ArcLengthParameterized -> QuadraticSpline2d"
            },
            {
                "name": "fromNondegenerate",
                "comment": " ",
                "type": "Nondegenerate -> QuadraticSpline2d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> QuadraticSpline2d -> QuadraticSpline2d"
            },
            {
                "name": "nondegenerate",
                "comment": " ",
                "type": "QuadraticSpline2d -> Result Point2d Nondegenerate"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> QuadraticSpline2d -> QuadraticSpline2d"
            },
            {
                "name": "pointAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe Point2d"
            },
            {
                "name": "pointOn",
                "comment": " ",
                "type": "QuadraticSpline2d -> ParameterValue -> Point2d"
            },
            {
                "name": "pointsAt",
                "comment": " ",
                "type": "List ParameterValue -> QuadraticSpline2d -> List Point2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> QuadraticSpline2d -> QuadraticSpline2d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "QuadraticSpline2d -> QuadraticSpline2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> QuadraticSpline2d -> QuadraticSpline2d"
            },
            {
                "name": "sample",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> ( Point2d, Direction2d )"
            },
            {
                "name": "sampleAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe ( Point2d, Direction2d )"
            },
            {
                "name": "samplesAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List ( Point2d, Direction2d )"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> QuadraticSpline2d -> QuadraticSpline2d"
            },
            {
                "name": "secondDerivative",
                "comment": " ",
                "type": "QuadraticSpline2d -> Vector2d"
            },
            {
                "name": "splitAt",
                "comment": " ",
                "type": "ParameterValue -> QuadraticSpline2d -> ( QuadraticSpline2d, QuadraticSpline2d )"
            },
            {
                "name": "startDerivative",
                "comment": " ",
                "type": "QuadraticSpline2d -> Vector2d"
            },
            {
                "name": "startPoint",
                "comment": " ",
                "type": "QuadraticSpline2d -> Point2d"
            },
            {
                "name": "tangentDirection",
                "comment": " ",
                "type": "Nondegenerate -> ParameterValue -> Direction2d"
            },
            {
                "name": "tangentDirectionAlong",
                "comment": " ",
                "type": "ArcLengthParameterized -> Float -> Maybe Direction2d"
            },
            {
                "name": "tangentDirectionsAt",
                "comment": " ",
                "type": "List ParameterValue -> Nondegenerate -> List Direction2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> QuadraticSpline2d -> QuadraticSpline2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> QuadraticSpline2d -> QuadraticSpline2d"
            },
            {
                "name": "with",
                "comment": " ",
                "type": "{ startPoint : Point2d, controlPoint : Point2d, endPoint : Point2d } -> QuadraticSpline2d"
            }
        ],
        "binops": []
    },
    {
        "name": "LineSegment2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/LineSegment2d/icon.svg\" alt=\"LineSegment2d\" width=\"160\">\n\nA `LineSegment2d` is a line between two points in 2D. This module contains\nfunctionality such as:\n\n  - Interpolating within a line segment or measuring its length\n  - Scaling, rotating, translating, mirroring or projecting a line segment\n  - Converting a line segment between local and global coordinates in different\n    reference frames\n\n@docs LineSegment2d\n\n\n# Constructors\n\n@docs fromEndpoints, from, along\n\n\n# Properties\n\n@docs startPoint, endPoint, endpoints, midpoint, length, squaredLength, direction, perpendicularDirection, vector, boundingBox\n\n\n# Interpolation\n\n@docs interpolate\n\n\n# Intersection\n\n@docs intersectionPoint\n\n\n# Transformations\n\n@docs reverse, scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto, mapEndpoints\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "LineSegment2d",
                "comment": " ",
                "args": [],
                "type": "LineSegment2d"
            }
        ],
        "values": [
            {
                "name": "along",
                "comment": " ",
                "type": "Axis2d -> Float -> Float -> LineSegment2d"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "LineSegment2d -> BoundingBox2d"
            },
            {
                "name": "direction",
                "comment": " ",
                "type": "LineSegment2d -> Maybe Direction2d"
            },
            {
                "name": "endPoint",
                "comment": " ",
                "type": "LineSegment2d -> Point2d"
            },
            {
                "name": "endpoints",
                "comment": " ",
                "type": "LineSegment2d -> ( Point2d, Point2d )"
            },
            {
                "name": "from",
                "comment": " ",
                "type": "Point2d -> Point2d -> LineSegment2d"
            },
            {
                "name": "fromEndpoints",
                "comment": " ",
                "type": "( Point2d, Point2d ) -> LineSegment2d"
            },
            {
                "name": "interpolate",
                "comment": " ",
                "type": "LineSegment2d -> Float -> Point2d"
            },
            {
                "name": "intersectionPoint",
                "comment": " ",
                "type": "LineSegment2d -> LineSegment2d -> Maybe Point2d"
            },
            {
                "name": "length",
                "comment": " ",
                "type": "LineSegment2d -> Float"
            },
            {
                "name": "mapEndpoints",
                "comment": " ",
                "type": "(Point2d -> Point2d) -> LineSegment2d -> LineSegment2d"
            },
            {
                "name": "midpoint",
                "comment": " ",
                "type": "LineSegment2d -> Point2d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> LineSegment2d -> LineSegment2d"
            },
            {
                "name": "perpendicularDirection",
                "comment": " ",
                "type": "LineSegment2d -> Maybe Direction2d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> LineSegment2d -> LineSegment2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Axis2d -> LineSegment2d -> LineSegment2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> LineSegment2d -> LineSegment2d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "LineSegment2d -> LineSegment2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> LineSegment2d -> LineSegment2d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> LineSegment2d -> LineSegment2d"
            },
            {
                "name": "squaredLength",
                "comment": " ",
                "type": "LineSegment2d -> Float"
            },
            {
                "name": "startPoint",
                "comment": " ",
                "type": "LineSegment2d -> Point2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> LineSegment2d -> LineSegment2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> LineSegment2d -> LineSegment2d"
            },
            {
                "name": "vector",
                "comment": " ",
                "type": "LineSegment2d -> Vector2d"
            }
        ],
        "binops": []
    },
    {
        "name": "Ellipse2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Ellipse2d/icon.svg\" alt=\"Ellipse2d\" width=\"160\">\n\nAn [ellipse](https://en.wikipedia.org/wiki/Ellipse) is defined by a center\npoint, X and Y radius, and X and Y axes (which will always be perpendicular to\neach other). Ellipses are symmetric about their X and Y axes. This module\nincludes functionality for\n\n  - Constructing ellipses\n  - Scaling, rotating and translating ellipses\n  - Converting ellipses between different coordinate systems\n\n@docs Ellipse2d\n\n\n# Constructors\n\n@docs with\n\n\n# Properties\n\n@docs centerPoint, xAxis, yAxis, xDirection, yDirection, axes, xRadius, yRadius, area\n\n\n# Transformations\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Ellipse2d",
                "comment": " ",
                "args": [],
                "type": "Ellipse2d"
            }
        ],
        "values": [
            {
                "name": "area",
                "comment": " ",
                "type": "Ellipse2d -> Float"
            },
            {
                "name": "axes",
                "comment": " ",
                "type": "Ellipse2d -> Frame2d"
            },
            {
                "name": "centerPoint",
                "comment": " ",
                "type": "Ellipse2d -> Point2d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Ellipse2d -> Ellipse2d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Ellipse2d -> Ellipse2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Ellipse2d -> Ellipse2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> Ellipse2d -> Ellipse2d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> Ellipse2d -> Ellipse2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> Ellipse2d -> Ellipse2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> Ellipse2d -> Ellipse2d"
            },
            {
                "name": "with",
                "comment": " ",
                "type": "{ centerPoint : Point2d, xDirection : Direction2d, xRadius : Float, yRadius : Float } -> Ellipse2d"
            },
            {
                "name": "xAxis",
                "comment": " ",
                "type": "Ellipse2d -> Axis2d"
            },
            {
                "name": "xDirection",
                "comment": " ",
                "type": "Ellipse2d -> Direction2d"
            },
            {
                "name": "xRadius",
                "comment": " ",
                "type": "Ellipse2d -> Float"
            },
            {
                "name": "yAxis",
                "comment": " ",
                "type": "Ellipse2d -> Axis2d"
            },
            {
                "name": "yDirection",
                "comment": " ",
                "type": "Ellipse2d -> Direction2d"
            },
            {
                "name": "yRadius",
                "comment": " ",
                "type": "Ellipse2d -> Float"
            }
        ],
        "binops": []
    },
    {
        "name": "Circle2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Circle2d/icon.svg\" alt=\"Circle2d\" width=\"160\">\n\nA `Circle2d` is defined by its center point and radius. This module includes\nfunctionality for\n\n  - Constructing circles through points or with a given center/radius\n  - Scaling, rotating and translating circles\n  - Extracting properties of circles like area, center point and radius\n\n@docs Circle2d\n\n\n# Constants\n\n@docs unit\n\n\n# Constructors\n\n@docs withRadius, throughPoints, sweptAround\n\n\n# Properties\n\n@docs centerPoint, radius, diameter, area, circumference, boundingBox\n\n\n# Conversion\n\n@docs toArc\n\n\n# Queries\n\n@docs contains\n\n\n# Transformations\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Circle2d",
                "comment": " ",
                "args": [],
                "type": "Circle2d"
            }
        ],
        "values": [
            {
                "name": "area",
                "comment": " ",
                "type": "Circle2d -> Float"
            },
            {
                "name": "boundingBox",
                "comment": " ",
                "type": "Circle2d -> BoundingBox2d"
            },
            {
                "name": "centerPoint",
                "comment": " ",
                "type": "Circle2d -> Point2d"
            },
            {
                "name": "circumference",
                "comment": " ",
                "type": "Circle2d -> Float"
            },
            {
                "name": "contains",
                "comment": " ",
                "type": "Point2d -> Circle2d -> Bool"
            },
            {
                "name": "diameter",
                "comment": " ",
                "type": "Circle2d -> Float"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Circle2d -> Circle2d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Circle2d -> Circle2d"
            },
            {
                "name": "radius",
                "comment": " ",
                "type": "Circle2d -> Float"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Circle2d -> Circle2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> Circle2d -> Circle2d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> Circle2d -> Circle2d"
            },
            {
                "name": "sweptAround",
                "comment": " ",
                "type": "Point2d -> Point2d -> Circle2d"
            },
            {
                "name": "throughPoints",
                "comment": " ",
                "type": "Point2d -> Point2d -> Point2d -> Maybe Circle2d"
            },
            {
                "name": "toArc",
                "comment": " ",
                "type": "Circle2d -> Arc2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> Circle2d -> Circle2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> Circle2d -> Circle2d"
            },
            {
                "name": "unit",
                "comment": " ",
                "type": "Circle2d"
            },
            {
                "name": "withRadius",
                "comment": " ",
                "type": "Float -> Point2d -> Circle2d"
            }
        ],
        "binops": []
    },
    {
        "name": "BoundingBox3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/BoundingBox3d/icon.svg\" alt=\"BoundingBox3d\" width=\"160\">\n\nA `BoundingBox3d` is a rectangular box in 3D defined by its minimum and maximum\nX, Y and Z values. It is possible to generate bounding boxes for most geometric\nobjects; for example, [`Triangle3d.boundingBox`](Triangle3d#boundingBox) takes a\n`Triangle3d` and returns a `BoundingBox3d` that contains that triangle. There\nare several use cases where it is more efficient to deal with the bounding box\nof an object than the object itself, such as:\n\n  - Intersection checking: If (for example) the bounding boxes of a line segment\n    and a triangle do not overlap, then the line segment and triangle cannot\n    possibly intersect each other. Expensive intersection checking therefore\n    only has to be performed for line segments and triangles whose bounding\n    boxes _do_ overlap.\n  - 3D rendering: When rendering a 3D scene, any object whose bounding box is\n    not visible must itself be not visible, and therefore does not have to be\n    drawn. This provides a simple form of culling.\n\n@docs BoundingBox3d\n\n\n# Constructors\n\n@docs fromExtrema, singleton, from, hull, intersection, aggregate, containingPoints\n\n\n# Properties\n\n@docs extrema, minX, maxX, minY, maxY, minZ, maxZ, dimensions, midX, midY, midZ, centroid\n\n\n# Queries\n\n@docs contains, isContainedIn, intersects, overlappingBy, separatedBy\n\n\n# Transformations\n\n@docs scaleAbout, translateBy, translateIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "BoundingBox3d",
                "comment": " ",
                "args": [],
                "type": "BoundingBox3d"
            }
        ],
        "values": [
            {
                "name": "aggregate",
                "comment": " ",
                "type": "List BoundingBox3d -> Maybe BoundingBox3d"
            },
            {
                "name": "centroid",
                "comment": " ",
                "type": "BoundingBox3d -> Point3d"
            },
            {
                "name": "containingPoints",
                "comment": " ",
                "type": "List Point3d -> Maybe BoundingBox3d"
            },
            {
                "name": "contains",
                "comment": " ",
                "type": "Point3d -> BoundingBox3d -> Bool"
            },
            {
                "name": "dimensions",
                "comment": " ",
                "type": "BoundingBox3d -> ( Float, Float, Float )"
            },
            {
                "name": "extrema",
                "comment": " ",
                "type": "BoundingBox3d -> { minX : Float, maxX : Float, minY : Float, maxY : Float, minZ : Float, maxZ : Float }"
            },
            {
                "name": "from",
                "comment": " ",
                "type": "Point3d -> Point3d -> BoundingBox3d"
            },
            {
                "name": "fromExtrema",
                "comment": " ",
                "type": "{ minX : Float, maxX : Float, minY : Float, maxY : Float, minZ : Float, maxZ : Float } -> BoundingBox3d"
            },
            {
                "name": "hull",
                "comment": " ",
                "type": "BoundingBox3d -> BoundingBox3d -> BoundingBox3d"
            },
            {
                "name": "intersection",
                "comment": " ",
                "type": "BoundingBox3d -> BoundingBox3d -> Maybe BoundingBox3d"
            },
            {
                "name": "intersects",
                "comment": " ",
                "type": "BoundingBox3d -> BoundingBox3d -> Bool"
            },
            {
                "name": "isContainedIn",
                "comment": " ",
                "type": "BoundingBox3d -> BoundingBox3d -> Bool"
            },
            {
                "name": "maxX",
                "comment": " ",
                "type": "BoundingBox3d -> Float"
            },
            {
                "name": "maxY",
                "comment": " ",
                "type": "BoundingBox3d -> Float"
            },
            {
                "name": "maxZ",
                "comment": " ",
                "type": "BoundingBox3d -> Float"
            },
            {
                "name": "midX",
                "comment": " ",
                "type": "BoundingBox3d -> Float"
            },
            {
                "name": "midY",
                "comment": " ",
                "type": "BoundingBox3d -> Float"
            },
            {
                "name": "midZ",
                "comment": " ",
                "type": "BoundingBox3d -> Float"
            },
            {
                "name": "minX",
                "comment": " ",
                "type": "BoundingBox3d -> Float"
            },
            {
                "name": "minY",
                "comment": " ",
                "type": "BoundingBox3d -> Float"
            },
            {
                "name": "minZ",
                "comment": " ",
                "type": "BoundingBox3d -> Float"
            },
            {
                "name": "overlappingBy",
                "comment": " ",
                "type": "Order -> Float -> BoundingBox3d -> BoundingBox3d -> Bool"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point3d -> Float -> BoundingBox3d -> BoundingBox3d"
            },
            {
                "name": "separatedBy",
                "comment": " ",
                "type": "Order -> Float -> BoundingBox3d -> BoundingBox3d -> Bool"
            },
            {
                "name": "singleton",
                "comment": " ",
                "type": "Point3d -> BoundingBox3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> BoundingBox3d -> BoundingBox3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> BoundingBox3d -> BoundingBox3d"
            }
        ],
        "binops": []
    },
    {
        "name": "Axis3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Axis3d/icon.svg\" alt=\"Axis3d\" width=\"160\">\n\nAn `Axis3d` represents an infinitely long straight line in 3D and is defined by\nan origin point and direction. Axes have several uses, such as:\n\n  - Rotating around the axis\n  - Projecting onto the axis\n  - Measuring distance along the axis from the origin point\n\n@docs Axis3d\n\n\n# Constants\n\n@docs x, y, z\n\n\n# Constructors\n\n@docs through, withDirection, on\n\n\n# Properties\n\n@docs originPoint, direction\n\n\n# Transformations\n\n@docs reverse, moveTo, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto\n\n\n# Coordinate conversions\n\nFunctions for transforming axes between local and global coordinates in\ndifferent coordinate frames.\n\n@docs relativeTo, placeIn, projectInto\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Axis3d",
                "comment": " ",
                "args": [],
                "type": "Axis3d"
            }
        ],
        "values": [
            {
                "name": "direction",
                "comment": " ",
                "type": "Axis3d -> Direction3d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Axis3d -> Axis3d"
            },
            {
                "name": "moveTo",
                "comment": " ",
                "type": "Point3d -> Axis3d -> Axis3d"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> Axis2d -> Axis3d"
            },
            {
                "name": "originPoint",
                "comment": " ",
                "type": "Axis3d -> Point3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Axis3d -> Axis3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> Axis3d -> Maybe Axis2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Plane3d -> Axis3d -> Maybe Axis3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Axis3d -> Axis3d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "Axis3d -> Axis3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Axis3d -> Axis3d"
            },
            {
                "name": "through",
                "comment": " ",
                "type": "Point3d -> Direction3d -> Axis3d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> Axis3d -> Axis3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> Axis3d -> Axis3d"
            },
            {
                "name": "withDirection",
                "comment": " ",
                "type": "Direction3d -> Point3d -> Axis3d"
            },
            {
                "name": "x",
                "comment": " ",
                "type": "Axis3d"
            },
            {
                "name": "y",
                "comment": " ",
                "type": "Axis3d"
            },
            {
                "name": "z",
                "comment": " ",
                "type": "Axis3d"
            }
        ],
        "binops": []
    },
    {
        "name": "Frame2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Frame2d/icon.svg\" alt=\"Frame2d\" width=\"160\">\n\nA `Frame2d` has an origin point and a pair of X and Y directions (which are\nalways perpendicular to each other). It can be thought of as:\n\n  - A local coordinate system: Most geometric types have associated `relativeTo`\n    and `placeIn` functions that convert values of that type from global\n    coordinates to local coordinates in a particular frame, and vice versa.\n  - A pair of X and Y axes: It is often convenient to (for example) mirror\n    across the X axis of a frame, or project onto its Y axis. Frames can\n    also themselves be translated, rotated and mirrored!\n  - A combined 2D position and orientation: For example, a `Frame2d` could be\n    used to define the position and orientation of a spaceship in a 2D game.\n    Movement of the ship would then be done by translating and rotating the\n    frame.\n\n@docs Frame2d\n\n\n# Constants\n\n@docs xy\n\n\n# Constructors\n\n@docs atPoint, atCoordinates, withXDirection, withYDirection, unsafe\n\n\n# Properties\n\n@docs originPoint, xDirection, yDirection, isRightHanded, xAxis, yAxis\n\n\n# Transformations\n\n@docs reverseX, reverseY, moveTo, rotateBy, rotateAround, translateBy, translateIn, translateAlongOwn, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Frame2d",
                "comment": " ",
                "args": [],
                "type": "Frame2d"
            }
        ],
        "values": [
            {
                "name": "atCoordinates",
                "comment": " ",
                "type": "( Float, Float ) -> Frame2d"
            },
            {
                "name": "atPoint",
                "comment": " ",
                "type": "Point2d -> Frame2d"
            },
            {
                "name": "isRightHanded",
                "comment": " ",
                "type": "Frame2d -> Bool"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Frame2d -> Frame2d"
            },
            {
                "name": "moveTo",
                "comment": " ",
                "type": "Point2d -> Frame2d -> Frame2d"
            },
            {
                "name": "originPoint",
                "comment": " ",
                "type": "Frame2d -> Point2d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Frame2d -> Frame2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Frame2d -> Frame2d"
            },
            {
                "name": "reverseX",
                "comment": " ",
                "type": "Frame2d -> Frame2d"
            },
            {
                "name": "reverseY",
                "comment": " ",
                "type": "Frame2d -> Frame2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> Frame2d -> Frame2d"
            },
            {
                "name": "rotateBy",
                "comment": " ",
                "type": "Float -> Frame2d -> Frame2d"
            },
            {
                "name": "translateAlongOwn",
                "comment": " ",
                "type": "(Frame2d -> Axis2d) -> Float -> Frame2d -> Frame2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> Frame2d -> Frame2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> Frame2d -> Frame2d"
            },
            {
                "name": "unsafe",
                "comment": " ",
                "type": "{ originPoint : Point2d, xDirection : Direction2d, yDirection : Direction2d } -> Frame2d"
            },
            {
                "name": "withXDirection",
                "comment": " ",
                "type": "Direction2d -> Point2d -> Frame2d"
            },
            {
                "name": "withYDirection",
                "comment": " ",
                "type": "Direction2d -> Point2d -> Frame2d"
            },
            {
                "name": "xAxis",
                "comment": " ",
                "type": "Frame2d -> Axis2d"
            },
            {
                "name": "xDirection",
                "comment": " ",
                "type": "Frame2d -> Direction2d"
            },
            {
                "name": "xy",
                "comment": " ",
                "type": "Frame2d"
            },
            {
                "name": "yAxis",
                "comment": " ",
                "type": "Frame2d -> Axis2d"
            },
            {
                "name": "yDirection",
                "comment": " ",
                "type": "Frame2d -> Direction2d"
            }
        ],
        "binops": []
    },
    {
        "name": "Point3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Point3d/icon.svg\" alt=\"Point3d\" width=\"160\">\n\nA `Point3d` represents a position in 3D space and is defined by its X, Y and Z\ncoordinates. This module contains a variety of point-related functionality, such\nas\n\n  - Measuring distance between points, or the distance of a point from an axis\n    or a plane\n  - Scaling, rotating, translating, mirroring and projecting points\n  - Converting points between different coordinate systems\n\nPoints are distinct from vectors but interact with them in well-defined ways;\nyou can translate a point by a vector to result in a new point, or you can\ncompute the vector from one point to another, but you cannot 'add' two points\nlike you can add two vectors.\n\n@docs Point3d\n\n\n# Constants\n\n@docs origin\n\n\n# Constructors\n\n@docs fromCoordinates, fromCoordinatesIn, midpoint, interpolateFrom, along, on, circumcenter\n\n\n# Properties\n\n@docs coordinates, xCoordinate, yCoordinate, zCoordinate\n\n\n# Comparison\n\n@docs equalWithin\n\n\n# Measurement\n\n@docs distanceFrom, squaredDistanceFrom, signedDistanceAlong, distanceFromAxis, squaredDistanceFromAxis, signedDistanceFrom\n\n\n# Transformations\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto, projectOntoAxis\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn, projectInto\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Point3d",
                "comment": " ",
                "args": [],
                "type": "Point3d"
            }
        ],
        "values": [
            {
                "name": "along",
                "comment": " ",
                "type": "Axis3d -> Float -> Point3d"
            },
            {
                "name": "circumcenter",
                "comment": " ",
                "type": "Point3d -> Point3d -> Point3d -> Maybe Point3d"
            },
            {
                "name": "coordinates",
                "comment": " ",
                "type": "Point3d -> ( Float, Float, Float )"
            },
            {
                "name": "distanceFrom",
                "comment": " ",
                "type": "Point3d -> Point3d -> Float"
            },
            {
                "name": "distanceFromAxis",
                "comment": " ",
                "type": "Axis3d -> Point3d -> Float"
            },
            {
                "name": "equalWithin",
                "comment": " ",
                "type": "Float -> Point3d -> Point3d -> Bool"
            },
            {
                "name": "fromCoordinates",
                "comment": " ",
                "type": "( Float, Float, Float ) -> Point3d"
            },
            {
                "name": "fromCoordinatesIn",
                "comment": " ",
                "type": "Frame3d -> ( Float, Float, Float ) -> Point3d"
            },
            {
                "name": "interpolateFrom",
                "comment": " ",
                "type": "Point3d -> Point3d -> Float -> Point3d"
            },
            {
                "name": "midpoint",
                "comment": " ",
                "type": "Point3d -> Point3d -> Point3d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Point3d -> Point3d"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> Point2d -> Point3d"
            },
            {
                "name": "origin",
                "comment": " ",
                "type": "Point3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Point3d -> Point3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> Point3d -> Point2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Plane3d -> Point3d -> Point3d"
            },
            {
                "name": "projectOntoAxis",
                "comment": " ",
                "type": "Axis3d -> Point3d -> Point3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Point3d -> Point3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Point3d -> Point3d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point3d -> Float -> Point3d -> Point3d"
            },
            {
                "name": "signedDistanceAlong",
                "comment": " ",
                "type": "Axis3d -> Point3d -> Float"
            },
            {
                "name": "signedDistanceFrom",
                "comment": " ",
                "type": "Plane3d -> Point3d -> Float"
            },
            {
                "name": "squaredDistanceFrom",
                "comment": " ",
                "type": "Point3d -> Point3d -> Float"
            },
            {
                "name": "squaredDistanceFromAxis",
                "comment": " ",
                "type": "Axis3d -> Point3d -> Float"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector3d -> Point3d -> Point3d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction3d -> Float -> Point3d -> Point3d"
            },
            {
                "name": "xCoordinate",
                "comment": " ",
                "type": "Point3d -> Float"
            },
            {
                "name": "yCoordinate",
                "comment": " ",
                "type": "Point3d -> Float"
            },
            {
                "name": "zCoordinate",
                "comment": " ",
                "type": "Point3d -> Float"
            }
        ],
        "binops": []
    },
    {
        "name": "Axis2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Axis2d/icon.svg\" alt=\"Axis2d\" width=\"160\">\n\nAn `Axis2d` represents an infinitely long straight line in 2D and is defined by\nan origin point and direction. Axes have several uses, such as:\n\n  - Mirroring across the axis\n  - Projecting onto the axis\n  - Measuring distance along the axis from the origin point\n\n@docs Axis2d\n\n\n# Constants\n\n@docs x, y\n\n\n# Constructors\n\n@docs through, withDirection\n\n\n# Properties\n\n@docs originPoint, direction\n\n\n# Transformations\n\n@docs reverse, moveTo, rotateAround, translateBy, translateIn, mirrorAcross\n\n\n# Coordinate conversions\n\nFunctions for transforming axes between local and global coordinates in\ndifferent coordinate frames.\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Axis2d",
                "comment": " ",
                "args": [],
                "type": "Axis2d"
            }
        ],
        "values": [
            {
                "name": "direction",
                "comment": " ",
                "type": "Axis2d -> Direction2d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Axis2d -> Axis2d"
            },
            {
                "name": "moveTo",
                "comment": " ",
                "type": "Point2d -> Axis2d -> Axis2d"
            },
            {
                "name": "originPoint",
                "comment": " ",
                "type": "Axis2d -> Point2d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Axis2d -> Axis2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Axis2d -> Axis2d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "Axis2d -> Axis2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> Axis2d -> Axis2d"
            },
            {
                "name": "through",
                "comment": " ",
                "type": "Point2d -> Direction2d -> Axis2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> Axis2d -> Axis2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> Axis2d -> Axis2d"
            },
            {
                "name": "withDirection",
                "comment": " ",
                "type": "Direction2d -> Point2d -> Axis2d"
            },
            {
                "name": "x",
                "comment": " ",
                "type": "Axis2d"
            },
            {
                "name": "y",
                "comment": " ",
                "type": "Axis2d"
            }
        ],
        "binops": []
    },
    {
        "name": "BoundingBox2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/BoundingBox2d/icon.svg\" alt=\"BoundingBox2d\" width=\"160\">\n\nA `BoundingBox2d` is a rectangular box in 2D defined by its minimum and maximum\nX and Y values. It is possible to generate bounding boxes for most geometric\nobjects; for example, [`Triangle2d.boundingBox`](Triangle2d#boundingBox) takes a\n`Triangle2d` and returns a `BoundingBox2d` that contains that triangle. There\nare several use cases where it is more efficient to deal with the bounding box\nof an object than the object itself, such as:\n\n  - Intersection checking: If (for example) the bounding boxes of a line segment\n    and a triangle do not overlap, then the line segment and triangle cannot\n    possibly intersect each other. Expensive intersection checking therefore\n    only has to be performed for line segments and triangles whose bounding\n    boxes _do_ overlap.\n  - 2D rendering: When rendering a 2D scene, any object whose bounding box does\n    not overlap the viewing area must itself be completely outside the viewing\n    area, and therefore does not have to be drawn. This provides a simple form\n    of culling.\n\n@docs BoundingBox2d\n\n\n# Constructors\n\n@docs fromExtrema, singleton, from, hull, intersection, aggregate, containingPoints\n\n\n# Properties\n\n@docs extrema, minX, maxX, minY, maxY, dimensions, midX, midY, centroid\n\n\n# Queries\n\n@docs contains, isContainedIn, intersects, overlappingBy, separatedBy\n\n\n# Transformations\n\n@docs scaleAbout, translateBy, translateIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "BoundingBox2d",
                "comment": " ",
                "args": [],
                "type": "BoundingBox2d"
            }
        ],
        "values": [
            {
                "name": "aggregate",
                "comment": " ",
                "type": "List BoundingBox2d -> Maybe BoundingBox2d"
            },
            {
                "name": "centroid",
                "comment": " ",
                "type": "BoundingBox2d -> Point2d"
            },
            {
                "name": "containingPoints",
                "comment": " ",
                "type": "List Point2d -> Maybe BoundingBox2d"
            },
            {
                "name": "contains",
                "comment": " ",
                "type": "Point2d -> BoundingBox2d -> Bool"
            },
            {
                "name": "dimensions",
                "comment": " ",
                "type": "BoundingBox2d -> ( Float, Float )"
            },
            {
                "name": "extrema",
                "comment": " ",
                "type": "BoundingBox2d -> { minX : Float, maxX : Float, minY : Float, maxY : Float }"
            },
            {
                "name": "from",
                "comment": " ",
                "type": "Point2d -> Point2d -> BoundingBox2d"
            },
            {
                "name": "fromExtrema",
                "comment": " ",
                "type": "{ minX : Float, maxX : Float, minY : Float, maxY : Float } -> BoundingBox2d"
            },
            {
                "name": "hull",
                "comment": " ",
                "type": "BoundingBox2d -> BoundingBox2d -> BoundingBox2d"
            },
            {
                "name": "intersection",
                "comment": " ",
                "type": "BoundingBox2d -> BoundingBox2d -> Maybe BoundingBox2d"
            },
            {
                "name": "intersects",
                "comment": " ",
                "type": "BoundingBox2d -> BoundingBox2d -> Bool"
            },
            {
                "name": "isContainedIn",
                "comment": " ",
                "type": "BoundingBox2d -> BoundingBox2d -> Bool"
            },
            {
                "name": "maxX",
                "comment": " ",
                "type": "BoundingBox2d -> Float"
            },
            {
                "name": "maxY",
                "comment": " ",
                "type": "BoundingBox2d -> Float"
            },
            {
                "name": "midX",
                "comment": " ",
                "type": "BoundingBox2d -> Float"
            },
            {
                "name": "midY",
                "comment": " ",
                "type": "BoundingBox2d -> Float"
            },
            {
                "name": "minX",
                "comment": " ",
                "type": "BoundingBox2d -> Float"
            },
            {
                "name": "minY",
                "comment": " ",
                "type": "BoundingBox2d -> Float"
            },
            {
                "name": "overlappingBy",
                "comment": " ",
                "type": "Order -> Float -> BoundingBox2d -> BoundingBox2d -> Bool"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> BoundingBox2d -> BoundingBox2d"
            },
            {
                "name": "separatedBy",
                "comment": " ",
                "type": "Order -> Float -> BoundingBox2d -> BoundingBox2d -> Bool"
            },
            {
                "name": "singleton",
                "comment": " ",
                "type": "Point2d -> BoundingBox2d"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> BoundingBox2d -> BoundingBox2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> BoundingBox2d -> BoundingBox2d"
            }
        ],
        "binops": []
    },
    {
        "name": "Direction3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Direction3d/icon.svg\" alt=\"Direction3d\" width=\"160\">\n\nA `Direction3d` represents a direction like 'up' or 'north' or 'forwards'. They\nare represented using X, Y and Z components, and can be converted to vectors if\nnecessary, but should be thought of as conceptually different. Directions have\nseveral uses, such as:\n\n  - Constructing a vector from a length and direction\n  - Determining the component of a vector in a particular direction (for\n    example, finding the component of velocity in the up direction to get\n    vertical speed)\n  - Determining the angle between two directions\n  - Defining the orientation of an axis, plane or reference frame\n\n@docs Direction3d\n\n\n# Constants\n\n@docs x, y, z, positiveX, negativeX, positiveY, negativeY, positiveZ, negativeZ\n\n\n# Constructors\n\n@docs from, on, fromAzimuthAndElevation, perpendicularTo, perpendicularBasis, orthonormalize, orthogonalize, unsafe\n\n\n# Properties\n\n@docs components, xComponent, yComponent, zComponent, azimuth, elevation\n\n\n# Comparison\n\n@docs equalWithin\n\n\n# Measurement\n\n@docs componentIn, angleFrom\n\n\n# Conversion\n\n@docs toVector\n\n\n# Transformations\n\n@docs reverse, rotateAround, mirrorAcross, projectOnto\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn, projectInto\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Direction3d",
                "comment": " ",
                "args": [],
                "type": "Direction3d"
            }
        ],
        "values": [
            {
                "name": "angleFrom",
                "comment": " ",
                "type": "Direction3d -> Direction3d -> Float"
            },
            {
                "name": "azimuth",
                "comment": " ",
                "type": "Direction3d -> Float"
            },
            {
                "name": "componentIn",
                "comment": " ",
                "type": "Direction3d -> Direction3d -> Float"
            },
            {
                "name": "components",
                "comment": " ",
                "type": "Direction3d -> ( Float, Float, Float )"
            },
            {
                "name": "elevation",
                "comment": " ",
                "type": "Direction3d -> Float"
            },
            {
                "name": "equalWithin",
                "comment": " ",
                "type": "Float -> Direction3d -> Direction3d -> Bool"
            },
            {
                "name": "from",
                "comment": " ",
                "type": "Point3d -> Point3d -> Maybe Direction3d"
            },
            {
                "name": "fromAzimuthAndElevation",
                "comment": " ",
                "type": "Float -> Float -> Direction3d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Direction3d -> Direction3d"
            },
            {
                "name": "negativeX",
                "comment": " ",
                "type": "Direction3d"
            },
            {
                "name": "negativeY",
                "comment": " ",
                "type": "Direction3d"
            },
            {
                "name": "negativeZ",
                "comment": " ",
                "type": "Direction3d"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> Direction2d -> Direction3d"
            },
            {
                "name": "orthogonalize",
                "comment": " ",
                "type": "Direction3d -> Direction3d -> Direction3d -> Maybe ( Direction3d, Direction3d, Direction3d )"
            },
            {
                "name": "orthonormalize",
                "comment": " ",
                "type": "Vector3d -> Vector3d -> Vector3d -> Maybe ( Direction3d, Direction3d, Direction3d )"
            },
            {
                "name": "perpendicularBasis",
                "comment": " ",
                "type": "Direction3d -> ( Direction3d, Direction3d )"
            },
            {
                "name": "perpendicularTo",
                "comment": " ",
                "type": "Direction3d -> Direction3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Direction3d -> Direction3d"
            },
            {
                "name": "positiveX",
                "comment": " ",
                "type": "Direction3d"
            },
            {
                "name": "positiveY",
                "comment": " ",
                "type": "Direction3d"
            },
            {
                "name": "positiveZ",
                "comment": " ",
                "type": "Direction3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> Direction3d -> Maybe Direction2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Plane3d -> Direction3d -> Maybe Direction3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Direction3d -> Direction3d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "Direction3d -> Direction3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Direction3d -> Direction3d"
            },
            {
                "name": "toVector",
                "comment": " ",
                "type": "Direction3d -> Vector3d"
            },
            {
                "name": "unsafe",
                "comment": " ",
                "type": "( Float, Float, Float ) -> Direction3d"
            },
            {
                "name": "x",
                "comment": " ",
                "type": "Direction3d"
            },
            {
                "name": "xComponent",
                "comment": " ",
                "type": "Direction3d -> Float"
            },
            {
                "name": "y",
                "comment": " ",
                "type": "Direction3d"
            },
            {
                "name": "yComponent",
                "comment": " ",
                "type": "Direction3d -> Float"
            },
            {
                "name": "z",
                "comment": " ",
                "type": "Direction3d"
            },
            {
                "name": "zComponent",
                "comment": " ",
                "type": "Direction3d -> Float"
            }
        ],
        "binops": []
    },
    {
        "name": "Point2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Point2d/icon.svg\" alt=\"Point2d\" width=\"160\">\n\nA `Point2d` represents a position in 2D space and is defined by its X and Y\ncoordinates. This module contains a variety of point-related functionality, such\nas\n\n  - Measuring distance between points\n  - Scaling, rotating, translating, mirroring and projecting points\n  - Converting points between different coordinate systems\n\nPoints are distinct from vectors but interact with them in well-defined ways;\nyou can translate a point by a vector to result in a new point, or you can\ncompute the vector from one point to another, but you cannot 'add' two points\nlike you can add two vectors.\n\n@docs Point2d\n\n\n# Constants\n\n@docs origin\n\n\n# Constructors\n\n@docs fromCoordinates, fromCoordinatesIn, fromPolarCoordinates, fromPolarCoordinatesIn, midpoint, interpolateFrom, along, circumcenter\n\n\n# Properties\n\n@docs coordinates, xCoordinate, yCoordinate, polarCoordinates\n\n\n# Comparison\n\n@docs equalWithin\n\n\n# Measurement\n\n@docs distanceFrom, squaredDistanceFrom, signedDistanceAlong, signedDistanceFrom\n\n\n# Transformations\n\n@docs scaleAbout, rotateAround, translateBy, translateIn, mirrorAcross, projectOnto\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Point2d",
                "comment": " ",
                "args": [],
                "type": "Point2d"
            }
        ],
        "values": [
            {
                "name": "along",
                "comment": " ",
                "type": "Axis2d -> Float -> Point2d"
            },
            {
                "name": "circumcenter",
                "comment": " ",
                "type": "Point2d -> Point2d -> Point2d -> Maybe Point2d"
            },
            {
                "name": "coordinates",
                "comment": " ",
                "type": "Point2d -> ( Float, Float )"
            },
            {
                "name": "distanceFrom",
                "comment": " ",
                "type": "Point2d -> Point2d -> Float"
            },
            {
                "name": "equalWithin",
                "comment": " ",
                "type": "Float -> Point2d -> Point2d -> Bool"
            },
            {
                "name": "fromCoordinates",
                "comment": " ",
                "type": "( Float, Float ) -> Point2d"
            },
            {
                "name": "fromCoordinatesIn",
                "comment": " ",
                "type": "Frame2d -> ( Float, Float ) -> Point2d"
            },
            {
                "name": "fromPolarCoordinates",
                "comment": " ",
                "type": "( Float, Float ) -> Point2d"
            },
            {
                "name": "fromPolarCoordinatesIn",
                "comment": " ",
                "type": "Frame2d -> ( Float, Float ) -> Point2d"
            },
            {
                "name": "interpolateFrom",
                "comment": " ",
                "type": "Point2d -> Point2d -> Float -> Point2d"
            },
            {
                "name": "midpoint",
                "comment": " ",
                "type": "Point2d -> Point2d -> Point2d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Point2d -> Point2d"
            },
            {
                "name": "origin",
                "comment": " ",
                "type": "Point2d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Point2d -> Point2d"
            },
            {
                "name": "polarCoordinates",
                "comment": " ",
                "type": "Point2d -> ( Float, Float )"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Axis2d -> Point2d -> Point2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Point2d -> Point2d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Point2d -> Float -> Point2d -> Point2d"
            },
            {
                "name": "scaleAbout",
                "comment": " ",
                "type": "Point2d -> Float -> Point2d -> Point2d"
            },
            {
                "name": "signedDistanceAlong",
                "comment": " ",
                "type": "Axis2d -> Point2d -> Float"
            },
            {
                "name": "signedDistanceFrom",
                "comment": " ",
                "type": "Axis2d -> Point2d -> Float"
            },
            {
                "name": "squaredDistanceFrom",
                "comment": " ",
                "type": "Point2d -> Point2d -> Float"
            },
            {
                "name": "translateBy",
                "comment": " ",
                "type": "Vector2d -> Point2d -> Point2d"
            },
            {
                "name": "translateIn",
                "comment": " ",
                "type": "Direction2d -> Float -> Point2d -> Point2d"
            },
            {
                "name": "xCoordinate",
                "comment": " ",
                "type": "Point2d -> Float"
            },
            {
                "name": "yCoordinate",
                "comment": " ",
                "type": "Point2d -> Float"
            }
        ],
        "binops": []
    },
    {
        "name": "Curve.ArcLengthParameterization",
        "comment": " _You will likely never need to use this module directly._ In the vast\nmajority of cases the individual curve modules such as `QuadraticSpline2d`\nshould contain all the functionality you need to construct an arc length\nparameterization and use it to do things like evaluate a curve at evenly-spaced\npoints. This module is primarily for use internally by those curve modules, but\nmay be useful if you want to do some fancy mapping between arc length and curve\nparameter values.\n\n@docs ArcLengthParameterization\n\n\n# Constructing\n\n@docs build\n\n\n# Evaluating\n\n@docs totalArcLength, arcLengthToParameterValue, parameterValueToArcLength\n\n",
        "unions": [
            {
                "name": "ArcLengthParameterization",
                "comment": " ",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [],
        "values": [
            {
                "name": "arcLengthToParameterValue",
                "comment": " ",
                "type": "Float -> ArcLengthParameterization -> Maybe ParameterValue"
            },
            {
                "name": "build",
                "comment": " ",
                "type": "{ maxError : Float, derivativeMagnitude : ParameterValue -> Float, maxSecondDerivativeMagnitude : Float } -> ArcLengthParameterization"
            },
            {
                "name": "parameterValueToArcLength",
                "comment": " ",
                "type": "ParameterValue -> ArcLengthParameterization -> Float"
            },
            {
                "name": "totalArcLength",
                "comment": " ",
                "type": "ArcLengthParameterization -> Float"
            }
        ],
        "binops": []
    },
    {
        "name": "Vector3d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Vector3d/icon.svg\" alt=\"Vector3d\" width=\"160\">\n\nA `Vector3d` represents a quantity such as a displacement or velocity in 3D, and\nis defined by its X, Y and Z components. This module contains a variety of\nvector-related functionality, such as\n\n  - Adding or subtracting vectors\n  - Finding the lengths of vectors\n  - Rotating vectors\n  - Converting vectors between different coordinate systems\n\nNote that unlike in many other geometry packages where vectors are used as a\ngeneral-purpose data type, `opensolid/geometry` has separate data types for\nvectors, directions and points. In most code it is actually more common to use\n`Point3d` and `Direction3d` than `Vector3d`, and much code can avoid working\ndirectly with `Vector3d` values at all!\n\n@docs Vector3d\n\n\n# Predefined vectors\n\n@docs zero\n\nAlthough there are no predefined constants for the vectors with components\n(1,&nbsp;0,&nbsp;0), (0,&nbsp;1,&nbsp;0) and (0,&nbsp;0,&nbsp;1), in most cases\nyou will actually want their `Direction3d` versions [`Direction3d.x`](Direction3d#x),\n[`Direction3d.y`](Direction3d#y) and [`Direction3d.z`](Direction3d#z).\n\n\n# Constructors\n\n@docs fromComponents, from, withLength, on, perpendicularTo, interpolateFrom\n\n\n# Components\n\n@docs components, xComponent, yComponent, zComponent, length, squaredLength, direction, lengthAndDirection\n\n\n# Comparison\n\n@docs equalWithin\n\n\n# Measurement\n\n@docs componentIn\n\n\n# Arithmetic\n\n@docs sum, difference, dotProduct, crossProduct\n\n\n# Transformations\n\nNote that for all transformations, only the orientation of the given axis or\nplane is relevant, since vectors are position-independent. Think of transforming\na vector as placing its tail on the relevant axis or plane and then transforming\nits tip.\n\n@docs reverse, normalize, scaleBy, rotateAround, mirrorAcross, projectionIn, projectOnto\n\n\n# Coordinate conversions\n\nLike other transformations, coordinate transformations of vectors depend only on\nthe orientations of the relevant frames/sketch planes, not their positions.\n\n@docs relativeTo, placeIn, projectInto\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Vector3d",
                "comment": " ",
                "args": [],
                "type": "Vector3d"
            }
        ],
        "values": [
            {
                "name": "componentIn",
                "comment": " ",
                "type": "Direction3d -> Vector3d -> Float"
            },
            {
                "name": "components",
                "comment": " ",
                "type": "Vector3d -> ( Float, Float, Float )"
            },
            {
                "name": "crossProduct",
                "comment": " ",
                "type": "Vector3d -> Vector3d -> Vector3d"
            },
            {
                "name": "difference",
                "comment": " ",
                "type": "Vector3d -> Vector3d -> Vector3d"
            },
            {
                "name": "direction",
                "comment": " ",
                "type": "Vector3d -> Maybe Direction3d"
            },
            {
                "name": "dotProduct",
                "comment": " ",
                "type": "Vector3d -> Vector3d -> Float"
            },
            {
                "name": "equalWithin",
                "comment": " ",
                "type": "Float -> Vector3d -> Vector3d -> Bool"
            },
            {
                "name": "from",
                "comment": " ",
                "type": "Point3d -> Point3d -> Vector3d"
            },
            {
                "name": "fromComponents",
                "comment": " ",
                "type": "( Float, Float, Float ) -> Vector3d"
            },
            {
                "name": "interpolateFrom",
                "comment": " ",
                "type": "Vector3d -> Vector3d -> Float -> Vector3d"
            },
            {
                "name": "length",
                "comment": " ",
                "type": "Vector3d -> Float"
            },
            {
                "name": "lengthAndDirection",
                "comment": " ",
                "type": "Vector3d -> Maybe ( Float, Direction3d )"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Plane3d -> Vector3d -> Vector3d"
            },
            {
                "name": "normalize",
                "comment": " ",
                "type": "Vector3d -> Vector3d"
            },
            {
                "name": "on",
                "comment": " ",
                "type": "SketchPlane3d -> Vector2d -> Vector3d"
            },
            {
                "name": "perpendicularTo",
                "comment": " ",
                "type": "Vector3d -> Vector3d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame3d -> Vector3d -> Vector3d"
            },
            {
                "name": "projectInto",
                "comment": " ",
                "type": "SketchPlane3d -> Vector3d -> Vector2d"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Plane3d -> Vector3d -> Vector3d"
            },
            {
                "name": "projectionIn",
                "comment": " ",
                "type": "Direction3d -> Vector3d -> Vector3d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame3d -> Vector3d -> Vector3d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "Vector3d -> Vector3d"
            },
            {
                "name": "rotateAround",
                "comment": " ",
                "type": "Axis3d -> Float -> Vector3d -> Vector3d"
            },
            {
                "name": "scaleBy",
                "comment": " ",
                "type": "Float -> Vector3d -> Vector3d"
            },
            {
                "name": "squaredLength",
                "comment": " ",
                "type": "Vector3d -> Float"
            },
            {
                "name": "sum",
                "comment": " ",
                "type": "Vector3d -> Vector3d -> Vector3d"
            },
            {
                "name": "withLength",
                "comment": " ",
                "type": "Float -> Direction3d -> Vector3d"
            },
            {
                "name": "xComponent",
                "comment": " ",
                "type": "Vector3d -> Float"
            },
            {
                "name": "yComponent",
                "comment": " ",
                "type": "Vector3d -> Float"
            },
            {
                "name": "zComponent",
                "comment": " ",
                "type": "Vector3d -> Float"
            },
            {
                "name": "zero",
                "comment": " ",
                "type": "Vector3d"
            }
        ],
        "binops": []
    },
    {
        "name": "Direction2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Direction2d/icon.svg\" alt=\"Direction2d\" width=\"160\">\n\nA `Direction2d` represents a direction like 'up' or 'north' or 'forwards'. They\nare represented using X and Y components, and can be converted to vectors if\nnecessary, but should be thought of as conceptually different. Directions have\nseveral uses, such as:\n\n  - Constructing a vector from a length and direction\n  - Determining the component of a vector in a particular direction (for\n    example, finding the component of velocity in the up direction to get\n    vertical speed)\n  - Determining the (signed) angle between two directions\n  - Defining the orientation of an axis or reference frame\n\n@docs Direction2d\n\n\n# Constants\n\n@docs x, y, positiveX, negativeX, positiveY, negativeY\n\n\n# Constructors\n\n@docs from, perpendicularTo, orthonormalize, orthogonalize, unsafe\n\n\n# Conversions\n\n@docs fromAngle, toAngle\n\n\n# Properties\n\n@docs components, xComponent, yComponent\n\n\n# Comparison\n\n@docs equalWithin\n\n\n# Measurement\n\n@docs componentIn, angleFrom\n\n\n# Conversion\n\n@docs toVector\n\n\n# Transformations\n\n@docs reverse, rotateClockwise, rotateCounterclockwise, rotateBy, mirrorAcross\n\n\n# Coordinate conversions\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Direction2d",
                "comment": " ",
                "args": [],
                "type": "Direction2d"
            }
        ],
        "values": [
            {
                "name": "angleFrom",
                "comment": " ",
                "type": "Direction2d -> Direction2d -> Float"
            },
            {
                "name": "componentIn",
                "comment": " ",
                "type": "Direction2d -> Direction2d -> Float"
            },
            {
                "name": "components",
                "comment": " ",
                "type": "Direction2d -> ( Float, Float )"
            },
            {
                "name": "equalWithin",
                "comment": " ",
                "type": "Float -> Direction2d -> Direction2d -> Bool"
            },
            {
                "name": "from",
                "comment": " ",
                "type": "Point2d -> Point2d -> Maybe Direction2d"
            },
            {
                "name": "fromAngle",
                "comment": " ",
                "type": "Float -> Direction2d"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Direction2d -> Direction2d"
            },
            {
                "name": "negativeX",
                "comment": " ",
                "type": "Direction2d"
            },
            {
                "name": "negativeY",
                "comment": " ",
                "type": "Direction2d"
            },
            {
                "name": "orthogonalize",
                "comment": " ",
                "type": "Direction2d -> Direction2d -> Maybe ( Direction2d, Direction2d )"
            },
            {
                "name": "orthonormalize",
                "comment": " ",
                "type": "Vector2d -> Vector2d -> Maybe ( Direction2d, Direction2d )"
            },
            {
                "name": "perpendicularTo",
                "comment": " ",
                "type": "Direction2d -> Direction2d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Direction2d -> Direction2d"
            },
            {
                "name": "positiveX",
                "comment": " ",
                "type": "Direction2d"
            },
            {
                "name": "positiveY",
                "comment": " ",
                "type": "Direction2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Direction2d -> Direction2d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "Direction2d -> Direction2d"
            },
            {
                "name": "rotateBy",
                "comment": " ",
                "type": "Float -> Direction2d -> Direction2d"
            },
            {
                "name": "rotateClockwise",
                "comment": " ",
                "type": "Direction2d -> Direction2d"
            },
            {
                "name": "rotateCounterclockwise",
                "comment": " ",
                "type": "Direction2d -> Direction2d"
            },
            {
                "name": "toAngle",
                "comment": " ",
                "type": "Direction2d -> Float"
            },
            {
                "name": "toVector",
                "comment": " ",
                "type": "Direction2d -> Vector2d"
            },
            {
                "name": "unsafe",
                "comment": " ",
                "type": "( Float, Float ) -> Direction2d"
            },
            {
                "name": "x",
                "comment": " ",
                "type": "Direction2d"
            },
            {
                "name": "xComponent",
                "comment": " ",
                "type": "Direction2d -> Float"
            },
            {
                "name": "y",
                "comment": " ",
                "type": "Direction2d"
            },
            {
                "name": "yComponent",
                "comment": " ",
                "type": "Direction2d -> Float"
            }
        ],
        "binops": []
    },
    {
        "name": "Curve.ParameterValue",
        "comment": " Curves in `opensolid/geometry` are [parameterized](https://en.wikipedia.org/wiki/Parametric_equation)\nby a value that ranges from 0 to 1. A value of 0 corresponds to the start point\nof the curve and a value of 1 corresponds to the end point. This module contains\nfunctionality for:\n\n  - Constructing parameter values that are guaranteed to be in the range 0 to 1\n  - Constructing ranges of evenly-spaced parameter values\n\n@docs ParameterValue\n\n\n# Constants\n\n@docs zero, half, one\n\n\n# Conversion to and from `Float` values\n\n@docs value, clamped, checked, unsafe\n\n\n# Ranges\n\n@docs steps, leading, trailing, midpoints, range\n\n\n# Arithmetic\n\n@docs midpoint, oneMinus\n\n",
        "unions": [
            {
                "name": "ParameterValue",
                "comment": " ",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [],
        "values": [
            {
                "name": "checked",
                "comment": " ",
                "type": "Float -> Maybe ParameterValue"
            },
            {
                "name": "clamped",
                "comment": " ",
                "type": "Float -> ParameterValue"
            },
            {
                "name": "half",
                "comment": " ",
                "type": "ParameterValue"
            },
            {
                "name": "leading",
                "comment": " ",
                "type": "Int -> List ParameterValue"
            },
            {
                "name": "midpoint",
                "comment": " ",
                "type": "ParameterValue -> ParameterValue -> ParameterValue"
            },
            {
                "name": "midpoints",
                "comment": " ",
                "type": "Int -> List ParameterValue"
            },
            {
                "name": "one",
                "comment": " ",
                "type": "ParameterValue"
            },
            {
                "name": "oneMinus",
                "comment": " ",
                "type": "ParameterValue -> ParameterValue"
            },
            {
                "name": "range",
                "comment": " ",
                "type": "{ numSteps : Int, includeStart : Bool, includeEnd : Bool } -> List ParameterValue"
            },
            {
                "name": "steps",
                "comment": " ",
                "type": "Int -> List ParameterValue"
            },
            {
                "name": "trailing",
                "comment": " ",
                "type": "Int -> List ParameterValue"
            },
            {
                "name": "unsafe",
                "comment": " ",
                "type": "Float -> ParameterValue"
            },
            {
                "name": "value",
                "comment": " ",
                "type": "ParameterValue -> Float"
            },
            {
                "name": "zero",
                "comment": " ",
                "type": "ParameterValue"
            }
        ],
        "binops": []
    },
    {
        "name": "Vector2d",
        "comment": " <img src=\"https://ianmackenzie.github.io/elm-geometry/1.0.0/Vector2d/icon.svg\" alt=\"Vector2d\" width=\"160\">\n\nA `Vector2d` represents a quantity such as a displacement or velocity in 2D, and\nis defined by its X and Y components. This module contains a variety of\nvector-related functionality, such as\n\n  - Adding or subtracting vectors\n  - Finding the lengths of vectors\n  - Rotating vectors\n  - Converting vectors between different coordinate systems\n\nNote that unlike in many other geometry packages where vectors are used as a\ngeneral-purpose data type, `opensolid/geometry` has separate data types for\nvectors, directions and points. In most code it is actually more common to use\n`Point2d` and `Direction2d` than `Vector2d`, and much code can avoid working\ndirectly with `Vector2d` values at all!\n\n@docs Vector2d\n\n\n# Constants\n\n@docs zero\n\nAlthough there are no predefined constants for the vectors with components\n(1,&nbsp;0) and (0,&nbsp;1), in most cases you will actually want their\n`Direction2d` versions [`Direction2d.x`](Direction2d#x) and [`Direction2d.y`](Direction2d#y).\n\n\n# Constructors\n\n@docs fromComponents, fromPolarComponents, from, withLength, perpendicularTo, interpolateFrom\n\n\n# Properties\n\n@docs components, xComponent, yComponent, polarComponents, length, squaredLength, direction, lengthAndDirection\n\n\n# Comparison\n\n@docs equalWithin\n\n\n# Measurement\n\n@docs componentIn\n\n\n# Arithmetic\n\n@docs sum, difference, dotProduct, crossProduct\n\n\n# Transformations\n\nNote that for `mirrorAcross` and `projectOnto`, only the direction of the axis\naffects the result, since vectors are position-independent. Think of\nmirroring/projecting a vector across/onto an axis as moving the vector so its\ntail is on the axis, then mirroring/projecting its tip across/onto the axis.\n\n@docs reverse, normalize, scaleBy, rotateBy, rotateClockwise, rotateCounterclockwise, mirrorAcross, projectionIn, projectOnto\n\n\n# Coordinate conversions\n\nLike other transformations, coordinate conversions of vectors depend only on the\norientations of the relevant frames, not the positions of their origin points.\n\n@docs relativeTo, placeIn\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Vector2d",
                "comment": " ",
                "args": [],
                "type": "Vector2d"
            }
        ],
        "values": [
            {
                "name": "componentIn",
                "comment": " ",
                "type": "Direction2d -> Vector2d -> Float"
            },
            {
                "name": "components",
                "comment": " ",
                "type": "Vector2d -> ( Float, Float )"
            },
            {
                "name": "crossProduct",
                "comment": " ",
                "type": "Vector2d -> Vector2d -> Float"
            },
            {
                "name": "difference",
                "comment": " ",
                "type": "Vector2d -> Vector2d -> Vector2d"
            },
            {
                "name": "direction",
                "comment": " ",
                "type": "Vector2d -> Maybe Direction2d"
            },
            {
                "name": "dotProduct",
                "comment": " ",
                "type": "Vector2d -> Vector2d -> Float"
            },
            {
                "name": "equalWithin",
                "comment": " ",
                "type": "Float -> Vector2d -> Vector2d -> Bool"
            },
            {
                "name": "from",
                "comment": " ",
                "type": "Point2d -> Point2d -> Vector2d"
            },
            {
                "name": "fromComponents",
                "comment": " ",
                "type": "( Float, Float ) -> Vector2d"
            },
            {
                "name": "fromPolarComponents",
                "comment": " ",
                "type": "( Float, Float ) -> Vector2d"
            },
            {
                "name": "interpolateFrom",
                "comment": " ",
                "type": "Vector2d -> Vector2d -> Float -> Vector2d"
            },
            {
                "name": "length",
                "comment": " ",
                "type": "Vector2d -> Float"
            },
            {
                "name": "lengthAndDirection",
                "comment": " ",
                "type": "Vector2d -> Maybe ( Float, Direction2d )"
            },
            {
                "name": "mirrorAcross",
                "comment": " ",
                "type": "Axis2d -> Vector2d -> Vector2d"
            },
            {
                "name": "normalize",
                "comment": " ",
                "type": "Vector2d -> Vector2d"
            },
            {
                "name": "perpendicularTo",
                "comment": " ",
                "type": "Vector2d -> Vector2d"
            },
            {
                "name": "placeIn",
                "comment": " ",
                "type": "Frame2d -> Vector2d -> Vector2d"
            },
            {
                "name": "polarComponents",
                "comment": " ",
                "type": "Vector2d -> ( Float, Float )"
            },
            {
                "name": "projectOnto",
                "comment": " ",
                "type": "Axis2d -> Vector2d -> Vector2d"
            },
            {
                "name": "projectionIn",
                "comment": " ",
                "type": "Direction2d -> Vector2d -> Vector2d"
            },
            {
                "name": "relativeTo",
                "comment": " ",
                "type": "Frame2d -> Vector2d -> Vector2d"
            },
            {
                "name": "reverse",
                "comment": " ",
                "type": "Vector2d -> Vector2d"
            },
            {
                "name": "rotateBy",
                "comment": " ",
                "type": "Float -> Vector2d -> Vector2d"
            },
            {
                "name": "rotateClockwise",
                "comment": " ",
                "type": "Vector2d -> Vector2d"
            },
            {
                "name": "rotateCounterclockwise",
                "comment": " ",
                "type": "Vector2d -> Vector2d"
            },
            {
                "name": "scaleBy",
                "comment": " ",
                "type": "Float -> Vector2d -> Vector2d"
            },
            {
                "name": "squaredLength",
                "comment": " ",
                "type": "Vector2d -> Float"
            },
            {
                "name": "sum",
                "comment": " ",
                "type": "Vector2d -> Vector2d -> Vector2d"
            },
            {
                "name": "withLength",
                "comment": " ",
                "type": "Float -> Direction2d -> Vector2d"
            },
            {
                "name": "xComponent",
                "comment": " ",
                "type": "Vector2d -> Float"
            },
            {
                "name": "yComponent",
                "comment": " ",
                "type": "Vector2d -> Float"
            },
            {
                "name": "zero",
                "comment": " ",
                "type": "Vector2d"
            }
        ],
        "binops": []
    },
    {
        "name": "Arc.SweptAngle",
        "comment": " When constructing circular or elliptical arcs, it is sometimes necessary to\nspecify which of several possible arcs you want. For example, if you ask for a\ncircular arc from the point (1, 0) to the point (0, 1) with a radius of 1, there\nare four possible solutions:\n\n  - An arc with a swept angle of 90 degrees, with center point at (0, 0)\n  - An arc with a swept angle of -270 degrees, with center point at (0, 0)\n  - An arc with a swept angle of -90 degrees, with center point at (1, 1)\n  - An Arc with a swept angle of 270 degrees, with center point at (1, 1)\n\nThe `SweptAngle` type is used in these cases to specify which arc you want.\n\n@docs SweptAngle, smallPositive, smallNegative, largePositive, largeNegative\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "SweptAngle",
                "comment": " ",
                "args": [],
                "type": "SweptAngle"
            }
        ],
        "values": [
            {
                "name": "largeNegative",
                "comment": " ",
                "type": "SweptAngle"
            },
            {
                "name": "largePositive",
                "comment": " ",
                "type": "SweptAngle"
            },
            {
                "name": "smallNegative",
                "comment": " ",
                "type": "SweptAngle"
            },
            {
                "name": "smallPositive",
                "comment": " ",
                "type": "SweptAngle"
            }
        ],
        "binops": []
    }
]