Polytopes
Abstract
Meshes.Polytope — Type
Polytope{K,M,CRS}We say that a geometry is a K-polytope when it is a collection of "flat" sides that constitute a K-dimensional subspace. They are called chain, polygon and polyhedron respectively for 1D (K=1), 2D (K=2) and 3D (K=3) subspaces. The parameter K is also known as the rank or parametric dimension of the polytope (https://en.wikipedia.org/wiki/Abstract_polytope).
The term polytope expresses a particular combinatorial structure. A polyhedron, for example, can be decomposed into faces. Each face can then be decomposed into edges, and edges into vertices. Some conventions act as a mapping between vertices and higher dimensional features (edges, faces, cells...), removing the need to store all features.
Additionally, the following property must hold in order for a geometry to be considered a polytope: the boundary of a (K+1)-polytope is a collection of K-polytopes, which may have (K-1)-polytopes in common. See https://en.wikipedia.org/wiki/Polytope.
Notes
Type aliases are Chain, Polygon, Polyhedron.
Meshes.Chain — Type
Chain{M,CRS}A chain is a 1-polytope, i.e. a polytope with parametric dimension 1. See https://en.wikipedia.org/wiki/Polygonal_chain.
Meshes.Polygon — Type
Polygon{M,CRS}A polygon is a 2-polytope, i.e. a polytope with parametric dimension 2.
Meshes.Polyhedron — Type
Polyhedron{M,CRS}A polyhedron is a 3-polytope, i.e. a polytope with parametric dimension 3.
See also Tetrahedron, Hexahedron and Pyramid.
Concrete
Segment
Meshes.Segment — Type
Segment(p1, p2)An oriented line segment with end points p1, p2. The segment can be called as s(t) with t between 0 and 1 to interpolate linearly between its endpoints.
Segment((0, 0), (1, 1)) |> viz
Rope
Meshes.Rope — Type
Rope(p1, p2, ..., pn)An open polygonal chain from a sequence of points p1, p2, ..., pn.
Rope((0.0, 0.0), (1.0, 0.5), (1.0, 1.0), (2.0, 0.0)) |> viz
Ring
Meshes.Ring — Type
Ring(p1, p2, ..., pn)A closed polygonal chain from a sequence of points p1, p2, ..., pn.
Ring((0.0, 0.0), (1.0, 0.5), (1.0, 1.0), (2.0, 0.0)) |> viz
Ngon
Meshes.Ngon — Type
Ngon(p₁, p₂, ..., pₙ)A N-gon is a polygon with N ≥ 3 vertices p₁, p₂, ..., pₙ oriented counter-clockwise (CCW). In this case the number of vertices is fixed and known at compile time. Examples of N-gon are Triangle (N=3), Quadrangle (N=4), Pentagon (N=5), etc.
Notes
Although the number of vertices N is known at compile time, we use abstract vectors to store the list of vertices. This design allows constructing N-gon from views of global vectors without expensive memory allocations.
Type aliases are Triangle, Quadrangle, Pentagon, Hexagon, Heptagon, Octagon, Nonagon, Decagon.
Triangle((0, 0), (1, 0), (0, 1)) |> viz
PolyArea
Meshes.PolyArea — Type
PolyArea(outer)
PolyArea([outer, inner₁, inner₂, ..., innerₖ])A polygonal area with outer ring, and optional inner rings inner₁, inner₂, ..., innerₖ.
Rings can be a vector of Point or a vector of tuples with coordinates for convenience, in which case the first point should not be repeated at the end of the vector.
outer = [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0)]
hole1 = [(0.2, 0.2), (0.2, 0.4), (0.4, 0.4), (0.4, 0.2)]
hole2 = [(0.6, 0.2), (0.6, 0.4), (0.8, 0.4), (0.8, 0.2)]
PolyArea([outer, hole1, hole2]) |> viz
Tetrahedron
Meshes.Tetrahedron — Type
Tetrahedron(p1, p2, p3, p4)A tetrahedron with points p1, p2, p3, p4.
Tetrahedron((0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)) |> viz
Hexahedron
Meshes.Hexahedron — Type
Hexahedron(p1, p2, ..., p8)A hexahedron with points p1, p2, ..., p8.
Hexahedron(
(0, 0, 0),
(1, 0, 0),
(1, 1, 0),
(0, 1, 0),
(0, 0, 1),
(1, 0, 1),
(1, 1, 1),
(0, 1, 1)
) |> viz
Pyramid
Meshes.Pyramid — Type
Pyramid(p1, p2, p3, p4, p5)A pyramid with points p1, p2, p3, p4, p5.
The first four points form the base and the last is the apex.
Pyramid(
(0, 0, 0),
(1, 0, 0),
(1, 1, 0),
(0, 1, 0),
(0, 0, 1)
) |> viz
Wedge
Meshes.Wedge — Type
Wedge(p1, p2, p3, p4, p5, p6)A Wedge with points p1, p2, p3, p4, p5, p6.
Wedge(
(0, 0, 0),
(1, 0, 0),
(0, 1, 0),
(0, 0, 1),
(1, 0, 1),
(0, 1, 1)
) |> viz