Code covered by the BSD License  

Highlights from
B-splines

4.71429

4.7 | 7 ratings Rate this file 100 Downloads (last 30 days) File Size: 20.97 KB File ID: #27374
image thumbnail

B-splines

by Levente Hunyadi

 

26 Apr 2010 (Updated 21 May 2011)

Draw, manipulate and reconstruct B-splines.

| Watch this File

File Information
Description

The package comprises of a graphical utility to place uniform B-spline control points and see how the B-spline is redrawn as control points or control point weights are adjusted, and functions to estimate B-splines with known knot vector, given a set of noisy data points either with known or unknown associated parameter values.

As regards the interactive interface, the user is shown a figure window with axes in which to choose control points of a uniform B-spline. As points are placed in the axes, the B-spline of specified order is drawn progressively. The user may terminate adding control points by pressing ENTER or ESC, or may place the last control point with a right mouse button click.

Once done, control points may be adjusted with drag-and-drop. Hold down the left mouse button over any control point and drag it to another location. Control point adjustment works in 3D; use the rotation tool to set a different camera position. It is also possible to explicitly set the x, y and z coordinates as well as the weight of a control point: click on the point, enter new values and hit ENTER.

As regards the non-interactive interface, functions include calculating and drawing basis functions, computing points of a (weighted or unweighted) B-spline curve with de Boor's algorithm, and estimating B-spline control points given noisy data, either with or without parameter values associated with the observed data points.

From a programmers' perspective, this example illustrates how to use nested functions to extend variable scope, implement drag-and-drop operations, combine normalized and pixel units for control docking and register multiple callbacks for a single event in an interactive user interface.

USAGE

The simplest way to get started is to run "bspline_gui", which activates the figure window to place B-spline control points interactively. Examples are bundled to illustrate various B-spline curve computation and approximation methods.

MATLAB release MATLAB 7.6 (R2008a)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (9)
24 Jun 2010 Evgeny Pr  
27 Jun 2010 Evgeny Pr

Hello!
Thank you for good job!

I found one error in the function "bspline_wdeboor". The problem in if statement (if nargin > 5).
Must be:
if (nargin < 5)
    [Y,u] = bspline_deboor(n,t,P);
else
    [Y,u] = bspline_deboor(n,t,P,u);
end

The same approximation is unstable. Strongly depends on the knots vector.

03 Oct 2010 Jaykumar Shah  
07 Jan 2011 Henry

Agree with Evgeny Pr with the problem. Otherwise it's good!

01 Jun 2011 Ben Fishler

Excellent code! 5 stars...
Only thing I can't seem to get to work is altering the control point locations post-zooming or rotating of the plot (the control points seem to change to non-interactive graph points after using any tools on the figure or camera toolbars) -- any suggestions?

01 Jun 2011 Ben Fishler

Scratch last comment, got the control points to work...

02 Jun 2011 Tom Lintern

Great code. I am pretty new with working with B-splines and am wondering if there is a way you would reccomend (with your code) to find the derivative of a given spline with a given set of control points?

07 Oct 2011 Jim

Great work!
I found a bug in bspline_basis.m. The last line in
function y = bspline_basis_recurrence(j,n,t,x)
should be:

else
    y(:) = t(j+1) <= x & x < t(j+2);
end

There should not be an equal in the second term x<t(j+2). If you plot the basis function using knot vector [0 1 2 3 4 5 6] and order 3, you will see the error.

22 Nov 2011 Fer  
Please login to add a comment or rating.
Updates
02 May 2010

Added control point weights and control point approximation from data.

10 May 2010

Added estimation without known B-spline curve parameter values.

21 May 2011

Added computing knot vector and control points associated with derivative of B-spline curve (contributed by Joe Hays).

Tag Activity for this File
Tag Applied By Date/Time
bspline Levente Hunyadi 27 Apr 2010 10:32:14
drag and drop Levente Hunyadi 27 Apr 2010 10:32:14
ginput Levente Hunyadi 27 Apr 2010 10:32:14
gui Levente Hunyadi 27 Apr 2010 10:32:14
nurbs Levente Hunyadi 27 Apr 2010 10:32:14
spline Levente Hunyadi 27 Apr 2010 10:32:14
bspline Peter Simon 26 May 2010 00:36:52
drag and drop khushboo singhal 27 Oct 2010 12:39:24
bspline ONKAR 19 Sep 2011 06:04:13
drag and drop ONKAR 19 Sep 2011 06:04:21
bspline Irassu Oliveira Santos 12 Dec 2011 08:43:08

Contact us at files@mathworks.com