nurbspy.jax.nurbs_surface_revolution module#

Exact rational revolution patches, with explicit topology for traced angles.

class nurbspy.jax.nurbs_surface_revolution.NurbsSurfaceRevolution(generatrix, axis_point, axis_direction, angle_start, angle_end, *, n_arcs=None)[source]#

Bases: object

Revolve a 3D curve about an axis; u follows the arc, v the generatrix.

Angles are radians. As in NumPy, an end angle below the start wraps once through 2*pi. Eager calls infer one to four quadratic arcs automatically. When angles are traced, pass a static keyword n_arcs (1 to 4) so the control-net shape is fixed. Each arc must span at most pi/2. Within that topology, angles, curve geometry and axis geometry are differentiable.

Methods

intersect_lines(P0, T0, P2, T2)

Intersect two nonparallel coplanar tangent lines; retain the NumPy helper API.

make_nurbs_surface()

Build exact arc rows without normalizing zero-radius vectors on the axis.

project_point_to_line(S, T, P)

Return the orthogonal projection onto the line S+t*T.

static intersect_lines(P0, T0, P2, T2)[source]#

Intersect two nonparallel coplanar tangent lines; retain the NumPy helper API.

make_nurbs_surface()[source]#

Build exact arc rows without normalizing zero-radius vectors on the axis.

static project_point_to_line(S, T, P)[source]#

Return the orthogonal projection onto the line S+t*T.