[
    {
        "name": "Geometry.Interop.LinearAlgebra.Point3d",
        "comment": " Conversion and transformation functions for `Point3d`.\n\n@docs toVec3, toVec4, fromVec3, transformBy\n\n",
        "unions": [],
        "aliases": [],
        "values": [
            {
                "name": "fromVec3",
                "comment": " Convert a `Vec3` to a `Point3d`.\n\n    Point3d.fromVec3 (vec3 2 1 3)\n    --> Point3d.fromCoordinates ( 2, 1, 3 )\n\n",
                "type": "Vec3 -> Point3d"
            },
            {
                "name": "toVec3",
                "comment": " Convert a `Point3d` to a `Vec3`.\n\n    Point3d.toVec3 (Point3d.fromCoordinates ( 2, 1, 3 ))\n    --> Vector3.vec3 2 1 3\n\n",
                "type": "Point3d -> Vec3"
            },
            {
                "name": "toVec4",
                "comment": " Convert a `Point3d` to a `Vec4`. The resulting `Vec4` will have a W\ncomponent of 1 so that it [is affected by translation](http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/)\nwhen performing matrix transformations.\n\n    Point3d.toVec4 (Point3d.fromCoordinates ( 2, 1, 3 ))\n    --> vec4 2 1 3 1\n\n",
                "type": "Point3d -> Vec4"
            },
            {
                "name": "transformBy",
                "comment": " Transform a `Point3d` by a `Mat4`;\n\n    point\n        |> Point3d.transformBy matrix\n\nis equivalent to\n\n    point\n        |> Point3d.toVec3\n        |> Matrix4.transform matrix\n        |> Point3d.fromVec3\n\nFor example:\n\n    point =\n        Point3d.fromCoordinates ( 2, 1, 3 )\n\n    matrix =\n        Matrix4.makeTranslate3 3 4 5\n\n    Point3d.transformBy matrix point\n    --> Point3d.fromCoordinates ( 5, 5, 8 )\n\n",
                "type": "Mat4 -> Point3d -> Point3d"
            }
        ],
        "binops": []
    },
    {
        "name": "Geometry.Interop.LinearAlgebra.Vector2d",
        "comment": " Conversion functions for `Vector2d`.\n\n@docs toVec2, fromVec2\n\n",
        "unions": [],
        "aliases": [],
        "values": [
            {
                "name": "fromVec2",
                "comment": " Convert a `Vec2` to a `Vector2d`.\n\n    Vector2d.fromVec2 (vec2 2 3)\n    --> Vector2d.fromComponents ( 2, 3 )\n\n",
                "type": "Vec2 -> Vector2d"
            },
            {
                "name": "toVec2",
                "comment": " Convert a `Vector2d` to a `Vec2`.\n\n    Vector2d.toVec2 (Vector2d.fromComponents ( 2, 3 ))\n    --> vec2 2 3\n\n",
                "type": "Vector2d -> Vec2"
            }
        ],
        "binops": []
    },
    {
        "name": "Geometry.Interop.LinearAlgebra.Vector3d",
        "comment": " Conversion and transformation functions for `Vector3d`.\n\n@docs toVec3, toVec4, fromVec3, transformBy\n\n",
        "unions": [],
        "aliases": [],
        "values": [
            {
                "name": "fromVec3",
                "comment": " Convert a `Vec3` to a `Vector3d`.\n\n    Vector3d.fromVec3 (Vector3.vec3 2 1 3)\n    --> Vector3d ( 2, 1, 3 )\n\n",
                "type": "Vec3 -> Vector3d"
            },
            {
                "name": "toVec3",
                "comment": " Convert a `Vector3d` to a `Vec3`.\n\n    Vector3d.toVec3 (Vector3d.fromComponents ( 2, 1, 3 ))\n    --> Vector3.vec3 2 1 3\n\n",
                "type": "Vector3d -> Vec3"
            },
            {
                "name": "toVec4",
                "comment": " Convert a `Vector3d` to a `Vec4`. The resulting `Vec4` will have a W\ncomponent of 0 so that it [is not affected by translation](http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/)\nwhen performing matrix transformations.\n\n    Vector3d.toVec4 (Vector3d.fromComponents ( 2, 1, 3 ))\n    --> vec4 2 1 3 0\n\n",
                "type": "Vector3d -> Vec4"
            },
            {
                "name": "transformBy",
                "comment": " Transform a `Vector3d` by a `Mat4`; note that\n\n    vector\n        |> Vector3d.transformBy matrix\n\nis similar to but _not_ in general equivalent to\n\n    vector\n        |> Vector3d.toVec3\n        |> Matrix4.transform matrix\n        |> Vector3d.fromVec3\n\nsince `Matrix4.transform` implicitly assumes that the given argument represents\na point, not a vector, and therefore applies translation to it. Transforming a\nvector by a 4x4 matrix should in fact ignore any translation component of the\nmatrix, which this function does. For example:\n\n    vector =\n        Vector3d.fromComponents ( 2, 1, 3 )\n\n    -- 90 degree rotation around the Z axis,\n    -- followed by a translation\n    matrix =\n        Matrix4.makeTranslate3 5 5 5\n            |> Matrix4.rotate (degrees 90) Vector3.k\n\n    Vector3d.transformBy matrix vector\n    --> Vector3d.fromComponents ( -1, 2, 3 )\n\n",
                "type": "Mat4 -> Vector3d -> Vector3d"
            }
        ],
        "binops": []
    },
    {
        "name": "Geometry.Interop.LinearAlgebra.Direction3d",
        "comment": " Conversion functions for `Direction3d`.\n\n@docs toVec3, toVec4\n\n",
        "unions": [],
        "aliases": [],
        "values": [
            {
                "name": "toVec3",
                "comment": " Convert a `Direction3d` to a `Vec3`.\n\n    Direction3d.toVec3 Direction3d.y\n    --> vec3 0 1 0\n\n",
                "type": "Direction3d -> Vec3"
            },
            {
                "name": "toVec4",
                "comment": " Convert a `Direction3d` to a `Vec4`. The resulting `Vec4` will have a W\ncomponent of 0 so that it [is not affected by translation](http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/)\nwhen performing matrix transformations.\n\n    Direction3d.toVec4 Direction3d.y\n    --> vec4 0 1 0 0\n\n",
                "type": "Direction3d -> Vec4"
            }
        ],
        "binops": []
    },
    {
        "name": "Geometry.Interop.LinearAlgebra.Point2d",
        "comment": " Conversion functions for `Point2d`.\n\n@docs toVec2, fromVec2\n\n",
        "unions": [],
        "aliases": [],
        "values": [
            {
                "name": "fromVec2",
                "comment": " Convert a `Vec2` to a `Point2d`.\n\n    Point2d.fromVec2 (vec2 2 3)\n    --> Point2d.fromCoordinates ( 2, 3 )\n\n",
                "type": "Vec2 -> Point2d"
            },
            {
                "name": "toVec2",
                "comment": " Convert a `Point2d` to a `Vec2`.\n\n    Point2d.toVec2 (Point2d.fromCoordinates ( 2, 3 ))\n    --> vec2 2 3\n\n",
                "type": "Point2d -> Vec2"
            }
        ],
        "binops": []
    },
    {
        "name": "Geometry.Interop.LinearAlgebra.Frame3d",
        "comment": " Conversion functions for `Frame3d`.\n\n@docs toMat4\n\n",
        "unions": [],
        "aliases": [],
        "values": [
            {
                "name": "toMat4",
                "comment": " Convert a `Frame3d` to a `Mat4`. The resulting matrix can be thought of in\na couple of ways:\n\n  - It is the transformation matrix that takes the global XYZ frame and\n    transforms it to the given frame\n  - It is the transformation matrix from local coordinates in the given frame\n    to global coordinates\n\nThe first bullet implies that something like\n\n    Frame3d.xyz\n        |> Frame3d.translateBy displacement\n        |> Frame3d.rotateAround axis angle\n        |> Frame3d.mirrorAcross plane\n        |> Frame3d.toMat4\n\ngives you a transformation matrix that is equivalent to applying the given\ndisplacement, then the given rotation, then the given mirror. The second bullet\nmeans that, for example,\n\n    Point3d.placeIn frame\n\nis equivalent to\n\n    Point3d.transformBy (Frame3d.toMat4 frame)\n\nand\n\n    Point3d.relativeTo frame\n\nis equivalent to\n\n    Point3d.transformBy <|\n        Matrix4.inverseOrthonormal\n            (Frame3d.toMat4 frame)\n\n",
                "type": "Frame3d -> Mat4"
            }
        ],
        "binops": []
    },
    {
        "name": "Geometry.Interop.LinearAlgebra.Direction2d",
        "comment": " Conversion functions for `Direction2d`.\n\n@docs toVec2\n\n",
        "unions": [],
        "aliases": [],
        "values": [
            {
                "name": "toVec2",
                "comment": " Convert a `Direction2d` to a `Vec2`.\n\n    Direction2d.toVec2 Direction2d.x\n    --> vec2 1 0\n\n",
                "type": "Direction2d -> Vec2"
            }
        ],
        "binops": []
    }
]