Synopsis - Paths::Nurbs

namespace Paths
template <size_t Order>
class Nurbs
File: Nurbs.h

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...

Generated on Fri Apr 17 08:48:06 2009 by
synopsis (version devel)