Polytopes
Abstract
Meshes.Polytope
— TypePolytope{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
— TypeChain{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
— TypePolygon{M,CRS}
A polygon is a 2-polytope, i.e. a polytope with parametric dimension 2.
Meshes.Polyhedron
— TypePolyhedron{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
— TypeSegment(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
— TypeRope(p1, p2, ..., pn)
An open polygonal chain from a sequence of points p1
, p2
, ..., pn
.
Rope((0.,0.), (1.,0.5), (1.,1.), (2.,0.)) |> viz
Ring
Meshes.Ring
— TypeRing(p1, p2, ..., pn)
A closed polygonal chain from a sequence of points p1
, p2
, ..., pn
.
Ring((0.,0.), (1.,0.5), (1.,1.), (2.,0.)) |> viz
Ngon
Meshes.Ngon
— TypeNgon(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
— TypePolyArea(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), (1, 0), (1, 1), (0, 1)]
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)]
poly = PolyArea([outer, hole1, hole2]) |> viz
Tetrahedron
Meshes.Tetrahedron
— TypeTetrahedron(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
— TypeHexahedron(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
— TypePyramid(p1, p2, p3, p4, p5)
A pyramid with points p1
, p2
, p3
, p4
, p5
.
Pyramid((0,0,0),(1,0,0),(1,1,0),(0,1,0),(0,0,1)) |> viz