<p>The way that NURBS curves are typically split at an arbitrary point is by <a href="http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/NURBS-knot-insert.html" rel="nofollow noreferrer">knot insertion</a>. You insert knots at the split point until it is at maximum multiplicity, at which point you can just read off the two split curves.</p>

<p>However, you may not want to split at an arbitrary point. If the ultimate goal is to draw the curves or something like that, then it's worth splitting the curve at the existing knot points (that is, performing knot insertion until all knots are at maximum multiplicity) rather than inserting new ones.</p>

<p>This process splits the NURBS into <em>uniform</em> rational B-splines. Once you have that, you can use <a href="https://en.wikipedia.org/wiki/De_Boor%27s_algorithm" rel="nofollow noreferrer">de Boor's algorithm</a> to split further.</p>

<p>The number of knots in the knot vector is:</p>

<pre><code>numKnots = degreeOfCurve + numControlPoints + 1
</code></pre>

<p>or if you prefer:</p>

<pre><code>numKnots = orderOfCurve + numControlPoints
</code></pre>

<p>Inserting a knot thus increases the number of control points by one.</p>

<p>As you travel along a NURBS curve, each knot represents a place where one control point "drops out" and another one "enters". If a knot value is repeated, this means that more than one control point is replaced at this place.</p>

<p>For a curve of degree greater than 1, the and last knots are repeated multiple times for one simple reason: you need to bring in more than one point to start and you need to eject more than one point to end.</p>

<p>Let's think about cubic curves for the moment, just to keep things simple.</p>

<p>A curve with the knot vector [0,0,1,1] is a uniform B-spline curve. </p>

<p>A curve with the knot vector [0,0,1,1,2,2] is non-uniform, but can be thought of as two uniform B-spline curves which connect at t=1, one corresponding to [0,0,1,1] and one corresponding to [1,1,2,2]. You can do this because the multiplicity of the knots is enough to "start" and "end" a cubic curve.</p>

<p>If you're faced with a curve with a knot vector like [0,0,1,2,2], you can insert a knot at 1 without changing the shape of the curve (this is the knot insertion procedure). This increases the number of control points by one; the knot insertion procedure adjusts the points around the new knot to accommodate it. But once you've done that, you have two uniform B-spline curves.</p>

<p>Knot insertion won't create overlapping control points unless you insert too many knots at the same place, and by "too many", I mean the degree of the curve. So for a non-uniform cubic curve, you'd insert knots so that every knot had multiplicity 2. That gives you a number of abutting uniform cubic curves, which you can then use de Boor's algorithm to split further.</p>

CC BY-SA 3.0
2015-08-26T22:03:14.283Z
I'm sorry I'm very new to NURBS: what do you mean by "maximum multiplicity"? I mean, when I do it in the former way, do I end up with multiple overlapping control points?
Ecir Hana
CC BY-SA 3.0
2015-08-27T01:20:13.860Z
Let me try to explain in the answer.
Pseudonym
CC BY-SA 3.0
2015-08-27T09:03:53.187Z
Pseudonym err no not a good knot vector to demonstrate this. I See thet i might need to expand the other post. Altough @EcirHana it might be a good idea to ask what a multilicity is.
joojaa
CC BY-SA 3.0
2015-08-27T13:03:38.617Z
You're probably right about that @joojaa.
Pseudonym
CC BY-SA 4.0
2015-08-26T21:57:14.240Z
2019-05-09T06:46:24.227Z
2019-05-09T06:46:24.227Z
Pseudonym
<p>Splitting Bezier curve into two parts at some parameter <code>t</code> is easy thanks to <a href="https://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm">De Casteljau's algorithm</a>.</p>

<p>Is there a similar algorithm for NURBS curves? How to split a NURBS curve?</p>

CC BY-SA 3.0
2015-08-25T14:44:00.587Z
I don't know if it will do the same, but De Boor's algorithm is the equivalent of De Casteljeau.  Interestingly, I know you can use De Boor's algorithm to split a NURBS or b-spline into a piecewise Bezier curve.
Alan Wolfe
<nurbs>
Splitting of NURBS curves
Ecir Hana
# Splitting of NURBS curves

(Asked by: username_0 on 2015-08-25)

Splitting Bezier curve into two parts at some parameter `t` is easy thanks to [De Casteljau's algorithm](https://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm).

Is there a similar algorithm for NURBS curves? How to split a NURBS curve?

**Tags:** nurbs

> **Comments:**
> **username_1**: I don't know if it will do the same, but De Boor's algorithm is the equivalent of De Casteljeau.  Interestingly, I know you can use De Boor's algorithm to split a NURBS or b-spline into a piecewise Bezier curve.  

---

## 1 answers

### Answer by username_2 on 2015-08-26. Score: 5 | Accepted answer

The way that NURBS curves are typically split at an arbitrary point is by [knot insertion](http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/NURBS-knot-insert.html). You insert knots at the split point until it is at maximum multiplicity, at which point you can just read off the two split curves.

However, you may not want to split at an arbitrary point. If the ultimate goal is to draw the curves or something like that, then it's worth splitting the curve at the existing knot points (that is, performing knot insertion until all knots are at maximum multiplicity) rather than inserting new ones.

This process splits the NURBS into *uniform* rational B-splines. Once you have that, you can use [de Boor's algorithm](https://en.wikipedia.org/wiki/De_Boor%27s_algorithm) to split further.

The number of knots in the knot vector is:

```
numKnots = degreeOfCurve + numControlPoints + 1

```

or if you prefer:

```
numKnots = orderOfCurve + numControlPoints

```

Inserting a knot thus increases the number of control points by one.

As you travel along a NURBS curve, each knot represents a place where one control point "drops out" and another one "enters". If a knot value is repeated, this means that more than one control point is replaced at this place.

For a curve of degree greater than 1, the and last knots are repeated multiple times for one simple reason: you need to bring in more than one point to start and you need to eject more than one point to end.

Let's think about cubic curves for the moment, just to keep things simple.

A curve with the knot vector [0,0,1,1] is a uniform B-spline curve.

A curve with the knot vector [0,0,1,1,2,2] is non-uniform, but can be thought of as two uniform B-spline curves which connect at t=1, one corresponding to [0,0,1,1] and one corresponding to [1,1,2,2]. You can do this because the multiplicity of the knots is enough to "start" and "end" a cubic curve.

If you're faced with a curve with a knot vector like [0,0,1,2,2], you can insert a knot at 1 without changing the shape of the curve (this is the knot insertion procedure). This increases the number of control points by one; the knot insertion procedure adjusts the points around the new knot to accommodate it. But once you've done that, you have two uniform B-spline curves.

Knot insertion won't create overlapping control points unless you insert too many knots at the same place, and by "too many", I mean the degree of the curve. So for a non-uniform cubic curve, you'd insert knots so that every knot had multiplicity 2. That gives you a number of abutting uniform cubic curves, which you can then use de Boor's algorithm to split further.

> **Comments:**
> **username_0**: I'm sorry I'm very new to NURBS: what do you mean by "maximum multiplicity"? I mean, when I do it in the former way, do I end up with multiple overlapping control points?  
> **username_2**: Let me try to explain in the answer.  
> **username_3**: username_2 err no not a good knot vector to demonstrate this. I See thet i might need to expand the other post. Altough @username_0 it might be a good idea to ask what a multilicity is.  
> **username_2**: You're probably right about that @username_3.  

---

