circle_through_points

Function
circle_through_points(
    states: list[State],
    p1: Point2D,
    p2: Point2D,
    p3: Point2D,
    rotation: float = 0,
    clockwise: bool = True,
    alignment: ElementAlignment = <ElementAlignment.PRESERVE: 'preserve'>,
    element_rotation_offset: float = 0,
    angles: Optional[List[float]] = None,
    radius_fn: Optional[Callable[[int, float], float]] = None,
    element_rotation_offset_fn: Optional[Callable[[float], float]] = None
) -> list[State]

Arrange states in a circular formation passing through three given points.

Calculates the circumcircle (circle passing through three points) and arranges states along it. This is useful when you know specific points the circle should pass through rather than its center and radius.

Parameters

states
List of states to arrange
p1
Point 1
p2
Point 2
p3
Point 3
rotation
Rotation offset in degrees
clockwise
If True, arrange clockwise; if False, counterclockwise
alignment
How to align each element relative to the circle
element_rotation_offset
Additional rotation in degrees added to the alignment base
angles
Optional list of specific angles in degrees for each element
radius_fn
Function that takes (index, default_radius) and returns custom radius
element_rotation_offset_fn
Function that takes position angle and returns rotation offset

Returns

New list of states with circular positions Raises: ValueError: If the three points are collinear (no unique circle) ValueError: If any two points are identical

Examples

# Circle through three points forming a triangle
    circle_through_points(states, 0, 100, 100, 0, 0, -100)

    # Right triangle points
    circle_through_points(states, 0, 0, 100, 0, 0, 100)