math - 计算点到线段和线段到线段的平均距离

标签 math geometry wolfram-mathematica

我正在寻找一种算法来计算 3D 中点和线段之间的平均距离。因此,给定代表线段 AB 的两个点 A(x1, y1, z1) 和 B(x2, y2, z2) 和第三个点 C(x3, y3, z3),AB 上每个点之间的平均距离是多少点C?

我也对两条线段之间的平均距离感兴趣。那么给定段 AB 和 CD,从 AB 上的每个点到 CD 上最近点的平均距离是多少?

我尝试过的网络搜索没有任何运气,因此任何建议将不胜感激。

谢谢。

最佳答案

首先,两点之间的距离是坐标的两两差的平方和的平方根。
(例如,从 (0,0,0) 到 (1,1,1) 的距离是 sqrt(3) 但这适用于任意维度的任意点。)
这个距离被称为 l2-norm (小写 L)或欧几里得范数。
为点 A 和 B 之间的距离写出 norm(A,B)。

关于平均距离的有趣问题......
(请注意,找到从点到线或线段之间的最小距离是一个更常见的问题。这里有一个答案,其中包含针对该问题的很好的指针,但似乎在此期间已被删除。)

要找到从点 C 到线段 AB 的平均距离,请考虑到 A 和 B 之间任意点的距离,即 (1-k)A+kB,其中 k 的范围从 0 到 1。
这就是范数(C, (1-k)A+kB)。
所以平均距离是 norm(C, (1-k)A+kB) 从 k = 0 到 1 的积分。

Mathematica 可以对任何特定的 A、B 和 C 进行积分。

这是一个 Mathematica 实现:

avgd[A_,B_,C_] :=  Integrate[Sqrt@Dot[(1-k)*A+k*B-C, (1-k)*A+k*B-C], {k, 0, 1}]

被积函数也可以写成 Norm[(1-k)*A+k*B-C] .无论哪种方式,Mathematica 都可以针对特定点执行此操作,但无法象征性地对其进行整合,尽管显然 David 以某种方式让它这样做了。
这是评论中大卫的例子:
> avgd[{0, 0, 0}, {4, 0, 0}, {4, 3, 0}] // N

3.73594

对于两条线段之间的平均距离的问题,理论上我认为这应该有效:
avgd[A_,B_,C_,D_] := Integrate[Norm[(1-k)A+k*B - (1-j)C - j*D], {k,0,1}, {j,0,1}]

但是 Mathematica 似乎甚至对特定点都感到窒息,更不用说象征性的了。

关于math - 计算点到线段和线段到线段的平均距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2672069/

相关文章:

java - java Math 包中 0.555 的舍入模式不起作用

html - 盒子一 Angular CSS透明空心圆圈

vector - openGL 中的一颗行星 : vector data or texture mapping?

geometry - 如何检测两条线段相交的位置?

3D坐标绘图

sql - 在 SQL Server 2008 中使用十进制数据类型时遇到算术溢出错误

algorithm - 在等式约束的情况下求解线性规划

wolfram-mathematica - Mathematica 包入门

wolfram-mathematica - 从图形(不是 Hermite)中识别 Mathematica 插值函数

algorithm - 按顺序生成数字(幂)序列