是否有可能根据有限的信息将两条线归类为锐线或钝线?

问题描述

我正在尝试确定两条任意线(在 3D 空间中)是形成角的内侧还是外侧。

进去,我得到的数据是形成连接的两个顶点、端点和法线。

Illustration of the data going in

我必须处理的数据是紫色点(实际上是两个离散顶点)、橙色点的位置以及两个面法线的方向(绿色箭头)。仅凭这些信息,我可以确定两条线是锐角还是钝角?

(我确实有一个蛮力解决方案,但有问题的例程需要尽可能快)

解决方法

如果你选择 dot(bNormal,a),如果法线指向或远离另一个向量,你将得到一个有符号值编码。

insidenormals

dot(bNormal,a)

dot(nB,A)

您可以看到该值将是

如果法线指向外:

outside normals

dot(bNormal,a)

dot(nB,A)

您可以看到该值将是

由此,您可以得出以下结论:

  • 如果 (dot(bNormal,a) > 0,向量之间的角度将是锐角
  • 如果 (dot(bNormal,a) < 0,向量之间的角度将是钝角
  • 如果 (dot(bNormal,a) == 0,向量是平行的,角既不是锐角也不是钝角