Jump to content

  • Log In with Google      Sign In   
  • Create Account

Hermite splines


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 eppo   Crossbones+   -  Reputation: 2459

Like
0Likes
Like

Posted 20 August 2009 - 10:11 PM

Hi, I can't seem to figure out how to do the following: how can I rewrite a standard 2D Hermite spline (as in the picture below) into a "V as a function of T"-form? I've imported timeline-curves like these from a 3D animation app, but I can't get the animation to behave exactly like it does in the app. [Edited by - eppo on August 21, 2009 5:47:14 AM]

Sponsor:

#2 Dave Eberly   Members   -  Reputation: 1161

Like
0Likes
Like

Posted 21 August 2009 - 03:30 AM

For a 2D spline, you have V(t) = a0 + a1*t + a2*t^2 + a3*t^3. The following boundary conditions are specified by you: V(0), V'(0), V(1), and V'(1). The construction of a0 through a3 is just like you do for 3D splines. Have you tried this? And if so, what appears to be the conceptual difference between V(t) and what you see in your application?

#3 eppo   Crossbones+   -  Reputation: 2459

Like
0Likes
Like

Posted 21 August 2009 - 08:25 AM

I'm thinking because I want to use T as the horizontal axis, I should be using 1D splines. Before I placed T in a 2D curve's points/tangents' x-component.

#4 Dave Eberly   Members   -  Reputation: 1161

Like
0Likes
Like

Posted 21 August 2009 - 10:04 AM

What I suggested is "1D splines". The a0, a1, a2, and a3 are scalars (1-tuples), not 2-tuples. I use "t" rather than "T" for the independent variable, because "T" looks too much like the name of a tangent vector :)

The 1D-spline approach produces V(t) = a0 + a1*t + a2*t^2 + a3*t^3, where a0 = V(0), a1 = V'(0), a2 = 3*(V(1)-V(0)-V'(0)) - (V'(1)-V'(0)), and a3 = (V'(1)-V'(0)) - 2*(V(1)-V(0)-V'(0)).

The 2D-spline approach fits a curve (x(t),y(t)) = b0 + b1*t + b2*t^2 + b3*t^3, where b0, b1, b2, and b3 are 2-tuples. Your boundary conditions are (x(0),y(0)) = (0,V(0)), (x'(0),y'(0)) = (1,V'(0)), (x(1),y(1)) = (1,V(1)), and (x'(1),y'(1)) = (1,V'(1)). The algebra gets you to b0 = (0,V(0)), b1 = (1,V'(0)), b2 = 3*[(1,V(1)) - (0,V(0)) - (1,V'(0))] - [(1,V'(1)) - (1,V'(0))], and b3 = [(1,V'(1)) - (1,V'(0))] - 2*[(1,V(1)) - (0,V(0)) - (1,V'(0))].

If you extract the x-component from the 2D-spline approach, you get x(t) = t. The y-component is y(t) = V(t), where V(t) is what you fit with the 1D-spline approach. So in this case, the two approaches give you the same thing.

The difference between the 1D-spline and 2D-spline methods would be when you specify tangents (x'(0),y'(0)) and (x'(1),y'(1)) where x'(0) is NOT 1 and y'(0) is NOT 1.


#5 Arikwex   Members   -  Reputation: 109

Like
0Likes
Like

Posted 22 August 2009 - 09:32 AM

Seeing as Ive been doing this for the past two months I hope I can answer this right :D

You have 4 conditions to satisfy:
value continuity at two ends, and
derivative continuity at two ends.

four conditions implies 4 term polynomial:
ax^3 + b*x^2 + c*x + d = f(x)

So there are TWO choices from here: the general approach, and the specific approach.

I prefer the general approach so I'll only cover that:
The function f(x) can be written as:

value_at_node1 * N1(x) + value_at_node2 * N2(x) + slope_at_node1 * N3(x) + slope_at_node2 * N4(x)

where N1,2,3, and 4 are four different polynomials.
N1 and N2 provide value continuity and N3 and N4 provide derivative continuity.
Setup a matrix equation to solve the coeffecicents of these polynomials:

[ x1^3 x1^2 x1 1 ] [ a1 a2 a3 a4 ] [1 0 0 0 ]
[ x2^3 x2^2 x2 1 ] [ b1 b2 b3 b4 ] [0 1 0 0 ]
[ 3x1^2 2x1 1 0 ] X [ c1 c2 c3 c4 ] = [0 0 1 0 ]
[ 3x2^2 2x2 1 0 ] [ d1 d2 d3 d4 ] [0 0 0 1 ]

Solve this for the matrix with all of the a,b,c,d's in it.
The coefficients a,b,c,d correspond to a particular N(x) function.

Ni(x) = ai * x^3 + bi * x^2 + ci * x + di

Using that information you can set the four value you know to create the desired curve.

For more information look into FEM interpolation polynomials for C1 continuous systems.

Good luck and feel free to ask for more detail if you want :D

#6 eppo   Crossbones+   -  Reputation: 2459

Like
0Likes
Like

Posted 25 August 2009 - 12:00 AM

Thanks for your replies.
I'm not sure they can help me fix my problem though. This page discusses the same issue I'm having. Basically, my mistake was the idea that for any t, x would be equal on a 2d curve. But the solution they offer with the cubic bezier approximation seems a little archaic to me.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS