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.embedding(
  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
)

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

irregular.annulus.surface.embedding() returns 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.