Skip to content

Commit

Permalink
Adding speedup for elevate_nodes() for curves.
Browse files Browse the repository at this point in the history
  • Loading branch information
dhermes committed Sep 13, 2017
1 parent 872cd3d commit b03fc28
Show file tree
Hide file tree
Showing 7 changed files with 429 additions and 64 deletions.
2 changes: 2 additions & 0 deletions src/bezier/_curve.pxd
Expand Up @@ -42,3 +42,5 @@ cdef extern from "bezier/curve.h":
void locate_point(
int *num_nodes, int *dimension, double *nodes,
double *point, double *s_approx)
void elevate_nodes(
int *num_nodes, int *dimension, double *nodes, double *elevated)
9 changes: 7 additions & 2 deletions src/bezier/_curve_helpers.py
Expand Up @@ -129,6 +129,9 @@
def make_subdivision_matrices(degree):
"""Make the matrix used to subdivide a curve.
This is a helper for :func:`_subdivide_nodes`. It does not have a
Fortran speedup.
Args:
degree (int): The degree of the curve.
Expand Down Expand Up @@ -327,7 +330,7 @@ def compute_length(nodes, degree):
return length


def elevate_nodes(nodes, degree, dimension):
def _elevate_nodes(nodes, degree, dimension):
r"""Degree-elevate a B |eacute| zier curves.
Does this by converting the current nodes :math:`v_0, \ldots, v_n`
Expand All @@ -350,7 +353,7 @@ def elevate_nodes(nodes, degree, dimension):
Returns:
numpy.ndarray: The nodes of the degree-elevated curve.
"""
new_nodes = np.zeros((degree + 2, dimension), order='F')
new_nodes = np.empty((degree + 2, dimension), order='F')

multipliers = np.arange(1, degree + 1, dtype=_FLOAT64)[:, np.newaxis]
denominator = degree + 1.0
Expand Down Expand Up @@ -916,6 +919,7 @@ def full_reduce(nodes):
subdivide_nodes = _subdivide_nodes
newton_refine = _newton_refine
locate_point = _locate_point
elevate_nodes = _elevate_nodes
else:
evaluate_multi_barycentric = _curve_speedup.evaluate_multi_barycentric
evaluate_multi = _curve_speedup.evaluate_multi
Expand All @@ -924,4 +928,5 @@ def full_reduce(nodes):
subdivide_nodes = _curve_speedup.subdivide_nodes
newton_refine = _curve_speedup.newton_refine
locate_point = _curve_speedup.locate_point
elevate_nodes = _curve_speedup.elevate_nodes
# pylint: enable=invalid-name

0 comments on commit b03fc28

Please sign in to comment.