Zum Hauptinhalt springen

raygeo.geo.shape.bezier

Cubic bezier curve queries and conversions.

Provides point evaluation at a parameter t, splitting into two halves, bounding rectangle computation, flattening to line segments (both fixed-step and adaptive subdivision), rectangle clipping, flatness testing, perpendicular distance measurement, and conversion from cubic to quadratic form.

Functions

bezier_flatness_sq()

bezier_flatness_sq(a: Point3D, b: Point3D, c: Point3D, d: Point3D) -> float

Compute the flatness squared of a cubic bezier.

Returns: Flatness squared value.

ParameterTypeDescription
aPoint3DStart point (x, y, z).
bPoint3DFirst control point (x, y, z).
cPoint3DSecond control point (x, y, z).
dPoint3DEnd point (x, y, z).
Returnsfloat

clip_bezier_with_rect()

clip_bezier_with_rect(p0: Point, p1: Point, p2: Point, p3: Point, rect: Rect) -> list[tuple[Point, Point, Point, Point]]

Clip a cubic bezier with a rectangle.

Returns: List of bezier segments inside the rectangle.

ParameterTypeDescription
p0PointStart control point (x, y).
p1PointFirst control point (x, y).
p2PointSecond control point (x, y).
p3PointEnd control point (x, y).
rectRectClipping rectangle (x_min, y_min, x_max, y_max).
Returnslist[tuple[Point, Point, Point, Point]]

convert_cubic_bezier_to_quadratic()

convert_cubic_bezier_to_quadratic(p0: Point, p1: Point, p2: Point, p3: Point) -> tuple[Point, Point, Point]

Convert a cubic bezier to a quadratic bezier.

Returns: Quadratic bezier (p0, p1, p2).

ParameterTypeDescription
p0PointStart control point (x, y).
p1PointFirst control point (x, y).
p2PointSecond control point (x, y).
p3PointEnd control point (x, y).
Returnstuple[Point, Point, Point]

flatten_bezier()

flatten_bezier(p0: Point3D, p1: Point3D, p2: Point3D, p3: Point3D, tolerance: float, max_subdivisions: int, pts: list) -> None

Flatten a bezier curve into points.

ParameterTypeDescription
p0Point3DStart control point (x, y, z).
p1Point3DFirst control point (x, y, z).
p2Point3DSecond control point (x, y, z).
p3Point3DEnd control point (x, y, z).
tolerancefloatFlattening tolerance.
max_subdivisionsintMaximum recursion depth.
ptslistOutput list to append points to.
ReturnsNone

get_bezier_bounds()

get_bezier_bounds(p0: Point, p1: Point, p2: Point, p3: Point) -> Rect

Get the bounding rectangle of a cubic bezier.

Returns: Bounding rectangle as (x_min, y_min, x_max, y_max).

ParameterTypeDescription
p0PointStart control point (x, y).
p1PointFirst control point (x, y).
p2PointSecond control point (x, y).
p3PointEnd control point (x, y).
ReturnsRect

get_bezier_point_at()

get_bezier_point_at(p0: Point, p1: Point, p2: Point, p3: Point, t: float) -> Point

Get a point on a cubic bezier at parameter t.

Returns: Point on the bezier curve (x, y).

ParameterTypeDescription
p0PointStart control point (x, y).
p1PointFirst control point (x, y).
p2PointSecond control point (x, y).
p3PointEnd control point (x, y).
tfloatParameter value (0..1).
ReturnsPoint

get_bezier_rect_intersections()

get_bezier_rect_intersections(p0: Point, p1: Point, p2: Point, p3: Point, rect: Rect) -> list[float]

Get intersection t-values of a bezier with a rectangle.

Returns: List of t-values where the bezier intersects.

ParameterTypeDescription
p0PointStart control point (x, y).
p1PointFirst control point (x, y).
p2PointSecond control point (x, y).
p3PointEnd control point (x, y).
rectRectRectangle (x_min, y_min, x_max, y_max).
Returnslist[float]

is_bezier_inside_polygons()

is_bezier_inside_polygons(p0: Point, p1: Point, p2: Point, p3: Point, polygons: Any) -> bool

Check if a bezier curve is inside a set of polygons.

Returns: True if the bezier is inside all polygons.

ParameterTypeDescription
p0PointStart control point (x, y).
p1PointFirst control point (x, y).
p2PointSecond control point (x, y).
p3PointEnd control point (x, y).
polygonsAnyList of polygons to check against.
Returnsbool

linearize_bezier()

linearize_bezier(p0: Point3D, p1: Point3D, p2: Point3D, p3: Point3D, num_steps: int) -> list[tuple[Point3D, Point3D]]

Linearize a bezier into line segments.

Returns: List of (p1, p2) segment pairs.

ParameterTypeDescription
p0Point3DStart control point (x, y, z).
p1Point3DFirst control point (x, y, z).
p2Point3DSecond control point (x, y, z).
p3Point3DEnd control point (x, y, z).
num_stepsintNumber of linearization steps.
Returnslist[tuple[Point3D, Point3D]]

linearize_bezier_adaptive()

linearize_bezier_adaptive(p0: Point, p1: Point, p2: Point, p3: Point, tolerance_sq: float, max_subdivisions: int = 20) -> Polygon

Adaptively linearize a bezier curve.

Returns: List of linearized points (x, y).

ParameterTypeDescription
p0PointStart control point (x, y).
p1PointFirst control point (x, y).
p2PointSecond control point (x, y).
p3PointEnd control point (x, y).
tolerance_sqfloatSquared tolerance for subdivision.
max_subdivisionsint = 20Maximum recursion depth.
ReturnsPolygon

linearize_bezier_segment()

linearize_bezier_segment(p0: Point3D, p1: Point3D, p2: Point3D, p3: Point3D, tolerance: float = 0.1) -> list[Point3D]

Linearize a single bezier segment.

Returns: List of linearized points (x, y, z).

ParameterTypeDescription
p0Point3DStart control point (x, y, z).
p1Point3DFirst control point (x, y, z).
p2Point3DSecond control point (x, y, z).
p3Point3DEnd control point (x, y, z).
tolerancefloat = 0.1Linearization tolerance.
Returnslist[Point3D]

perp_dist_sq()

perp_dist_sq(pt: Point3D, origin: Point3D, vx: float, vy: float, vz: float = 0, norm_sq: float = 0) -> float

Compute the perpendicular distance squared.

Returns: Perpendicular distance squared.

ParameterTypeDescription
ptPoint3DPoint to measure from.
originPoint3DOrigin of the line.
vxfloatX component of line direction.
vyfloatY component of line direction.
vzfloat = 0Z component of line direction.
norm_sqfloat = 0Precomputed squared norm (optional).
Returnsfloat

split_bezier()

split_bezier(p0: Point, p1: Point, p2: Point, p3: Point, t: float) -> tuple[tuple[Point, Point, Point, Point], tuple[Point, Point, Point, Point]]

Split a cubic bezier at parameter t.

Returns: Two bezier curves (left, right).

ParameterTypeDescription
p0PointStart control point (x, y).
p1PointFirst control point (x, y).
p2PointSecond control point (x, y).
p3PointEnd control point (x, y).
tfloatSplit parameter (0..1).
Returnstuple[tuple[Point, Point, Point, Point], tuple[Point, Point, Point, Point]]