Shortest distance from point to Catmull-Rom spline

  • Thread starter Lantz
  • Start date
  • #1
Lantz
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:
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
 

Answers and Replies

  • #2
suffian
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.
 
  • #3
Lantz
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
 

Related Threads on Shortest distance from point to Catmull-Rom spline

Replies
9
Views
14K
Replies
2
Views
969
Replies
7
Views
6K
  • Last Post
Replies
3
Views
2K
  • Last Post
Replies
2
Views
1K
Replies
3
Views
2K
Replies
15
Views
2K
  • Last Post
Replies
2
Views
8K
  • Last Post
Replies
3
Views
3K
  • Last Post
Replies
2
Views
851
Top