Skip to contents

Convenience helpers that build an annulus from deterministically irregular concentric rings with varying sample counts, stitch adjacent rings into a locally triangulated graph, and then optionally lift the resulting irregular planar parameterization into \(\mathbb{R}^3\). This provides a non-lattice annulus family with boundary and nonuniform local valence.

Usage

irregular.annulus.surface.graph(
  rings = 6,
  outer.count = 28,
  outer.radius = 1,
  inner.radius = 0.45,
  count.irregularity = 0.2,
  radial.irregularity = 0.35,
  phase.twist = 0.35,
  surface = c("flat", "saddle", "paraboloid", "ripple", "folded"),
  amplitude = 0.6,
  freq.u = 1,
  freq.v = 1,
  normalize = c("median", "mean", "none")
)

Arguments

rings

Number of concentric sample rings, including the inner and outer boundary cycles.

outer.count

Approximate number of vertices on the outer boundary.

outer.radius

Positive outer annulus radius.

inner.radius

Positive inner annulus radius.

count.irregularity

Irregularity level for the per-ring sample counts. Must lie in [0, 1).

radial.irregularity

Irregularity level for within-ring radial perturbations. Must lie in [0, 1].

phase.twist

Finite angular phase offset used to desynchronize neighboring rings.

surface

Geometry family used for the 3D lift. One of "flat", "saddle", "paraboloid", "ripple", or "folded".

amplitude

Finite deformation amplitude.

freq.u

Positive ripple frequency in the first planar coordinate. Used only when surface = "ripple".

freq.v

Positive ripple frequency in the second planar coordinate. Used only when surface = "ripple".

normalize

Normalization applied to the induced edge lengths. One of "median", "mean", or "none".

Value

The coords_surface component is an n x 3 numeric matrix with columns x, y, and z.

irregular.annulus.surface.graph() returns a list with components:

  • edges: the irregular annulus edges,

  • n: number of vertices,

  • edge_weights: induced positive edge lengths,

  • coords_surface: the 3D embedding,

  • coords_param: the irregular planar annulus coordinates,

  • weight_scale: the normalization constant applied to the raw edge lengths,

  • family: always "irregular.annulus",

  • surface: the chosen surface name,

  • rings: number of concentric rings,

  • ring_sizes: sample counts on each ring,

  • label: a human-readable family label.

Examples

annulus <- irregular.annulus.surface.graph(rings = 3, outer.count = 12)