Fre*_*red 5 math geometry wolfram-mathematica
我正在寻找一种算法来计算3D中一个点和一个线段之间的平均距离.因此,给定代表线段AB的两个点A(x1,y1,z1)和B(x2,y2,z2),以及第三个点C(x3,y3,z3),AB上每个点之间的平均距离是多少指向C?
我也对两个线段之间的平均距离感兴趣.因此,给定AB段和CD段,从AB上的每个点到CD上最近点的平均距离是多少?
我对我尝试的网络搜索没有任何运气,所以任何建议都将不胜感激.
谢谢.
如果你的意思是我认为你所说的“平均”(和“距离”,即dreeves提到的L2范数),那么我认为这里有一个程序可以用于查找点和线段之间的平均距离。您需要一个dot(A,B)获取两个向量的点积的函数。
// given vectors (points) A, B, C
K1 = dot(A-C,A-C)
K2 = 2*dot(B-A,A-C)
K3 = dot(B-A,B-A)
L1 = sqrt(K3*(K1+K2+K3))
L2 = sqrt(K3*K1)
N = 4*K3*L1 + 2*K2*(L1-L2) + (K2*K2-4*K1*K3)*log((K2+2*L2)/(2*K3+K2+2*L1))
D = N / (8*K3^1.5)
Run Code Online (Sandbox Code Playgroud)
假设我正确地记录了所有内容,D那么这就是平均距离。
这基本上只是用于评估我在 Mathematica 中进行的积分结果的伪代码。可能有一些简洁的计算捷径,但如果有的话,我不知道。(除非有一个,否则我会质疑你真正需要多少来进行此计算)
如果您想找到从线段 CD 上最近的点到 AB 上所有点的平均距离,在大多数情况下,最近的点将是 C 或 D,因此您可以检查这两个点以查看哪个更近(可能使用其他答案中引用的一些最小距离计算)。唯一的例外是当 CD 和 AB 平行时,您可以从一个到另一个垂直,在这种情况下,您必须更精确地定义您的要求。
如果你想求 CD 上所有点和 AB 上所有点之间的平均距离……可以用二重积分来完成,尽管我不禁想到结果公式会有多么复杂。