Archived

This topic is now archived and is closed to further replies.

Parametric splines

This topic is 5004 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi; Did anyone implemented (or had the formulas) a program to, given a set of N points in 3d space, calculate the N-1 parametric equations for the segments? thanx

Share this post


Link to post
Share on other sites
depends on how you want to interpolate between those points of yours doesnt it? more information would be nice, like are the point evenly spaced?

Share this post


Link to post
Share on other sites
Well, its something like this: i have a camera, and i want it to follow a path....so i will choose some points from my world , and then the camera would pass in each point, in a curved path, like splines from MAX...the points are not linearly distributed, they are random....

Share this post


Link to post
Share on other sites
The most natural algorithm for this would be a natural cubic spline. Searching for that might find something useful. There are probably a lot of libraries, as well, that implement various cubic splines, NURBS, etc. I wrote my own to do various cubic splines about a year ago, but I don''t have it with me right now, and it probably could use some cleaning up, anyway.


int Agony() { return *((int*)0); }    Mwahaha... >8)

Share this post


Link to post
Share on other sites
Given 4 points, (p0, p1, p2, p3), and the parameter t, in the range of [0,1] and denoting an arbitrary point between p1 and p2:

P = (p3 - p2) - (p0 - p1)
Q = (p0 - p1) - P
R = p2 - p0
S = p1

return P*t*t*t + Q*t*t + R*t + S


It''s called cubic interpolation and requires 4 control points on the curve to calculate.

Share this post


Link to post
Share on other sites
@vertexnomral

i find that method works not very good. although the path is constant, the speed is lower close to the control points or something.

heres my personal favorite:

multiply this matrix:

[0, 1, 0, 0]
[-1/2, 0, 1/2, 0]
[1, -5/2, 2, -1/2]
[-1/2, 3/2, -3/2, 1/2]

with a matrix looking like this:
(cp stands for contol point)

[cp0x, cp0y, cp0z]
[cp1x, cp1y, cp1z]
[cp2x, cp2y, cp2z]
[cp3x, cp3y, cp3z]

the outcome matrix looks like this:

[c0x, c1x, c2x, c3x]
[c0y, c1y, c2y, c3y]
[c0z, c1z, c2z, c3z]

which are the coefficients for a third order curve, the number denoting the power of each term, ie x = c0x + c1x*i + c2x*i^2 + c3x*i^3, etc.

''i'' being in the range 0-1.

by far the best interpolation method ive come across, and all it needs as input are four points, you dont have to worry about setting directions or anything.

Share this post


Link to post
Share on other sites
quote:
Original post by Eelco
@vertexnomral

[0, 1, 0, 0]
[-1/2, 0, 1/2, 0]
[1, -5/2, 2, -1/2]
[-1/2, 3/2, -3/2, 1/2]

by far the best interpolation method ive come across, and all it needs as input are four points, you dont have to worry about setting directions or anything.


Funny ! Can you explain this a bit more ?
What is the matrix for a 5 control points spline ?

Share this post


Link to post
Share on other sites
quote:

Funny ! Can you explain this a bit more ?


yes, i can.

what do you know about the curve C(i) = c0 + c1*i + c2*i^2 + c3*i^3 we want?

we want C(0) to be cp1
we want C(1) to be cp2

so:

C(0) = cp1
C(1) = cp2

we have four unknown, our coefficients c0 to c3, so we need two more equations. we havnt yet defined anything about the direction, or derivative of our curve.

(cp2-cp0)/2 is the average gradient between these points. cp1 lies in the middle of them, so this would be a nice candidate for the derivative of C at point cp1 aka i=0. so:

C''(0) = (cp2-cp0)/2

and following the same logic:

C''(1) = (cp3-cp1)/2

yay, four equations.

c0*1 + c1*0 + c2*0 + c3*0 = cp1
c0*1 + c1*1 + c2*1 + c3*1 = cp2
c0*0 + c1*1 + c2*0 + c3*0 = (cp2-cp0)/2
c0*0 + c1*1 + c2*2 + c3*3 = (cp3-cp1)/2

omg, a martix!!11

if you rewrite that a bit you have the matrix that transforms your constants into your control points. invert it, and you get the opposite.

quote:

What is the matrix for a 5 control points spline ?


i dont think a 5-control point spline would make much sense, since your control points wouldnt lie symetricly spaced around your interval. 6 control point would though. if you pick 6 convenient relations between your function on the interval 0-1 and these 6 control points, you can apply the same logic to that, and get a 6x6 matrix.

Share this post


Link to post
Share on other sites
quote:
Original post by Eelco
quote:

i dont think a 5-control point spline would make much sense, since your control points wouldnt lie symetricly spaced around your interval. 6 control point would though. if you pick 6 convenient relations between your function on the interval 0-1 and these 6 control points, you can apply the same logic to that, and get a 6x6 matrix.


Well, the 3rd control point should lie on the middle of the spline, if my memories are right...

Anyway, I''ve got another question, maybe I should make a new post ; does someone know a method to generate the control points (or the tangent vectors at initial and final points) in function of some initial control points so that the spline "looks" nice ? I mean, the curvature should be equaly reparted along the spline and not mainly on the initial and final control point, or on the middle. Dont know if what I wrote is clear, but playing with tangent vectors should make you understand.

Share this post


Link to post
Share on other sites