# Motion on a parametric surface

Please excuse what will surely turn into a long rambling question, full of incorrect terminology.

I'm trying to figure out the mathematics of moving on a parametric surface - that is, for some constructed shape which has local coordinates (u,v) which map to world coordinates (x,y,z), and given a starting point in (u,v) and velocity vector in (u,v), what will be the ending position in (u,v). Additionally, a bunch of other questions, for example, if at the final position (u < 0), at what time did (u == 0)?

Supposing the most simple possible situation where (x,y,z) = (u,v,0), the problem is simple and I can use standard mechanics to work out the answer. After I thought about this for a while I realised the same applies to a cylinder and various others. Basically any shape you can make from a sheet of paper without stretching it.

If the surface is not uniformly stretched it isn't so simple. For example think of a bend in a road. The outside edge of the road might be at u=0 and the inside edge at u=1. A car travelling in a straight line in terms of (u,v) would perfectly follow the curve of the road in (x,y,z) coordinates. A car moving in a straight line in terms of (x,y,z) would be moving along a curve in (u,v), and if the car started off pointing along the road, it would soon hit the outside edge. It's still possible to figure out a solution though, if the road is flat, by doing the mechanics in (x,y,z) and then converting the result back to (u,v).

However, if the surface is eg a torus, this does not work. Trying to do the mechanics in (x,y,z) means you end up outside the surface.

Here is a diagram to illustrate my understanding of the problem:

Suppose you are standing on this torus. There is no gravity, and you have magnetic boots. You can walk along the red line without ever turning left or right in your local frame of reference. However, if you try to walk along the blue line, you always have to keep turning right.

So as an example of the type of result I am looking for, imagine you are standing on the blue line, tangental to it, and then you start walking in a "straight" line (not turning left or right). You will immediately deviate from the blue line. The line you end up walking is the line I am looking for.

Of course, I am not just looking for an answer for a torus. I'm looking for something that will work with a surface type that can approximate arbitrary shapes. Intuition tells me there probably isn't a solution to this problem for arbitrary parametric surfaces. Is there a solution for some specific type, e.g. Bezier patch, or NURBS surfaces? What conditions are necessary for the problem to be solvable? And what is the correct terminology for these concepts?

-
The question isn't entirely clear. Are you looking for a geodesic path along the surface with specified initial point and tangent vector? – Rahul Jul 5 '12 at 0:59
I'm not sure. Specific initial point and tangent vector is right. I've added a diagram to try to explain the type of path I'm talking about. – Alistair Buxton Jul 5 '12 at 1:45
Yes, a geodesic is definitely what you're looking for. In general, you have to solve an ODE involving the differential geometry of the surface to find it, and I doubt you can get a closed form except in very special cases. Unfortunately, this is where the extent of my knowledge ends, so I'll let someone with more expertise provide a full answer. – Rahul Jul 5 '12 at 7:46
You will almost certainly resort to numerical methods to find your geodesic path. I don't know what is commonly done when a parameterization is given, but there are a couple of popular algorithms for the case when your surface is represented by a triangle mesh. The fast marching method www.pnas.org/content/95/15/8431.full.pdf which is supposed to approximate a geodesic on a smooth surface, and one that gives the true geodesic path on the piecewise flat surface: research.microsoft.com/~hoppe/geodesics.pdf – yasmar Jul 5 '12 at 8:33
Thanks. I did some searching on geodesics and found a large number of papers covering this topic. I currently use an "unwrapping" approach for trimesh but I found it was difficult to implement due to rounding errors when the path passes very close to a vertex. Literal corner cases, you might say. So I was looking for a more direct method that would avoid these problems, by directly using the underlying control surface. – Alistair Buxton Jul 5 '12 at 15:05