I want to create a curve that follows the shortest path between two points. Mathematically, this is the geodesic ( https://en.wikipedia.org/wiki/Geodesic )
Just doing a "curve on surface" with two points with the default options doesn't look so good (see all the wiggles below). Any ideas how to get what I want? I've attached the part (NX10) if you want to try.
Solved! Go to Solution.
Did you try Project Curve? Create a line between the two points and then project it to the surfaces. You end up with a similar result, except without the wiggles.
You could also try loosening the tolerance on the Curve on Surface to eliminate the wiggles.
Thanks, but the wiggles aren't the problem. The problem is that I need the shortest curve possible between two points.
There are a few ways to get something close but I'm hoping to find a way to get an exact solution. For example, Rhino has a ShortPath function: http://docs.mcneel.com/rhino/5/help/en-us/helpmedia/shortpath.mp4
Here is a way of getting it closer. Certainly mathematically is is not exact. What I did was to project to one face at a time. After one face projection is done a new line is created for the next to face projection.
Just out of curiosity, what is the purpose of the geodesic? Geodesics are lots of fun, mathematically, but their practical uses are few and far between, as far as I know. If you have some new application, I'd be interested to hear about it.
Actually, you are probably using Geodesic curves all the time but just don't know it. They have some nice properties.
1. They represent the minimal distance between two points while staying on a surface. So, if you are cutting or laying down tape, it results in the mimimal amount of material. IF you are moving a robot arm from point A to point B but need to avoid some volume, the Geodesic helps with the minimum movement distance.
2. They are straight (within the surface). Again, this is nice for anything you want to lay on a surface since it will avoid wrinkles. If you are at your desk, take some scotch tape and wrap it around something without forcing it to curve. This is a geodesic.
Geodesics on a plane are straight lines. On cylider they are either a straight line, a circle, or a helix which are all pretty useful.
I just need a general solution
A projected staight line is possible using intersection as can be seen in the image.
Thanks. I was aware of the tape-laying application; it turns up often when designing with composites This works because points on the geodesic have zero geodesic curvature. This is related to the minimum distance criterion, but it takes a few pages of equations to see this, AFAIK.
When moving a robot, you usually need the fastest path, not the shortest, and following a surface will usually slow you down. And the geodesic is the shortest path only if the surface is convex, anyway -- you can make a straight-line jump across any concave regions.
Anyway, computing geodesics is hard. On all but the simplest surfaces (planes and cylinders), you have to solve some differential equations numerically. Algorithms for polygonal (facetted) objects are not too bad, so that might be an option, depending on your accuracy requirements.
There is one command that I know of that supports geodesic. It is offset curve in face, one of the offset methods supports it. I assumed that if had the correct curve on surface to start with, then offset curve in face would also offset its end point in a geodesic manner. I tried it and the curve it produced it indeed shorter than projecting the line. The projected the line was roughly 507mm. My curve was 498mm.
This is the only way I could think of constructing what you were after. (Liked the challenge). Recipe below.
1. red line between the points
2. on th eleft side, create intersection curve using a plane normal to curve
3. create a small curve on surface on the section
4. offset in face (geodesic) several times
5. curve on surface through the end points of the offset curve in face results
Dashed blue = your curve
Yellow = projection normal to face
Green = my constructed curve