radial_grid_between_radii

Function
radial_grid_between_radii(
    states: list[State],
    center: Point2D = Point2D(x=0, y=0),
    inner_radius: float = 50,
    outer_radius: float = 200,
    rings: int = 3,
    segments: int = 8,
    rotation: float = 0,
    alignment: ElementAlignment = <ElementAlignment.PRESERVE: 'preserve'>,
    element_rotation_offset: float = 0,
    element_rotation_offset_fn: Optional[Callable[[int, int, float], float]] = None
) -> list[State]

Arrange states in a radial grid with specified inner and outer radii.

Alternative specification to radial_grid() for users who think in terms of target outer radius rather than ring spacing. The rings will be evenly distributed between the inner and outer radii.

Parameters

states
List of states to arrange
cx
X coordinate of grid center
cy
Y coordinate of grid center
inner_radius
Radius of innermost ring
outer_radius
Radius of outermost ring
rings
Number of concentric rings
segments
Number of angular segments per ring
rotation
Base rotation in degrees
alignment
How to align each element
element_rotation_offset
Additional rotation offset
element_rotation_offset_fn
Function(ring, seg, angle) -> rotation offset

Returns

New list of states with radial grid positions Raises: ValueError: If outer_radius <= inner_radius ValueError: If rings < 1

Examples

# Grid from radius 50 to 200 with 4 rings
    radial_grid_between_radii(states, inner_radius=50, outer_radius=200, rings=4, segments=8)

    # Equivalent to radial_grid():
    # radial_grid_between_radii(states, inner_radius=50, outer_radius=200, rings=3)
    # == radial_grid(states, inner_radius=50, ring_spacing=75, rings=3)