Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Shortest distance from point to Catmull-Rom spline

  1. Jun 16, 2003 #1
    If I have a point P, how do I project it onto a Catmull-Rom spline (ie. get the point on the spline closest to P)?

    This is how I calculate the spline, t goes from 0 to 1 (C++):
    Code (Text):

    float t2 = t * t;
    float t3 = t2 * t;
    out.x = 0.5f * ( ( 2.0f * p1.x ) +
        ( -p0.x + p2.x ) * t +
        ( 2.0f * p0.x - 5.0f * p1.x + 4 * p2.x - p3.x ) * t2 +
        ( -p0.x + 3.0f * p1.x - 3.0f * p2.x + p3.x ) * t3 );
    out.y = 0.5f * ( ( 2.0f * p1.y ) +
        ( -p0.y + p2.y ) * t +
        ( 2.0f * p0.y - 5.0f * p1.y + 4 * p2.y - p3.y ) * t2 +
        ( -p0.y + 3.0f * p1.y - 3.0f * p2.y + p3.y ) * t3 );
    out.z = 0.5f * ( ( 2.0f * p1.z ) +
        ( -p0.z + p2.z ) * t +
        ( 2.0f * p0.z - 5.0f * p1.z + 4 * p2.z - p3.z ) * t2 +
        ( -p0.z + 3.0f * p1.z - 3.0f * p2.z + p3.z ) * t3 );   
     
    Which I derived from the forumla on this page. Should I use the, whats it called, the smallest square solution or something? My math skills does not go beyond one variable calculus and linear algebra so I have no clue whatsoever.

    Regards,
    Lantz
     
  2. jcsd
  3. Jun 20, 2003 #2
    I tried looking into the actual solution but it quickly became bloated and even with mathematica on my side i ran into a 5th degree polynomial i needed to solve.

    But I bet you need speed more than pinpoint accuracy. I suggest you draw lines that "emanate" out from the source of the point and see what the distance is for each line to intersect with the curve and then simply choose the smallest as the direction you want to head. By adjusting the number of lines you use you can trade-off speed for accuracy.
     
  4. Jun 21, 2003 #3
    Yea you're right, speed is more important than accuracy in my case. And that sounds like a way to do it. I'll give it a shot and see if I come up with anything, thanks dude.

    /me scratches his head
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Shortest distance from point to Catmull-Rom spline
Loading...