Code covered by the BSD License  

Highlights from
NURBS Toolbox by D.M. Spink

4.5 | 17 ratings Rate this file 104 Downloads (last 30 days) File Size: 42.9 KB File ID: #26390 Version: 1.0
image thumbnail

NURBS Toolbox by D.M. Spink


Paul (view profile)


NURBS Toolbox by D.M. Spink re-uploaded. The previous link has broken.

| Watch this File

File Information

NURBS Toolbox official site is

% NURBS Toolbox.
% Version 1.0
% demos - NURBS demonstrations
% nrbmak - Construct a NURBS from control points and knots.
% nrbtform - Applying scaling, translation or rotation operators.
% nrbkntins - Knot insertion/refinement.
% nrbdegelev - Degree elevation.
% nrbderiv - NURBS representation of the derivative.
% nrbdeval - Evaluation of the NURBS derivative.
% nrbkntmult - Find the multiplilicity of a knot vector.
% nrbreverse - Reverse evaluation direction of the NURBS.
% nrbtransp - Swap U and V for NURBS surface.
% nrbline - Construct a straight line.
% nrbcirc - Construct a circular arc.
% nrbrect - Construct a rectangle.
% nrb4surf - Surface defined by 4 corner points.
% nrbeval - Evalution of NURBS curve or surface.
% nrbextrude - Extrude a NURBS curve along a vector.
% nrbrevolve - Construct surface by revolving a profile.
% nrbruled - Ruled surface between twp NURBS curves.
% nrbcoons - Construct Coons bilinearly blended surface patch.
% nrbplot - Plot NURBS curve or surface.
% bspeval - Evaluate a univariate B-Spline.
% bspderiv - B-Spline representation of the derivative
% bspkntins - Insert a knot or knots into a univariate B-Spline.
% bspdegelev - Degree elevation of a univariate B-Spline.
% vecnorm - Normalise the vectors.
% vecmag - Magnitaude of the vectors.
% vecmag2 - Squared Magnitude of the vectors.
% vecangle - Alternative to atan2 (0 <= angle <= 2*pi)
% vecdot - Dot product of two vectors.
% veccross - Cross product of two vectors.
% vecrotx - Rotation matrix around the x-axis.
% vecroty - Rotation matrix around the y-axis.
% vecrotz - Rotation matrix around the z-axis.
% vecscale - Scaling matrix.
% vectrans - Translation matrix.
% deg2rad - Convert degrees to radians.
% rad2deg - Convert radians to degrees.


Nurbs inspired this file.

MATLAB release MATLAB 7 (R14)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (22)
26 Aug 2015 Mi Chang

How to evaluate the disance between points and NURBS surface quickly?Is there a available function?Thanks a lot.

05 Jul 2015 Raoul Herzog

There is a bug in findspan.m (infinite loop) if the evaluation point is at the end points with roundoff error.

Second dérivatives of NURBS are missing.

Is this project still active ?

15 Jun 2015 Ocean

Ocean (view profile)

I can't find which function could plot NUBRS surface,and always get erroes warnings

19 Jan 2015 Christoph Schemmann

Thanks for the great NURBS adaption.
For one project i missed global approximation so i added my own function:

function [ CP,KV ] = globalInterp( Q,deg )
%GLOBALINTERPH Global Curveinterpolation
A = zeros(size(Q,1),size(Q,1));

% Centripetal Parametrisation
ub = paramCentripetal(Q);

% Centripetal Knotvector
KV = setKVcentripetal(size(Q,1),deg,ub)';

% Initialize Basis Matrix A
for i=2:size(Q,1)-1
span = findspan(size(Q,1),deg,ub(i),KV);
N = basisfun(span,ub(i),deg,KV);
l = span-deg;
for k=1:deg
A(i,l+k) = N(k);
% Set first and last Matrix Value
A(1,1) = 1.0;
A(size(Q,1),size(Q,1)) = 1.0;

% Solve
tmp = A\Q;

% Save Control Points
CP = [tmp(:,1) tmp(:,2) tmp(:,3)]';

function [ KV ] = setKVcentripetal( n,p,u )
%SETKVCENTRIPETAL Generates a Knot Vektor matching parametrization u
KV = zeros(n+p,1);

for i=size(KV,1)-p:size(KV,1)
KV(i) = 1.0;

for j=1:size(u,1)-p
tmp = 0.0;
for i=j:j+p-1
tmp = tmp+u(i);
KV(j+p) = tmp/p;

function [ uc ] = paramCentripetal( points )
%PARAMCENTRIPETAL Centripetal parametrization for given points
uc = zeros(size(points,1),1);

uc(1) = 0.0;
d = 0.0;
for i=2:size(uc,1)
d = d + pdist([points(i,:);points(i-1,:)]);
for i=2:size(uc,1)-1
uc(i) = uc(i-1) + pdist([points(i,:);points(i-1,:)])/d;
uc(size(uc,1)) = 1.0;

Maybe someone else will find this useful.

Greetings Christoph

14 Oct 2014 Malte

Malte (view profile)

Hi Paul, this is great, thanks a lot! I am using it for several projects. However, for one application I would like to have the condition, that the 3D surface is tangential to every curve (contour). Is there such an option or where do I need to hook? Best regards!

21 Jul 2014 Patrick

There is a bug in nrbcoons.m, at line 82. all 'u's should be replaced with 'v's - the ruled surfaces and bilinear surfaces generated are equivalent but not in directly-addable representations in the current code.

02 Apr 2014 mirui wang

I think we need a document to explain all the function and how to use.

10 Jan 2014 miodrag  
10 Jan 2014 miodrag

good works.thanks

06 Nov 2013 Pourya Alinezhad

good work... thanks .

31 Oct 2013 Erik

Erik (view profile)

When running democurve.m, execution get stuck in an infinite loop in findspan.m.

Can I find the original c-files somewhere, before conversion of all files to m-files?

Comment only
09 Aug 2013 Axel L

Axel L (view profile)


How to evaluate the second derivate of nurbs with this toolbox ?

Comment only
19 Jul 2013 Axel L

Axel L (view profile)


Thank for this useful toolbox.
How to get the rational basis function of nurbs with this toolbox ?

Comment only
09 Aug 2012 faculaganymede  
25 Sep 2011 Daniel Lopes

Daniel Lopes (view profile)

There are bugs that make this toolbox uncompatible with the Nurbs2IGES

21 Apr 2011 Li

Li (view profile)

20 Jul 2010 csg Chen  
20 Jul 2010 csg Chen

This toolbox is very useful. It can improve many problems in my applications. However, it seems some small bugs when I evaluate the derivative of nurbs curves/surfaces.
In the file "nrbderiv ":
this file call the function "bspderiv". If the weights of the original nurbs curve/surface are equal ( example: the weight = 1 at each vertex ), this weights of nurbs curve/surface vanish after call bspderiv in file nrbderiv.
Maybe, we should revise the file "nrbderiv" before calling the function "bspderiv" to preserve the original weights.

Comment only
08 Jul 2010 GAURAV

GAURAV (view profile)

I have a set of points say 300 something following the outline of cerebral aneurysm. I want to smooth this curve using the NURBS tool box provided here. How do i use this ? Where do I give my input? I just need a Bspline fitting to the data I have i.e. effectively to smooth the outline of the trace I have. Help me out..

27 Jun 2010 Evgeny Pr

Evgeny Pr (view profile)


Comment only
27 Jun 2010 Evgeny Pr

Evgeny Pr (view profile)

Where can I get C-implementation of this toolbox?

04 Mar 2010 Oliver

Oliver (view profile)

Very useful toolbox, thank you very much! Also very well commented and good examples.

Contact us