Algo for finding nearest coordinates of arbitrary point along complex 3D line?

23 次查看(过去 30 天)
I am looking for an algorithm that will take inputs of xyz coordinates of a series of points, and xyz coordinates of an associated line plot and will output the closest point along the line plot to each of the points.
The most basic example I can give is the following:
lineX = [0:10];
lineY = lineX;
lineZ = lineY;
point1 = [5 5 5];
point2 = [5 5 10];
point2 = [2 2 2];
I would hope the algo would give me the nearest coordinates along the line segment of each point (point1_nearest = 5 5 5, point2_nearest = 5 5 5, point3_nearest = 2 2 2] Any help would be most appreciated!
The problem is in practice the line coordinates will be more complicated ([0 0 0; 0.4 10 6; 0.5 15 7]) and it gets tedious to iterate through each coordinate and find the minimum distance.

回答(2 个)

Kevin Claytor
Kevin Claytor 2016-2-16
Find the minimum squared distance between the point and the line:
pointX = point(1);
pointY = point(2);
pointZ = point(3);
[~, index] = find(min( (lineX - pointX).^2 + (lineY - pointY).^2 + (lineZ - pointZ).^2 ));
lineX(index), etc. gives you the closest line value for x, etc..

Kelly Kearney
Kelly Kearney 2016-2-16
I recommend distance2curve.m.

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by