Polytopes

Abstract

Meshes.PolytopeType
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.
source

Concrete

Segment

Meshes.SegmentType
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.

See also Rope, Ring, Line.

source
Segment((0., 0.), (1.,1.)) |> viz
Example block output

Rope

Meshes.RopeType
Rope(p1, p2, ..., pn)

An open polygonal chain from a sequence of points p1, p2, ..., pn.

See also Chain and Ring.

source
Rope((0.,0.), (1.,0.5), (1.,1.), (2.,0.)) |> viz
Example block output

Ring

Meshes.RingType
Ring(p1, p2, ..., pn)

A closed polygonal chain from a sequence of points p1, p2, ..., pn.

See also Chain and Rope.

source
Ring((0.,0.), (1.,0.5), (1.,1.), (2.,0.)) |> viz
Example block output

Ngon

Meshes.NgonType
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.

source
Triangle((0.,0.), (1.,0.), (0.,1.)) |> viz
Example block output

PolyArea

Meshes.PolyAreaType
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.

source
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
Example block output

Tetrahedron

Tetrahedron((0,0,0),(1,0,0),(0,1,0),(0,0,1)) |> viz
Example block output

Hexahedron

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
Example block output

Pyramid

Pyramid((0,0,0),(1,0,0),(1,1,0),(0,1,0),(0,0,1)) |> viz
Example block output