Polytopes
Abstract
Meshes.Polytope
— TypePolytope{K,Dim,T}
We say that a geometry is a K-polytope when it is a collection of "flat" sides that constitue a K
-dimensional subspace. They are called polygon and polyhedron respectively for 2D (K=2
) and 3D (K=3
) subspaces, embedded in a Dim
-dimensional space. 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
Polygon
,Polyhedron
.
Meshes.Polygon
— TypePolygon{Dim,T}
A polygon is a 2-polytope, i.e. a polytope with parametric dimension 2.
Meshes.Polyhedron
— TypePolyhedron{Dim,T}
A polyhedron is a 3-polytope, i.e. a polytope with parametric dimension 3.
Concrete
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.
See also Line
.
s = Segment((0., 0.), (1.,1.))
viz(s)
Meshes.Ngon
— TypeNgon(p1, p2, ..., pN)
A N-gon is a polygon with N
vertices p1
, p2
, ..., pN
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
.
t = Triangle((0.,0.), (1.,0.), (0.,1.))
viz(t)
Meshes.Chain
— TypeChain(p1, p2, ..., pn)
A polygonal chain from a sequence of points p1
, p2
, ..., pn
. See https://en.wikipedia.org/wiki/Polygonal_chain.
c = Chain((0.,0.), (1.,0.5), (1.,1.), (2.,0.))
viz(c)
Meshes.PolyArea
— TypePolyArea(outer, [inner1, inner2, ..., innerk]; fix=true)
A polygonal area with outer
chain, and optional inner chains inner1
, inner2
, ..., innerk
.
Chains can be a vector of Point
or a vector of tuples with coordinates for convenience.
The option fix
tries to correct issues with polygons in the real world, including issues with:
orientation
- Most algorithms assume that the outer ring is oriented counter-clockwise (CCW) and that all inner rings are oriented clockwise (CW).degeneracy
- Sometimes data is shared with degenerate rings (i.e. only 2 vertices).
outer = [(0.0,0.0),(1.0,0.0),(1.0,1.0),(0.0,1.0),(0.0,0.0)]
hole1 = [(0.2,0.2),(0.4,0.2),(0.4,0.4),(0.2,0.4),(0.2,0.2)]
hole2 = [(0.6,0.2),(0.8,0.2),(0.8,0.4),(0.6,0.4),(0.6,0.2)]
poly = PolyArea(outer, [hole1, hole2])
viz(poly)
Meshes.Tetrahedron
— TypeTetrahedron(p1, p2, p3, p4)
A tetrahedron with points p1
, p2
, p3
, p4
.
t = Tetrahedron([(0,0,0),(1,0,0),(0,1,0),(0,0,1)])
viz(t)
Meshes.Hexahedron
— TypeHexahedron(p1, p2, ..., p8)
A hexahedron with points p1
, p2
, ..., p8
.
h = 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(h)
Meshes.Pyramid
— TypePyramid(p1, p2, p3, p4, p5)
A pyramid with points p1
, p2
, p3
, p4
, p5
.
p = Pyramid([(0,0,0),(1,0,0),(1,1,0),(0,1,0),(0,0,1)])
viz(p)