如何使用细分数据计算从点到三角形的最短距离

how to compute the shortest distance from a point to triangle using tesselated data

我必须解决一个距离问题,我感到非常沮丧,因为我不知道该怎么做,尽管我已经尝试了几乎所有我在网上找到的东西...这是我的问题:

我在汽车行业工作,我们使用镶嵌数据(比如 STL,在我的例子中是 JT 格式)。我有一个零件需要焊接。我有焊点的坐标。为确保焊点位置正确,我想计算焊点是否碰到零件,换句话说,我想检查焊点是否与零件碰撞。如果是,则可以焊接该零件。否则焊点会在空中,无法焊接。因此我想计算零件(基本上是上述格式的一组三角形或多边形)和点之间的距离。如果到三角形之一的距离小于给定的焊点半径,则必须发生碰撞,因此焊点位置正确并且可以焊接。

a 如何、伪代码或任何可能有用的东西,我们将不胜感激。我使用 JTOpen 工具包在 C++ 中编码。请注意,该点不一定必须位于三角形内。也许一个例子可以帮助你和我理解 problems/answers(下例中没有冲突):

设v1、v2、v3为三角形的顶点,px、py、pz为焊点坐标(半径1.8)。我也得到每个顶点的法线(n1、n2、n3),但我不知道如何处理它们...

v1x = -273.439
v1y = -787.775
v1z = 854.273

v2x = -274.247
v2y = -788.085
v2z = 855.244

v3x = -272.077
v3y = -787.864
v3z = 855.377

px = 140.99
py = -787.78
pz = 458.93

n1x = -0.113447
n1y = 0.97007
n1z = 0.214693

n2x = -0.113423
n2y = 0.970069
n2z = 0.214712

n3x = -0.110158
n3y = 0.969844
n3z = 0.217413

提前致谢!

三角形的等距点的轨迹是由

构成的复曲面
  • 在给定距离处平行于原始三角形的两个三角形;

  • 三个半圆柱对应边等距的点;

  • 顶点距离相等的球体。

如果你面向三角形看,你会发现这些表面被

分割
  • 三角形的三个边,

  • 顶点处边的六条法线。

因此,要计算给定点的距离,您需要将其正交投影到三角形平面,并在由半线和线段分隔的 7 个区域中找到它的位置。使用适当的空间旋转,可以在 2D 中解决问题。然后知道该区域,您将使用到平面、边缘或顶点的距离。

请注意,在曲面细分的情况下,必须考虑多个三角形。如果它们很多,则需要加速系统。这是一个广泛而有点技术性的话题。