A Triangle3d represents a triangle in 3D space, and is defined by its
three vertices. This module contains triangle-related functionality such as:
Construct a triangle from its three vertices:
exampleTriangle =
Triangle3d.fromVertices
( Point3d.meters 1 0 0
, Point3d.meters 2 0 0
, Point3d.meters 2 1 3
)Construct a triangle from the first point, to the second, to the third:
exampleTriangle =
Triangle3d.from
(Point3d.meters 1 0 0)
(Point3d.meters 2 0 0)
(Point3d.meters 2 1 3)Useful with map3 functions such as Json.Decode.map3.
Construct a 3D triangle lying on a sketch plane by providing a 2D triangle specified in XY coordinates within the sketch plane.
Triangle3d.on SketchPlane3d.xz <|
Triangle2d.from
(Point2d.meters 1 1)
(Point2d.meters 2 1)
(Point2d.meters 1 3)
--> Triangle3d.from
--> (Point3d.meters 1 0 1)
--> (Point3d.meters 2 0 1)
--> (Point3d.meters 1 0 3)Get the vertices of a triangle.
( p1, p2, p3 ) =
Triangle3d.vertices exampleTriangleGet the edges of a triangle: from the first vertex to the second, from the second to the third, and from the third back to the first.
( e1, e2, e3 ) =
Triangle3d.edges exampleTriangle
--> e1 =
--> LineSegment3d.from
--> (Point3d.meters 1 0 0)
--> (Point3d.meters 2 0 0)
-->
--> e2 =
--> LineSegment3d.from
--> (Point3d.meters 2 0 0)
--> (Point3d.meters 2 1 3)
-->
--> e3 =
--> LineSegment3d.from
--> (Point3d.meters 2 1 3)
--> (Point3d.meters 1 0 0)Get the centroid (center of mass) of a triangle.
Triangle3d.centroid exampleTriangle
--> Point3d.meters 1.6667 0.6667 1Get the area of a triangle. This value is always positive.
Attempt to find the normal direction to a triangle. The resulting direction
will be oriented such that the triangle vertices are in counterclockwise order
around it according to the right-hand rule. If the triangle is degenerate (its
three vertices are collinear), returns Nothing.
Triangle3d.normalDirection exampleTriangle
--> Just (Direction3d.yz (Angle.degrees 161.57))Get the minimal bounding box containing a given triangle.
Triangle3d.boundingBox exampleTriangle
--> BoundingBox3d.from
--> (Point3d.meters 1 0 0)
--> (Point3d.meters 2 1 3)Attempt to find the circumcircle of a triangle, a circle that passes through each of the triangle's vertices;
Triangle3d.circumcircle triangleis equivalent to
let
( p1, p2, p3 ) =
Triangle3d.vertices triangle
in
Circle3d.throughPoints p1 p2 p3If the triangle is degenerate (its three vertices are collinear), returns
Nothing.
These transformations generally behave just like the ones in the Point3d
module.
Scale a triangle about a given point by a given scale.
Rotate a triangle around a given axis by a given angle.
Translate a triangle by a given displacement.
Translate a triangle in a given direction by a given distance.
Mirror a triangle across a given plane.
Find the orthographic projection of a triangle onto a plane.
Transform each vertex of a triangle by a given function and create a new
triangle from the resulting points. Most other transformation functions can be
defined in terms of mapVertices; for example,
Triangle3d.projectOnto planeis equivalent to
Triangle3d.mapVertices (Point3d.projectOnto plane)Convert a triangle from one units type to another, by providing a conversion factor given as a rate of change of destination units with respect to source units.
Convert a triangle from one units type to another, by providing an 'inverse' conversion factor given as a rate of change of source units with respect to destination units.
Take a triangle defined in global coordinates, and return it expressed in local coordinates relative to a given reference frame.
Take a triangle considered to be defined in local coordinates relative to a given reference frame, and return that triangle expressed in global coordinates.
Project a triangle into a given sketch plane. Conceptually, this finds the orthographic projection of the triangle onto the plane and then expresses the projected triangle in 2D sketch coordinates.