繁体   English   中英

在3D空间中找到一个点到三角形的距离

[英]Finding the distance of a point from a triangle in 3d space

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

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

在这种情况下,点[40、25、77]与上述三角形的表面相距多远?

或具体地说-确定距离的公式是什么?

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

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]

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

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

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

并阅读有关预测的详细信息。 自从您学习这类东西以来已经有一段时间了,请不要害怕。 它不是火箭科学(实际上,也许是火箭科学的入门),但是要了解它需要一些投资。 为了帮助您,我将首先介绍一下该理论,然后再讨论实现。

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

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

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

现在开始实现:骨感是,如果您可以使用简单的线性代数库,则可以省去很多麻烦。 最困难的步骤是对矩阵求逆,尽管对3x3矩阵求逆通常很容易,但是当点是共线的(即,考虑对齐的三个点),幅值相差很大(即,考虑一个点)时,它会变得复杂。非常长的细三角形),等等。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM