polf’s documentation

Simple library written with the Python C API to calculate points on lines. It does not perform any checks on the passed data, but rather follows the GIGO processing pattern.

I have written it with the main purpose of learning, but it may be useful in some situation or it can serve as a reference to get you started in the Python C API.

pip install polf

Public API

polf.line_xy(p0x: float, p0y: float, p1x: float, p1y: float, t: float) list

Computes the coordinate of a point in a 2D rect line parametrized in the range t from 0 to 1.

Algorithm: B(t) = (p0 + p1) * t , 0 <= t <= 1

Parameters:
  • p0x (float) – X value for starting point.

  • p0y (float) – Y value for starting point.

  • p1x (float) – X value for ending point.

  • p1y (float) – Y value for ending point.

  • t (float) – Number in the range from 0 to 1 that parametrizes the location in the 2D rect line.

Returns:

Point inside the 2D rect line for the value t.

Return type:

list

Example

>>> line_xy(0, 0, 10, 10, .5)
[5.0, 5.0]
Representation of point inside 2D rect line.
polf.line_xyz(p0x: float, p0y: float, p0z: float, p1x: float, p1y: float, p1z: float, t: float) list

Computes the coordinate of a point in a 3D rect line parametrized in the range t from 0 to 1.

Algorithm: B(t) = (p0 + p1) * t , 0 <= t <= 1

Parameters:
  • p0x (float) – X value for starting point.

  • p0y (float) – Y value for starting point.

  • p0z (float) – Z value for starting point.

  • p1x (float) – X value for ending point.

  • p1y (float) – Y value for ending point.

  • p1z (float) – Z value for ending point.

  • t (float) – Number in the range from 0 to 1 that parametrizes the location in the 3D rect line.

Returns:

Point inside the 3D rect line for the value t.

Return type:

list

Example

>>> line_xyz(0, 0, 0, 10, 10, 10, .5)
[5.0, 5.0, 5.0]
Representation of point inside 3D rect line.
polf.cubic_bezier_xy(p0x: float, p0y: float, p1x: float, p1y: float, p2x: float, p2y: float, p3x: float, p3y: float, t: float) list

Computes the coordinate of a point in a 2D cubic Bézier curve parametrized in the range t from 0 to 1.

Algorithm: B(t) = (1-t)**3 * p0 + 3*(1-t)**2 * t * p1 + 3*(1-t)**2 * p2 + t**3 * p3 , 0 <= t <= 1

Parameters:
  • p0x (float) – X value for starting point.

  • p0y (float) – Y value for starting point.

  • p1x (float) – X value for first control point.

  • p1y (float) – Y value for first control point.

  • p2x (float) – X value for second control point.

  • p2y (float) – Y value for second control point.

  • p3x (float) – X value for ending point.

  • p3y (float) – Y value for ending point.

  • t (float) – Number in the range from 0 to 1 that parametrizes the location in the cubic Bézier curve.

Returns:

Point inside the cubic Bézier curve for the value t.

Return type:

list

Example:

>>> cubic_bezier_xy(0, 10, 0, 0, 10, 0, 10, 10, .5)
[5.0, 2.5]
Representation of point inside cubic Bézier curve.
polf.quadratic_bezier_xy(p0x: float, p0y: float, p1x: float, p1y: float, p2x: float, p2y: float, t: float) list

Computes the coordinate of a point in a 2D quadratic Bézier curve parametrized in the range t from 0 to 1.

Algorithm: B(t) = (1-t)**2 * p0 + 2*(1-t)*t *p1 + t**2 * p2

Parameters:
  • p0x (float) – X value for starting point.

  • p0y (float) – Y value for starting point.

  • p1x (float) – X value for control point.

  • p1y (float) – Y value for control point.

  • p2x (float) – X value for ending point.

  • p2y (float) – Y value for ending point.

  • t (float) – Number in the range from 0 to 1 that parametrizes the location in the quadratic Bézier curve.

Returns:

Point inside the quadratic Bézier curve for the value t.

Return type:

list

polf.elliptical_arc_xy(p0x: float, p0y: float, rx: float, ry: float, x_axis_rotation: float, large_arc: bool, sweep: bool, p1x: float, p1y: float, t: float) list

Computes the coordinate of a point in a 2D elliptical arc parametrized in the range t from 0 to 1. This implementation follows SVG2 specification.

Parameters:
  • p0x (float) – X value for starting point.

  • p0y (float) – Y value for starting point.

  • rx (float) – Arc width.

  • ry (float) – Arc height.

  • x_axis_rotation (float) – Arc rotation on x axis.

  • large_arc (bool) – large-arc flag that specifies how the arc is drawn.

  • sweep (float) – sweep flag that specifies how the arc is drawn.

  • p1x (float) – X value for ending point.

  • p1y (float) – Y value for ending point.

  • t (float) – Number in the range from 0 to 1 that parametrizes the location in the elliptical arc.

Returns:

Point inside the elliptical arc for the value t.

Return type:

list