Here is the c++ code for the De Boor algorithm. It calculates a point C(x) on a B-Spline curve of any degree.

Point deBoor(int k,int degree, int i, double x, double* knots, Point *ctrlPoints) { // Please see wikipedia page for detail // note that the algorithm here kind of traverses in reverse order // comapred to that in the wikipedia page if( k == 0) return ctrlPoints[i]; else { double alpha = (x-knots[i])/(knots[i+degree+1-k]-knots[i]); return (deBoor(k-1,degree, i-1, x, knots, ctrlPoints)*(1-alpha )+deBoor(k-1,degree, i, x, knots, ctrlPoints)*alpha ); } }

The Point class is defined as the follow:

class Point { public: Point(){x=0.;y=0.;z=0.;}; // copy operator Point operator=(const Point pt) ; Point operator+(const Point pt) const; //Point operator-(const Point pt) const; Point operator*(double m) const; Point operator/(double m) const; double x,y,z; }; Point Point::operator=(const Point pt) { x = pt.x; y = pt.y; z = pt.z; return *this; } Point Point::operator+(const Point pt) const { Point temp; temp.x = x + pt.x; temp.y = y + pt.y; temp.z = z + pt.z; return temp; } Point Point::operator*(double m) const { Point temp; temp.x = x*m; temp.y = y*m; temp.z = z*m; return temp; } Point Point::operator/(double m) const { Point temp; temp.x = x/m; temp.y = y/m; temp.z = z/m; return temp; }

Advertisements