B-Spline: How to generate a closed curve using Uniform B-Spline curve?

4.5k Views Asked by At

Given $n+1$ control points; $P_0,P_1,...,P_n$ (where all are 2-dimensional points), and $k$ (which defines the order of the polynomial, and hence its degree; $k-1$) the B-Spline curve is defined by:
$$B(u)=\sum_{i=0}^{n}N_{i,k}(u)\cdot P_i$$

Where $N_{i,k}$ are the basis functions defined recursively as:
$$N_{i,0} = \begin{cases} 1 & \text{if }\hspace{5pt} t_i\leq u < t_{i+1}\\ 0 & \text{else} \end{cases}$$

and:

$$N_{i,k}=\frac{u-t_i}{t_{i+k-1}-t_i}\cdot N_{i,k-1}+\frac{t_{i+k}-u}{t_{i+k}-t_{i+1}}\cdot N_{i+1,k-1}$$

The $t_i$'s are "knots values" taken from the "knot vector": $t=(t_0,t_1,...,t_{n+k})$

I want to write a computer program to formulate this, so I could later - given $n$ points - draw a B-Spline closed curve.

Since I want to generate a closed curve, I need that the curve will not pass through the end points ($P_0$ and $P_n$), because I'm planning to do the following adjustment: I plan to wrap around the first $k-1$ and last $k-1$ control points to form a closed curve.
Meaning, given $n$ points $P_0,P_1,...,P_n$, I will add another $k-1$ points: $P_{n+1},P_{n+2},...,P_{n+k-1}$ and set them to be: $P_{n+1}:=P_0,P_{n+2}:=P_1,...,P_{n+k-1}:=P_{k-2}$, and this, hopefully, will give me a closed curve.

My question is this: What should the knot vector be, in order for me to get a B-Spline that does not pass through the first and last points?
In other words, what values should I assign to $t=(t_1,t_2,...,t_n+k)$ in order for the curve to be Uniform B-Spline curve? and when I say Uniform B-Spline curve I mean that in the same sense that this professor means here, because something tells me - and please correct me if I'm wrong - that Uniform B-Spline curve (again - in the sense that he means. I feel the need to emphasize this to avoid ambiguity - I found several definitions online), is exactly what I need to make the adjustment mentioned above.

This is very important to me, any help would be greatly appreciated!

1

There are 1 best solutions below

2
On BEST ANSWER

If you insist using uniform knot sequence (which is how you obtain a uniform B-spline curve), then as long as the number of knot values follow the rule: number of knots = number of control points + order, then you should get a closed curve. Note that the number of control points should include those repeated (k-1) control points.

For example, if you have a cubic B-spline curve with 7 control points $P_0$, $P_1$,...,$P_6$ where $P_4=P_0$, $P_5=P_1$ and $P_6=P_2$, the knot sequence can be (-0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75). Please note that the knot sequence is defined in this way (with negative knots) so that the valid range of the B-spline curve is still [0,1].

If you do not want to use uniform knot sequence, then the knot sequence still needs to follow a specific pattern in order for the curve to become periodic (i.e., closed with certain continuity at the joint). I will not elaborate on this topic here as you do not really need it.