1

想象一下笛卡尔空间中三角形的表面。如何找到给定点与该三角形表面的距离?

第 1 点:[30、24、22]
第 2 点:[35、13、19]
第 3 点:[21、29、85]

在这种情况下,点 [ 40, 25, 77 ] 距离上面定义的三角形表面有多远?

或者特别是 - 确定该距离的公式是什么?

4

2 回答 2

1

这完全取决于您希望距离来自哪里(三角形的哪一部分?)。如果您知道三角形的起点(可能是中心?),那么从数学的角度来看,公式为:

Point 1: [a1,b1,c1] (point on triangle)
Point 2: [a2,b2,c2] (point to find distance to)

distance vector = [a2-a1, b2-b1, c2-c1]
distance = the magnitude of above = sqrt((a2-a1)^2 + (b2-b1)^2 + (c2-c1)^2))

我不知道 C#,但这将是它的伪代码(它背后的数学)

编辑:要找到三角形的中心...

Point 1: [x1, y1, z1]
Point 2: [x2, y2, z2]
Point 3: [x3, y3, z3]
Centre = [(x1+x2+x3)/3, (y1+y2+y3)/3, (z1+z2+z3)/3]
于 2013-05-06T01:52:41.230 回答
1

我会假设你的意思是最小距离。否则,距离会根据您选择的三角形上的哪个点而变化。要看到这一点,只需在桌子上画一个三角形,然后在上面放一支笔。

简短的回答是,要找到最小距离,您需要构建一个每列一个点的矩阵,如下所示:

    [ 30 35 21 ]
A = [ 24 13 29 ]
    [ 22 19 85 ]

并阅读有关详细信息的预测。如果你已经有一段时间没有研究这种东西了,不要害怕。这不是火箭科学(实际上,也许它是对火箭科学的介绍),但需要一些投资才能理解。为了帮助你,我会先提一点理论,然后再谈实现。

为了给您一些直觉,请握住那支笔。

让我们从最简单的情况开始:要获得最小距离,请将笔与桌子完全垂直,笔的末端在三角形的某个地方。把你的观点想象成笔尖。您刚刚证明了三角形中最接近您的点的点是该点在三角形中三个点定义的空间上的投影。换句话说,笔的另一端。三角形中任何其他点的距离必须大于笔的长度。

现在让我们看一个并发症。假设您想要的点并不完全在三角形“上方”,而是在某处的一侧。说,完全脱离了桌子的表面。在这种情况下,三角形中最接近该点的点将是三个点本身之一,或者是连接三个初始点的三个线段上的一个点。

现在来实现:最重要的是,如果你可以使用一个简单的线性代数库,你会省去很多麻烦。最难的一步是反转矩阵,虽然反转 3x3 矩阵通常很容易,但当点共线时(即考虑三个对齐的点),当量级非常不同时(即考虑一个非常长的瘦三角形)等。

您可以为这个问题编写一个特定于问题的算法,因为它只有 3x3,但最终您需要求解一个投影系统,因此您的算法将执行与 Wikipedia 上基本相同的数学运算页。所以你最终可能会重新发现线性代数,这肯定会浪费很多时间。

我最后的实施建议是检查游戏或 3D 库中的关键字“投影”。如果你幸运的话,有一个你可以调用的函数。否则,请获得一些不错的 CLR 线性代数库,构建矩阵,并在 100 行左右的代码中高效地完成整个计算。

于 2013-05-06T02:20:52.253 回答