I’m searching for an algorithm to calculate the average distance between a point and a line segment in 3D. So given two points A(x1, y1, z1) and B(x2, y2, z2) that represent line segment AB, and a third point C(x3, y3, z3), what is the average distance between each point on AB to point C?
I’m also interested in the average distance between two line segments. So given segment AB and CD, what is the average distance from each point on AB to the closest point on CD?
I haven’t had any luck with the web searches I’ve tried, so any suggestions would be appreciated.
Thanks.
If you mean what I think you mean by “average” (and “distance,” i.e. the L2 norm mentioned by dreeves), here’s a procedure that I think should work for finding the average distance between a point and a line segment. You’ll need a function
dot(A,B)which takes the dot product of two vectors.Assuming I’ve transcribed everything correctly,
Dwill then be the average distance.This is basically just pseudocode for evaluating the result of an integral that I did in Mathematica. There may be some neat computational shortcut for this but if there is, I don’t know it. (And unless there is one, I’d question how much you really need to do this computation)
If you want to find the average distance from the closest point on a line segment CD to all points on AB, in most cases the closest point will be either C or D so you can just check both of those to see which is closer (probably using some minimum-distance calculation as referenced in other answers). The only exception is when CD and AB are parallel and you could run a perpendicular from one to the other, in which case you’d have to define your requirements more precisely.
If you wanted to find the average distance between all points on CD and all points on AB… it could be done with a double integral, though I shudder to think how complicated the resulting formula would be.