2
$\begingroup$

I have an interpolation curve, where I want to use a cubic rational Bezier curve to interpolate two points with a given direction and curvature at each point. The interpolating curve should not have inflection points between the two end points, and have some other geometric properties that are sometimes summarized as it being a "fair" curve.

This problem has been discussed by a number of authors, with the result being that it is possible to find such a curve, and that there are still two remaining degrees of freedom. The challenge is to define parameters that define those degrees of freedom, while preserving the desired characteristics of the curve.

I am trying to implement this paper by Plauszny et al, which uses points on a curve of singular points as one of the parameters. By following the procedure as described I obtain x and z values from the table on page 20(68). According to the 5th line from the bottom of the pseudocode on page 22(70), I should be able to determine the point $\bar B=(\bar s, \bar t, \bar u)$. But how to do this mystifies me.

I have tried (without success)

  • Setting $y=1$ and performing the transformation $\Phi$ from page 12(70)
  • Setting $y=1-x-z$, so interpreting (x,y,z) as a barycentric system, and applying $\Phi$
  • Setting the guide curve $Q(y)=0$, solving for y, and then applying $\Phi$

None of these generally lead to valid curves, let alone ones that fit my boundary conditions. I suspect I am missing a step.

If there are any more tags to which you feel this relates, please feel free to add.

DOI of the paper in question: 10.1016/S0377-0427(98)00208-8

$\endgroup$
  • $\begingroup$ I'm puzzled about "no inflection points," even if we don't constrain the curvatures at the endpoints. Consider the following endpoint conditions for curve $C$:: At $(0,0)$ $C$ is pointing in the direction of $(1,1)$. $C$ ends at $(2,1$ at which point it is going in the direction of $3,6)$. Now somewhere beteen the edpoints, the slope of $C$ must be less than $1$ (otherwise, $C(2) \geq 2$). And at $(2,1)$ the slop is greater than 1. So either the slope is discontinuous or it is zero somewhere in between. $\endgroup$ – Mark Fischler Oct 7 '16 at 17:27
  • $\begingroup$ @MarkFischler Yes, your input directions wouldn't allow for such a curve. In many cases you know that the curve bends the same way in one segment. The paper is concerned with these cases. My application, for example, is in turbine airfoils. $\endgroup$ – RikkiTikkiTavi Oct 7 '16 at 23:05
  • $\begingroup$ The paper seems horribly complicated. If you want to interpolate curvature values, you might try using fifth degree polynomials, rather than rational cubics. In my experience, rational curves are more pain than they're worth. Differentiating leads to a mess, integrating is even worse, etc, etc. $\endgroup$ – bubba Oct 10 '16 at 0:33
  • $\begingroup$ @bubba I agree with you, but for reasons that don't fit in a comment, I think rational cubics are the way to go for now. I have implemented methods for differentiating them. Thank you for your advice. $\endgroup$ – RikkiTikkiTavi Oct 10 '16 at 9:59
0
$\begingroup$

It seems that my first interpretation (y=1) was correct, but there was a mistake in the method for obtaining for $x_1$ resp. $z_1$ on page 68. Wether in the paper or only in my implementation, I cannot say.

In any event, I used Wolfram Alpha, to re-compute the equations from eq. (3) (with Q=0, and y=1), and was able to reproduce the curves of Plauszny et al. Thank you to everyone who spent time considering this problem.

The input for Wolfram Alpha that I used is this:

0=(s*t*q*z+q*r*z^2)*x^2+(s*t^3+t*u*r*z^2)*x-t^4+t^3*u*z solve for x

and

0=(s*t*q*z+q*r*z^2)*x^2+(s*t^3+t*u*r*z^2)*x-t^4+t^3*u*z solve for z

respectively. The solution with the negative discriminator must be used.

(s,t,u,q=$s_0,t_0,u_0,q_0$ and r=$q_2$)

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.