Circle
SUMMARY
A circle in 2D space.
python
from telekinesis import datatypes
circle = datatypes.Circle(center=[50.0, 60.0], radius=10.0)Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
center | list[float] | np.ndarray | Required | Circle center: [x, y]. |
radius | float | Required | Circle radius, must be >= 0. |
Raises
| Exception | Condition |
|---|---|
TypeError | center can't be converted to a float32 array, or radius can't be converted to a float |
ValueError | center's shape (after conversion) isn't (2,), center contains a non-finite value (NaN/Inf), radius is non-finite, or radius < 0 |
Attributes
| Attribute | Type | Description |
|---|---|---|
center | np.ndarray | Defensive copy of the circle center, shape (2,), float32. |
radius | float | The circle radius. |
Methods
| Method | Type | Description |
|---|---|---|
Circle.coerce(value) | Circle | Converts a dict with center and radius keys into a Circle. If value is already a Circle, it is returned unchanged. |
Operators
| Operation | Behavior |
|---|---|
circle == other | True only if other is a Circle with an equal center (elementwise) and an equal radius. NotImplemented (so False) for any other type. |
repr(circle) | Circle(center=[50. 60.], radius=10.0) — verified empirically. |
Visualization
python
import rerun as rr
# Your code block
# ....
rr.init("circle_example", spawn=True)
datatypes.visualize(circle, entity_path="/circle", label="Circle")Example
python
"""Demonstrates the Telekinesis Circle datatype."""
import time
import numpy as np
import rerun as rr
from loguru import logger
from telekinesis import datatypes
def circle_example():
"""Demonstrate creation, inspection, operations, visualization, and serialization."""
# ======================= Create ============================================
circle = datatypes.Circle(center=[50.0, 60.0], radius=10.0)
logger.info(f"Original Circle: {circle}")
circle_from_dict = datatypes.Circle.coerce({"center": [20.0, 30.0], "radius": 5.0})
logger.info(f"Circle coerced from dict: {circle_from_dict}")
# ======================= Inspect ===========================================
logger.info(f"center={circle.center}")
logger.info(f"radius={circle.radius}")
# ======================= Operations =========================================
# Circle is immutable; translate and scale by constructing a new instance.
translated_circle = datatypes.Circle(
center=circle.center + np.array([5.0, 5.0], dtype=np.float32), radius=circle.radius
)
logger.info(f"Translated Circle: {translated_circle}")
scaled_circle = datatypes.Circle(
center=translated_circle.center, radius=translated_circle.radius * 1.5
)
logger.info(f"Scaled Circle: {scaled_circle}")
# ======================= Visualize =========================================
rr.init("circle_example", spawn=True)
datatypes.visualize(circle, entity_path="/circle/original", label="Original Circle")
datatypes.visualize(scaled_circle, entity_path="/circle/scaled", label="Scaled Circle")
# ======================= Serialize / Deserialize ===========================
start = time.perf_counter()
serialized = datatypes.serialize(scaled_circle)
serialization_ms = (time.perf_counter() - start) * 1000
start = time.perf_counter()
deserialized = datatypes.deserialize(serialized)["param_0"]
deserialization_ms = (time.perf_counter() - start) * 1000
logger.info(f"Deserialized Circle: {deserialized}")
logger.info(f"Round-trip successful: {scaled_circle == deserialized}")
logger.info(f"Serialization time: {serialization_ms:.3f} ms")
logger.info(f"Deserialization time: {deserialization_ms:.3f} ms")
if __name__ == "__main__":
circle_example()
