namespace Paths
template <size_t Order>
class Nurbs
Nurbs-inheritance Scopes/Path.html

The Nurbs class. It implements a nurbs curve for the given order. It is a very powerful and flexible curve representation. For simpler cases you may prefer to use a Bezier curve.

While non-rational curves are not sufficient to represent a circle, this is one of many sets of NURBS control points for an almost uniformly parameterized circle:

x y weight
1 0 1
1 1 sqrt(2)/2
0 1 1
-1 1 sqrt(2)/2
-1 0 1
-1 -1 sqrt(2)/2
0 -1 1
1 -1 sqrt(2)/2
1 0 1

The order is three, the knot vector is {0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4}. It should be noted that the circle is composed of four quarter circles, tied together with double knots. Although double knots in a third order NURBS curve would normally result in loss of continuity in the first derivative, the control points are positioned in such a way that the first derivative is continuous. (From Wikipedia )

Example:

Nurbs<3> circle;
circle.insert_control_point(0, Vertex(1., 0.), 1.);
circle.insert_control_point(0, Vertex(1., 1.), sqrt(2.)/2.);
...
Public Member functions Summary:
 constructor Nurbs()

Create a new Nurbs curve.

 void insert_control_point(double knot, const Vertex& vertex, double weight)

Inserts a control point with the given weight.

virtual void draw()
Private Data members Summary:
std::vector<Vertex> controls_

The data...

std::vector<double> weights_
std::vector<double> knots_
Public Member functions Details:
 constructor Nurbs()

Create a new Nurbs curve.

 void insert_control_point(double knot, const Vertex& vertex, double weight)

Inserts a control point with the given weight. The knot value determines the position in the sequence.

Parameters:
knot:the parameter value at which to insert a new knot
vertex:the control point
weight:the weight of the control point
Private Data members Details:
std::vector<Vertex> controls_

The data...