Get y from x on the cardinal spline curve

  • Context: Undergrad 
  • Thread starter Thread starter mishalkk
  • Start date Start date
  • Tags Tags
    Curve
Click For Summary
SUMMARY

The discussion focuses on obtaining the Y value from a cardinal spline curve for a given X value, specifically using the formula P(t) = s(-t³ + 2t² – t)P1 + s(-t³ + t²)P2 + (2t³ – 3t² + 1)P2 + s(t³ – 2t² + t)P3 + (-2t³ + 3t²)P3 + s(t³ – t²)P4. The key challenge is solving the cubic equation P(t)x = 1.5 to find the parameter t, which is necessary to compute the corresponding Y value. The discussion highlights two methods for solving this equation: algebraically and using numerical methods like Newton-Raphson. The user ultimately seeks a precise method to determine the exact Y coordinate on the curve.

PREREQUISITES
  • Understanding of cardinal spline curves and their mathematical representation.
  • Familiarity with parametric equations and cubic equations.
  • Knowledge of numerical methods such as Newton-Raphson for root finding.
  • Basic programming skills to implement the spline calculations.
NEXT STEPS
  • Research "solving cubic equations" to understand algebraic methods for finding roots.
  • Learn "Newton-Raphson method" for numerical root finding in programming.
  • Explore "cardinal spline implementation in programming languages" for practical coding examples.
  • Investigate "interpolation techniques" to enhance spline accuracy and precision.
USEFUL FOR

Mathematicians, computer graphics developers, and anyone involved in spline interpolation or curve fitting who seeks to accurately compute points on cardinal spline curves.

mishalkk
Messages
4
Reaction score
0
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?

2v01mbn.jpg
 
Physics news on Phys.org
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:
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
 
Hi mishalkk! :smile:

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?
 
Hi,

Thank you for your reply :)
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:
 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 :)
 
I got it :)
 

Similar threads

  • · Replies 10 ·
Replies
10
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 7 ·
Replies
7
Views
3K
  • · Replies 2 ·
Replies
2
Views
1K