The Wayback Machine - https://web.archive.org/web/20161017111024/https://en.wikipedia.org/wiki/De_Boor_algorithm

De Boor's algorithm

From Wikipedia, the free encyclopedia
  (Redirected from De Boor algorithm)
Jump to: navigation, search

In the mathematical subfield of numerical analysis de Boor's algorithm is a fast and numerically stable algorithm for evaluating spline curves in B-spline form. It is a generalization of de Casteljau's algorithm for Bézier curves. The algorithm was devised by Carl R. de Boor. Simplified, potentially faster variants of the de Boor algorithm have been created but they suffer from comparatively lower stability.[1][2]

Introduction[edit]

The general setting is as follows. We would like to construct a curve whose shape is described by a sequence of p points {\mathbf  {d}}_{0},{\mathbf  {d}}_{1},\dots ,{\mathbf  {d}}_{{p-1}}, which plays the role of a control polygon. The curve can be described as a function {\mathbf  {s}}(x) of one parameter x. To pass through the sequence of points, the curve must satisfy {\mathbf  {s}}(u_{0})={\mathbf  {d}}_{0},\dots ,{\mathbf  {s}}(u_{{p-1}})={\mathbf  {d}}_{{p-1}}. But this is not quite the case: in general we are satisfied that the curve "approximates" the control polygon. We assume that u0, ..., up-1 are given to us along with {\mathbf  {d}}_{0},{\mathbf  {d}}_{1},\dots ,{\mathbf  {d}}_{{p-1}}.

One approach to solve this problem is by splines. A spline is a curve that is a piecewise nth degree polynomial. This means that, on any interval [ui, ui+1), the curve must be equal to a polynomial of degree at most n. It may be equal to different polynomials on different intervals. The polynomials must be synchronized: when the polynomials from intervals [ui-1, ui) and [ui, ui+1) meet at the point ui, they must have the same value at this point and their derivatives must be equal (to ensure that the curve is smooth).

De Boor's algorithm is an algorithm which, given u0, ..., up-1 and {\mathbf  {d}}_{0},{\mathbf  {d}}_{1},\dots ,{\mathbf  {d}}_{{p-1}}, finds the value of spline curve {\mathbf  {s}}(x) at a point x. It uses O(n2) + O(n + p) operations where n is the degree and p the number of control points of s.

Outline of the algorithm[edit]

Suppose we want to evaluate the spline curve for a parameter value x\in [u_{{\ell }},u_{{\ell +1}}]. We can express the curve as

{\mathbf  {s}}(x)=\sum _{{i=0}}^{{p-1}}{\mathbf  {d}}_{i}N_{i}^{n}(x),

where[3]

N_{i}^{n}(x)={\frac  {x-u_{i}}{u_{{i+n}}-u_{i}}}N_{i}^{{n-1}}(x)+{\frac  {u_{{i+n+1}}-x}{u_{{i+n+1}}-u_{{i+1}}}}N_{{i+1}}^{{n-1}}(x),

and

{\displaystyle N_{i}^{0}(x)=\left\{{\begin{matrix}1,&{\mbox{if }}x\in [u_{i},u_{i+1}]\\0,&{\mbox{otherwise }}\end{matrix}}\right.}


Due to the spline locality property,

{\mathbf  {s}}(x)=\sum _{{i=\ell -n}}^{{\ell }}{\mathbf  {d}}_{i}N_{i}^{n}(x)

So the value {\mathbf  {s}}(x) is determined by the control points {\mathbf  {d}}_{{\ell -n}},{\mathbf  {d}}_{{\ell -n+1}},\dots ,{\mathbf  {d}}_{{\ell }}; the other control points {\mathbf  {d}}_{i} have no influence. De Boor's algorithm, described in the next section, is a procedure which efficiently calculates the expression for {\mathbf  {s}}(x).

The algorithm[edit]

We can compute the above {\mathbf  {s}}(x) by defining some x\in [u_{{\ell }},u_{{\ell +1}}), setting {\displaystyle \mathbf {d} _{i}^{[0]}=\mathbf {N} _{i}^{0}(x)} for i=\ell -n,\dots ,\ell , and with these, computing:

{\mathbf  {d}}_{i}^{{[k]}}=(1-\alpha _{{k,i}}){\mathbf  {d}}_{{i-1}}^{{[k-1]}}+\alpha _{{k,i}}{\mathbf  {d}}_{i}^{{[k-1]}};\qquad k=1,\dots ,n;\quad i=\ell -n+k,\dots ,\ell

Where the ratio \alpha is described by:

{\displaystyle \alpha _{k,i}={\frac {x-u_{i}}{u_{i+n+1-k}-u_{i}}}}

Doing so gives us {\displaystyle \mathbf {s} (x)=\mathbf {d} _{\ell }^{[n]}}

See also[edit]

External links[edit]

Computer code[edit]

TinySpline: Open source C-library for splines which implements De Boor's algorithm

References[edit]

  1. ^ Lee, E. T. Y. (December 1982). "A Simplified B-Spline Computation Routine". Computing. Springer-Verlag. 29 (4): 365–371. doi:10.1007/BF02246763. 
  2. ^ Lee, E. T. Y. (1986). "Comments on some B-spline algorithms". Computing. Springer-Verlag. 36 (3): 229–238. doi:10.1007/BF02240069. 
  3. ^ http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-basis.html

Navigation menu

Personal tools

Namespaces

Variants

More

Morty Proxy This is a proxified and sanitized view of the page, visit original site.