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, 0.0), (1.0, 0.5), (1.0, 1.0), (2.0, 0.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, 0.0), (1.0, 0.5), (1.0, 1.0), (2.0, 0.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, 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
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

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

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

Wedge

Meshes.WedgeType
Wedge(p1, p2, p3, p4, p5, p6)

A Wedge with points p1, p2, p3, p4, p5, p6.

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