# Eval

verb.eval.Eval

CLASS

Source code

Eval provides all of the core algorithms for evaluating points and derivatives on NURBS curves and surfaces. Most of the time, it makes more sense to use the tools in verb.geom for this, but in some cases this will make more sense.

Eval also provides experimental tools for evaluating points in NURBS volumes.

Many of these algorithms owe their implementation to Piegl & Tiller's "The NURBS Book"

## rationalCurveTangent

STATIC METHOD

Source code

rationalCurveTangent(curve : NurbsCurveData, u : Float) : Array<Float>

Compute the tangent at a point on a NURBS curve

params

• NurbsCurveData object representing the curve
• u parameter
• v parameter

returns

• a Vector represented by an array of length (dim)

## rationalSurfaceNormal

STATIC METHOD

Source code

rationalSurfaceNormal(surface : NurbsSurfaceData, u : Float, v : Float) : Array<Float>

Compute the derivatives at a point on a NURBS surface

params

• NurbsSurfaceData object representing the surface
• u parameter
• v parameter

returns

• a Vector represented by an array of length (dim)

## rationalSurfaceDerivatives

STATIC METHOD

Source code

rationalSurfaceDerivatives(surface : NurbsSurfaceData, u : Float, v : Float, numDerivs : Int) : Array<Array<Array<Float>>>

Compute the derivatives at a point on a NURBS surface

params

• NurbsSurfaceData object representing the surface
• number of derivatives to evaluate
• u parameter at which to evaluate the derivatives
• v parameter at which to evaluate the derivatives

returns

• a point represented by an array of length (dim)

## rationalSurfacePoint

STATIC METHOD

Source code

rationalSurfacePoint(surface : NurbsSurfaceData, u : Float, v : Float) : Point

Compute a point on a NURBS surface

params

• integer degree of surface in u direction
• array of nondecreasing knot values in u direction
• integer degree of surface in v direction
• array of nondecreasing knot values in v direction
• 3d array of control points (tensor), top to bottom is increasing u direction, left to right is increasing v direction, and where each control point is an array of length (dim+1)
• u parameter at which to evaluate the surface point
• v parameter at which to evaluate the surface point

returns

• a point represented by an array of length (dim)

## rationalCurveDerivatives

STATIC METHOD

Source code

rationalCurveDerivatives(curve : NurbsCurveData, u : Float, numDerivs : Int) : Array<Point>

Determine the derivatives of a NURBS curve at a given parameter

params

• NurbsCurveData object representing the curve - the control points are in homogeneous coordinates
• parameter on the curve at which the point is to be evaluated
• number of derivatives to evaluate

returns

• a point represented by an array of length (dim)

## rationalCurvePoint

STATIC METHOD

Source code

rationalCurvePoint(curve : NurbsCurveData, u : Float) : Point

Compute a point on a NURBS curve

params

• integer degree of curve
• array of nondecreasing knot values
• 2d array of homogeneous control points, where each control point is an array of length (dim+1) and form (wi*pi, wi)
• parameter on the curve at which the point is to be evaluated

returns

• a point represented by an array of length (dim)

## surfaceDerivatives

STATIC METHOD

Source code

surfaceDerivatives(surface : NurbsSurfaceData, u : Float, v : Float, numDerivs : Int) : Array<Array<Point>>

Compute the derivatives on a non-uniform, non-rational B spline surface

params

• NurbsSurfaceData object representing the surface
• number of derivatives to evaluate
• u parameter at which to evaluate the derivatives
• v parameter at which to evaluate the derivatives

returns

• a 2d jagged array representing the derivatives - u derivatives increase by row, v by column

## surfaceDerivativesGivenNM

STATIC METHOD

Source code

surfaceDerivativesGivenNM(n : Int, m : Int, surface : NurbsSurfaceData, u : Float, v : Float, numDerivs : Int) : Array<Array<Point>>

Compute the derivatives on a non-uniform, non-rational B spline surface (corresponds to algorithm 3.6 from The NURBS book, Piegl & Tiller 2nd edition)

params

• integer number of basis functions in u dir - 1 = knotsU.length - degreeU - 2
• integer number of basis functions in v dir - 1 = knotsU.length - degreeU - 2
• NurbsSurfaceData object representing the surface
• u parameter at which to evaluate the derivatives
• v parameter at which to evaluate the derivatives

returns

• a 2d jagged array representing the derivatives - u derivatives increase by row, v by column

## surfacePoint

STATIC METHOD

Source code

surfacePoint(surface : NurbsSurfaceData, u : Float, v : Float) : Point

Compute a point on a non-uniform, non-rational B-spline surface

params

• NurbsSurfaceData object representing the surface
• u parameter at which to evaluate the surface point
• v parameter at which to evaluate the surface point

returns

• a point represented by an array of length (dim)

## surfacePointGivenNM

STATIC METHOD

Source code

surfacePointGivenNM(n : Int, m : Int, surface : NurbsSurfaceData, u : Float, v : Float) : Point

Compute a point on a non-uniform, non-rational B spline surface (corresponds to algorithm 3.5 from The NURBS book, Piegl & Tiller 2nd edition)

params

• integer number of basis functions in u dir - 1 = knotsU.length - degreeU - 2
• integer number of basis functions in v dir - 1 = knotsV.length - degreeV - 2
• NurbsSurfaceData object representing the surface
• u parameter at which to evaluate the surface point
• v parameter at which to evaluate the surface point

returns

• a point represented by an array of length (dim)

## curveRegularSamplePoints

STATIC METHOD

Source code

curveRegularSamplePoints(crv : NurbsCurveData, divs : Int)

## curveRegularSamplePoints2

STATIC METHOD

Source code

curveRegularSamplePoints2(crv : NurbsCurveData, divs : Int)

## rationalSurfaceRegularSampleDerivatives

STATIC METHOD

Source code

rationalSurfaceRegularSampleDerivatives(surface : NurbsSurfaceData, divsU : Int, divsV : Int, numDerivs : Int)

Compute a regularly spaced grid of derivatives on a non-uniform, rational, B spline surface. Generally, this algorithm is faster than directly evaluating these as we can pre-compute all of the basis function arrays

params

• NurbsSurfaceData object representing the surface
• number of divisions in the U direction
• number of divisions in the V direction
• number of derivatives

returns

• a 2d array of dimension (divsU+1, divsV+1) of derivative values where each entry is similar to that returned by rationalSurfaceDerivatives

## surfaceRegularSampleDerivatives

STATIC METHOD

Source code

surfaceRegularSampleDerivatives(surface : NurbsSurfaceData, divsU : Int, divsV : Int, numDerivs : Int)

Compute a regularly spaced grid of derivatives on a non-uniform, non-rational, B spline surface. Generally, this algorithm is faster than directly evaluating these as we can pre-compute all of the basis function arrays

params

• NurbsSurfaceData object representing the surface
• number of divisions in the U direction
• number of divisions in the V direction

returns

• a 2d array of dimension (divsU+1, divsV+1) of derivative values where each entry is similar to that returned by surfaceDerivatives

## rationalSurfaceRegularSamplePoints

STATIC METHOD

Source code

rationalSurfaceRegularSamplePoints(surface : NurbsSurfaceData, divsU : Int, divsV : Int) : Array<Array<Point>>

Compute a regularly spaced grid of points on a non-uniform, rational, B spline surface. Generally, this algorithm is faster than directly evaluating these as we can pre-compute all of the basis function arrays

params

• NurbsSurfaceData object representing the surface
• number of divisions in the U direction
• number of divisions in the V direction

returns

• a 2d array of dimension (divsU+1, divsV+1) of points

## surfaceRegularSamplePoints

STATIC METHOD

Source code

surfaceRegularSamplePoints(surface : NurbsSurfaceData, divsU : Int, divsV : Int) : Array<Array<Point>>

Compute a regularly spaced grid of points on a non-uniform, non-rational, B spline surface. Generally, this algorithm is faster than directly evaluating these as we can pre-compute all of the basis function arrays

params

• NurbsSurfaceData object representing the surface
• number of divisions in the U direction
• number of divisions in the V direction

returns

• a 2d array of dimension (divsU+1, divsV+1) of points

## curveDerivatives

STATIC METHOD

Source code

curveDerivatives(crv : NurbsCurveData, u : Float, numDerivs : Int) : Array<Point>

Determine the derivatives of a non-uniform, non-rational B-spline curve at a given parameter

params

• NurbsCurveData object representing the curve
• parameter on the curve at which the point is to be evaluated
• number of derivatives to evaluate

returns

• a point represented by an array of length (dim)

## curveDerivativesGivenN

STATIC METHOD

Source code

curveDerivativesGivenN(n : Int, curve : NurbsCurveData, u : Float, numDerivs : Int) : Array<Point>

Determine the derivatives of a non-uniform, non-rational B-spline curve at a given parameter (corresponds to algorithm 3.1 from The NURBS book, Piegl & Tiller 2nd edition)

params

• integer number of basis functions - 1 = knots.length - degree - 2
• NurbsCurveData object representing the curve
• parameter on the curve at which the point is to be evaluated

returns

• a point represented by an array of length (dim)

## curvePoint

STATIC METHOD

Source code

curvePoint(curve : NurbsCurveData, u : Float)

Compute a point on a non-uniform, non-rational b-spline curve

params

• NurbsCurveData object representing the curve
• parameter on the curve at which the point is to be evaluated

returns

• a point represented by an array of length (dim)

## areValidRelations

STATIC METHOD

Source code

areValidRelations(degree : Int, num_controlPoints : Int, knots_length : Int) : Bool

Confirm the relations between degree (p), number of control points(n+1), and the number of knots (m+1) via The NURBS Book (section 3.2, Second Edition)

params

• integer degree
• integer number of control points
• integer length of the knot Array (including duplicate knots)

returns

• whether the values are correct

## curvePointGivenN

STATIC METHOD

Source code

curvePointGivenN(n : Int, curve : NurbsCurveData, u : Float) : Point

Compute a point on a non-uniform, non-rational b-spline curve (corresponds to algorithm 3.1 from The NURBS book, Piegl & Tiller 2nd edition)

params

• integer number of basis functions - 1 = knots.length - degree - 2
• NurbsCurveData object representing the curve
• parameter on the curve at which the point is to be evaluated

returns

• a point represented by an array of length (dim)

## volumePoint

STATIC METHOD

Source code

volumePoint(volume : VolumeData, u : Float, v : Float, w : Float) : Point

Compute a point in a non-uniform, non-rational B spline volume

params

• VolumeData
• u parameter at which to evaluate the volume point
• v parameter at which to evaluate the volume point
• w parameter at which to evaluate the volume point

returns

• a point represented by an array of length (dim)

## volumePointGivenNML

STATIC METHOD

Source code

volumePointGivenNML(volume : VolumeData, n : Int, m : Int, l : Int, u : Float, v : Float, w : Float) : Point

Compute a point in a non-uniform, non-rational B spline volume

params

• VolumeData
• u parameter at which to evaluate the volume point
• v parameter at which to evaluate the volume point
• w parameter at which to evaluate the volume point

returns

• a point represented by an array of length (dim)

## derivativeBasisFunctions

STATIC METHOD

Source code

derivativeBasisFunctions(u : Float, degree : Int, knots : KnotArray) : Array<Array<Float>>

Compute the non-vanishing basis functions and their derivatives

params

• float parameter
• integer degree
• array of nondecreasing knot values

returns

• 2d array of basis and derivative values of size (n+1, p+1) The nth row is the nth derivative and the first row is made up of the basis function values.

## derivativeBasisFunctionsGivenNI

STATIC METHOD

Source code

derivativeBasisFunctionsGivenNI(knotIndex : Int, u : Float, p : Int, n : Int, knots : KnotArray) : Array<Array<Float>>

Compute the non-vanishing basis functions and their derivatives (corresponds to algorithm 2.3 from The NURBS book, Piegl & Tiller 2nd edition)

params

• integer knot span index
• float parameter
• integer degree
• integer number of basis functions - 1 = knots.length - degree - 2
• array of nondecreasing knot values

returns

• 2d array of basis and derivative values of size (n+1, p+1) The nth row is the nth derivative and the first row is made up of the basis function values.

## basisFunctions

STATIC METHOD

Source code

basisFunctions(u : Float, degree : Int, knots : KnotArray) : Array<Float>

Compute the non-vanishing basis functions

params

• float parameter
• integer degree of function
• array of nondecreasing knot values

returns

• list of non-vanishing basis functions

## basisFunctionsGivenKnotSpanIndex

STATIC METHOD

Source code

basisFunctionsGivenKnotSpanIndex(knotSpan_index : Int, u : Float, degree : Int, knots : KnotArray) : Array<Float>

Compute the non-vanishing basis functions (corresponds to algorithm 2.2 from The NURBS book, Piegl & Tiller 2nd edition)

params

• Number, integer knot span index
• Number, float parameter
• Number, integer degree of function
• array of nondecreasing knot values

returns

• list of non-vanishing basis functions

## knotSpan

STATIC METHOD

Source code

knotSpan(degree : Int, u : Float, knots : Array<Float>) : Int

Find the span on the knot Array without supplying n

params

• integer degree of function
• float parameter
• array of nondecreasing knot values

returns

• the index of the knot span

## knotSpanGivenN

STATIC METHOD

Source code

knotSpanGivenN(n : Int, degree : Int, u : Float, knots : Array<Float>) : Int

Find the span on the knot Array knots of the given parameter (corresponds to algorithm 2.1 from The NURBS book, Piegl & Tiller 2nd edition)

params

• integer number of basis functions - 1 = knots.length - degree - 2
• integer degree of function
• parameter
• array of nondecreasing knot values

returns

• the index of the knot span

## dehomogenize

STATIC METHOD

Source code

dehomogenize(homoPoint : Point) : Point

Dehomogenize a point

params

• a point represented by an array (wi*pi, wi) with length (dim+1)

returns

• a point represented by an array pi with length (dim)

## rational1d

STATIC METHOD

Source code

rational1d(homoPoints : Array<Point>) : Array<Point>

Obtain the point from a point in homogeneous space without dehomogenization, assuming all are the same length

params

• array of points represented by an array (wi*pi, wi) with length (dim+1)

returns

• array of points represented by an array (wi*pi) with length (dim)

## rational2d

STATIC METHOD

Source code

rational2d(homoPoints : Array<Array<Point>>) : Array<Array<Point>>

Obtain the weight from a collection of points in homogeneous space, assuming all are the same dimension

params

• array of arrays of of points represented by an array (wi*pi, wi) with length (dim+1)

returns

• array of arrays of points, each represented by an array pi with length (dim)

## weight1d

STATIC METHOD

Source code

weight1d(homoPoints : Array<Point>) : Array<Float>

Obtain the weight from a collection of points in homogeneous space, assuming all are the same dimension

params

• array of points represented by an array (wi*pi, wi) with length (dim+1)

returns

• a point represented by an array pi with length (dim)

## weight2d

STATIC METHOD

Source code

weight2d(homoPoints : Array<Array<Point>>) : Array<Array<Float>>

Obtain the weight from a collection of points in homogeneous space, assuming all are the same dimension

params

• array of arrays of of points represented by an array (wi*pi, wi) with length (dim+1)

returns

• array of arrays of points, each represented by an array pi with length (dim)

## dehomogenize1d

STATIC METHOD

Source code

dehomogenize1d(homoPoints : Array<Point>) : Array<Point>

Dehomogenize an array of points

params

• array of points represented by an array (wi*pi, wi) with length (dim+1)

returns

• an array of points, each of length dim

## dehomogenize2d

STATIC METHOD

Source code

dehomogenize2d(homoPoints : Array<Array<Point>>) : Array<Array<Point>>

Dehomogenize a 2d array of pts

params

• array of arrays of points represented by an array (wi*pi, wi) with length (dim+1)

returns

• array of arrays of points, each of length dim

## homogenize1d

STATIC METHOD

Source code

homogenize1d(controlPoints : Array<Point>, weights : Array<Float>) : Array<Point>

Transform a 1d array of points into their homogeneous equivalents

params

• 1d array of control points, (actually a 2d array of size (m x dim) )
• array of control point weights, the same size as the array of control points (m x 1)

returns

• 1d array of control points where each point is (wi*pi, wi) where wi i the ith control point weight and pi is the ith control point, hence the dimension of the point is dim + 1

## homogenize2d

STATIC METHOD

Source code

homogenize2d(controlPoints : Array<Array<Point>>, weights : Array<Array<Float>>) : Array<Array<Point>>

params

• 2d array of control points, (actually a 3d array of size m x n x dim)
• array of control point weights, the same size as the control points array (m x n x 1)

returns

• 1d array of control points where each point is (wi*pi, wi) where wi i the ith control point weight and pi is the ith control point, the size is (m x n x dim+1)