如何使用镶嵌数据计算点到三角形的最短距离

时间:2020-06-24 17:44:07

标签: computational-geometry euclidean-distance tessellation

我不得不解决一个距离问题,我变得非常沮丧,因为尽管尝试了我在网上发现的几乎所有东西,但我仍然不知道该怎么做...这是我的问题:< / p> 我在汽车行业工作,我们使用细分数据(例如STL,在我的情况下为JT格式)。我的零件需要焊接。我有焊点的坐标。为了确保正确放置焊接点,我想计算焊接点是否碰到零件,或者换句话说,我要检查焊接点是否与零件碰撞。如果是,则可以焊接零件。否则,焊接点将在空中并且不能被焊接。因此,我想计算零件(基本上是上述格式的一组三角形或多边形)与点之间的距离。如果与三角形之一的距离小于焊接点的给定半径,则必须存在碰撞,因此焊接点位置正确并且可以焊接。

一个如何伪代码或任何可能有用的方法将不胜感激。我使用JTOpen Toolkit在c ++中进行编码。请注意,该点不一定必须位于三角形内。也许一个例子可以帮助您和我理解问题/答案(在下面的例子中没有冲突):

让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

先谢谢您!

1 个答案:

答案 0 :(得分:0)

在三角形相同距离处的点的轨迹是由以下组成的复杂表面

  • 在给定距离下平行于原始三角形的两个三角形;

  • 三个等距的圆柱体,分别位于等距的边上;

  • 点在顶点之间的距离相等的球体。

enter image description here

如果您面对三角形,您会发现这些表面被分割

  • 三个三角形的边

  • 顶点两个侧面的法线。

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

请注意,在棋盘格化的情况下,必须考虑几个三角形。如果它们很多,将需要加速系统。这是一个广泛且有点技术性的话题。