# Get y from x on the cardinal spline curve

1. Nov 30, 2011

### mishalkk

Hi,

I have implemented the cardinal spline curve. ref link:- http://www.ibiblio.org/e-notes/Splines/Cardinal.htm

My requirement is to get the Y Value along the spline curve for a given x.Please look at the image attached below.

Here P1,P2,P3,P4 are my Points and cardinal spline passes through these points. But how can I find the point along the curve whose x-value is given.How can I find out the point of intersection?

2. Nov 30, 2011

### hotvette

What you need to do is find the value of t (or whatever your parameter is called) that produces the desired value of x (1.5 in your case). Should be close to 0.5 if you are using parameter range of 0 to 1 and the plot is to scale. Once you know t you can calculate the corresponding value of y. In this case, you have to solve a cubic, which in general can have 3 values of t that produce the same x. In your case, the function is very normal looking, so you would only have 1 real solution. As far as I know, there are basically two choices, (1) solve the cubic algebraically (internet search will help find the formula) or (2) use a numerical method such as Newton-Raphson or subdivision. Thus is the challenge when using parametric equations.

Last edited: Nov 30, 2011
3. Dec 8, 2011

### mishalkk

Thank you .I have followed the above method.

Formula : P(t) = s(-t3 + 2t2 – t)P1 + s(-t3 + t2)P2 + (2t3 – 3t2 + 1)P2 + s(t3 – 2t2 + t)P3 + (-2t3 + 3t2)P3 + s(t3 – t2)P4

where P is the point on the curve,P1,P2,P3,P4 are the actual points, s is the tanget and it is inversely proportional to t. and t is the tension. I calculate P(t)x and P(t)y co ordinates for the t varying from 0 to 1.

But these points are approximate. Not exact. I need to get the exact position on the curve.

Can anyone suggest me any methods with which I can find the point on the curve?

Or how the points are drawn using the actual points and control points?

Thank you

4. Dec 8, 2011

### I like Serena

Hi mishalkk!

I'm not sure where your "s" comes from.
I don't see it in your reference.
Is it simply s=1/t?

Either way, you should have a parametric curve P(t) consisting of P(t)x and P(t)y.
Solve P(t)x=1.5 to find t, and substitute in P(t)y, as hotvette said.

The difficulty of course is to solve P(t)x=1.5 for which you need to solve a cubic equation.
Do you need help with that?

5. Dec 8, 2011

### mishalkk

Hi,

http://algorithmist.wordpress.com/2009/09/28/cardinal-splines-part-2/

Cardinal splines specify the tangents at interior points based on the vector from previous point to subsequent point. Each tangent is parallel to this vector and some multiple of its length. For example, the tangent direction at point P1 is parallel to the vector P2 – P0, or we could simply write something like T1 = s(P2 – P0) where s is a real number.

Here is the pat of the code.
xtarget is the input value X, here in my case 1.5

Code (Text):

for (Double t = 0; t<=1; t += 0.01)
{
s = (1 - t) / 2;
P(t)x = s(-t3 + 2t2 – t)P1X + s(-t3 + t2)P2X + (2t3 – 3t2 + 1)P2X + s(t3 – 2t2 + t)P3X + (-2t3 + 3t2)P3X + s(t3 – t2)P4X

P(t)y = s(-t3 + 2t2 – t)P1Y + s(-t3 + t2)P2Y + (2t3 – 3t2 + 1)P2Y + s(t3 – 2t2 + t)P3Y+ (-2t3 + 3t2)P3Y + s(t3 – t2)P4Y

if(P(t)x=>xtarget)
{
return P(t)y;
}

-----------------
I get P(t)y which is approximate. But it is not the exact point on the curve(sometimes it is not on the curve). I need to get the exact points on the curve..ie P(t)y which is exactly on the curve.Any help is appreciated.

Thank you :)

6. Dec 9, 2011

I got it :)