[Math] NURBS Curves to Interpolate Points and Derivatives on a Surface of Revolution

bezier-curvecomputational geometrydifferential-geometrygeometryinterpolation

Problem in Prose

My starting point is a set of conic segments on a plane. Each of these conic segments interpolates between three points and known slopes on the two outer points.

I want to find a representation of these conics on a surface of revolution. The representation does not have to match the conics perfectly, but it must

  • match the points and end slopes of the conic when projected on the surface without inflection points$^{(1)}$. I can generate an arbitrary amount of points along the curve, but I would like to keep it as simple as possible.
  • match the surface of revolution in every point
  • be a reasonable interpolant (see bottom)

If it helps, there would be some freedom in selecting the generating curve of the surface of revolution, but my understanding is that it must be a NURBS curve, because one possible interpolant would be the generating curve itself. It can be a special case, though. A third degree bezier curve would suffice.

I expect the interpolant I am looking for, if it exists, would be a rational bezier curve. But I may be mistaken, so I am stating the problem as the search for a general NURBS curve to fit the criteria.

I will try to express a version of the above in precise mathematical terms below.

(1) I am unsure about the precise definition of the term "inflection point" in this case (3-dimensional curve on a surface), and I welcome suggestions to improve this part of the question.
Likewise, I recognize that there are also different ways to project points and slopes on the surface, again, hints as comments would be welcome. If slopes in the original curve could be preserved as angles relative to the $x$-$r$-plane at the point, it would be best.

Problem in Mathematical Terms

Given a function $g:t \in \mathbb{R}\rightarrow (x_t,y_t) \in \mathbb{R}^2$, the generatrix of a surface of revolution, with the axis of revolution being the x-axis (if this is helpful, it can be assumed to be a third order non-rational bezier curve);

further, the basic definition of a NURBS curve $C$ of $p$-degree with $n$ control points $\overset\rightarrow P_i$ with the weights $w_i$ ($i=0..n$)

$$
C(u)=\frac{\sum\limits_{i=0}\limits^{n}N_{i,p}(u)w_i \overset\rightarrow P_i} {\sum\limits_{i=0}\limits^{n}N_{i,p}(u)w_i}\\
C(u)=(C_x(u),C_y(u),C_z(u))
$$

where $N_{i,p}(u)$ is the generating function of B-splines on a knot vector $\overset\rightarrow U$;

and further, the points $\overset\rightarrow K_0$, $\overset\rightarrow K_1$ and $\overset\rightarrow K_2$, which are on the surface. That is, for each point $\overset\rightarrow K=(K_x,K_y,K_z)$ there exists a $t$, so that $K_x=x_t$ and $\sqrt{K_y^2+K_z^2}=y_t$;

and lastly the derivatives $\overset\rightarrow K_0'$ and $\overset\rightarrow K_2'$.

I am looking for a knot vector $\overset\rightarrow U$, control points $\overset\rightarrow P_i$ and weights $w_i$ so that

$C(u_a)=\overset\rightarrow K_0$, $C(u_b)=\overset\rightarrow K_1$, $C(u_c)=\overset\rightarrow K_2$, with $(u_a,u_b,u_c)\in \mathbb{R}^3$

and

$\frac{C(u_a)'}{\left| C(u_a)'\right|} = \frac{\overset\rightarrow K_0'}{\left| \overset\rightarrow K_0'\right|};
\frac{C(u_c)'}{\left| C(u_c)'\right|} = \frac{\overset\rightarrow K_2'}{\left| \overset\rightarrow K_2'\right|}\\$ (The end derivatives match in direction)

and further $C(u)$ being on the surface of revolution (as defined above) for every $u \in [u_a, u_c]$.

For this last part, I have to return to prose, sorry.

I would like $C$ to be reasonable interpolant between the three points. For example, a sort of helix around the surface could fit the description above, but wouldn't help me. Bezier curves are said to be "variation diminishing" to express this idea, but I can't find a good analogue for this case.

Relevant literature:

Les Piegl and Wayne Tiller "The NURBS Book" (1997)

Robert Schaback "Planar Curve Interpolation by Piecewise Conics of Arbitrary Type" (1993)

Best Answer

I'm not sure I understand the problem 100%, but here are some suggestions, anyway.

If you want an explicit NURBS representation of a curve that lies exactly on your surface of revolution, then the only option is a surface parameter space curve of the type mentioned by Fang.

So, take the data you want to fit, and map it back into a two-dimensional $uv$ space. Then, do whatever fitting you want to do in this space. This will give you curves $(u,v) = \big(u(t), v(t)\big)$ that match your data to the desired accuracy. In your fitting, you need to use polynomial or rational curves, and it would be best if the degree was pretty low. In fact, quadratic polynomials might be adequate.

Now, to get an explicit 3D NURBS curve, we need to form the composition of these $uv$ curves with the equation of the surface of revolution. So, suppose $S(u,v)$ is a rational parameterization of the surface of revolution. Then $t \mapsto S\big(u(t), v(t)\big)$ is a curve lying exactly on the surface of revolution that satisfies your constraints (if I understand them correctly).

Since this curve is a composition of rational functions, it is itself rational. There are a couple of ways to get the coefficients (i.e. the "control points") of this curve. One option is to fire up your favorite computer algebra system and just do the function compositions. Another way is to interpolate a suitably chosen set of points in 4D. If done correctly,the interpolation process will exactly reproduce the curve.

Actually, it looks like the composition mess is already worked out for you in this paper. and this one, and this one. The third one is the most recent, so it has the best references, and it's available on-line in PDF form.

If your surface of revolution (expressed in NURBS form) has degree $3 \times 2$, and your $uv$ curves are quadratic, then your final curve will have degree $3*2 + 2*2 = 10$. This is a bit high, but not too bad. And, if you want a NURBS curve that lies exactly on the surface, you have no choice.

The interpolation approach is probably the easiest to implement. Here's how you might approach it. If we regard the surface as a polynomial mapping from $[0,1] \times [0,1]$ to $\mathbb{R}^4$, then the composition curve $C(t) = S\big(u(t), v(t)\big)$ can be regarded as a polynomial mapping from $[0,1]$ to $\mathbb{R}^4$. If we use quadratic curves in $uv$ space, then as explained above, we know that $C$ has degree 10. So, take any 11 points on the curve, and interpolate them with a curve of degree 10, and you know that the curve you get will be exactly $C$, because this interpolation problem has a unique solution. So, take 11 parameter values $t_0, t_1, \ldots, t_{10} \in [0,1]$ and compute the ten points $Q_i = S\big(u(t_i), v(t_i)\big)$ for $i = 0,1, \ldots, 10$. Then find the control points of the unique curve $X$ of degree 10 such that $X(t_i) = Q_i$ for $i = 0,1, \ldots, 10$. You can find these control points just by solving a linear system -- easy. By uniqueness, $X$ must be the curve $C$ that we're seeking.

All of this reasoning applies only to a Bezier curve lying on a (rational) Bezier surface. If you want to deal with b-spline curves and surfaces, you first have to decompose them into their constituent Bezier pieces to do the interpolation calculations. Then, after you're all done, you can glue the Bezier curves back together to form NURBS curves, if you want to.