指向特定平面中3D矢量的左侧或右侧?

时间:2017-07-22 03:37:44

标签: vector 3d geometry

我不确定之前是否提出过这样的问题,但我搜索过并没有找到我想要的内容。

我知道如何确定点是否在2D线的左侧或右侧。但是假设我们有一个3D矢量。当然3D矢量通过无限平面,但假设我们选择了一个我们感兴趣的平面,并且我们在这个平面上有一个特定的点,我们想要知道它是左侧还是右侧还是位于我们的矢量上(就所选平面而言)。怎么做?

2 个答案:

答案 0 :(得分:1)

您应该明确定义该平面的方向 - 例如,定义主(前向)法线N - 类OZ轴对于OXY平面是正常的。

如果您有A,B,C三角形并声称它是逆时针方向,则可以将前方平面法线计算为N = AB x BC

对于给定平面中的点A, B, D,计算mixed productABAD的矢量积,然后是结果的标量积和N

 mp = (AB x AD) . dot. N

如果向量AB, AD, N形成right-handed三元组且 D左侧为AB方向

,则此值的符号为正

答案 1 :(得分:0)

直观的解决方案是如下定义平面的坐标系。让我们对你问题中的三维向量进行标准化,然后调用结果单位向量v,让x成为你平面上的一个点,我们将其单位法线表示为n。您现在可以选择以x为中心的坐标系,该坐标系由三个3*1单位向量vnb=v.crossProduct(n)组成。

这个想法是,如果你在这个坐标系中表达一个点,那么如果它的b坐标为负,你就可以说它在左边。因此,如果其b坐标为正,则它将在右侧。

显然,如果你在这个坐标系中有一个点q,你可以使用

在世界坐标中写出它的表达式q_w
  q_w=R*q+x

其中旋转矩阵R是矩阵,其列是平面坐标系的单位轴:

  R=[v n b]

因此,如果您在世界坐标中有一个点Q,则使用上述关系的倒数计算transpose(R)*(Q-x),并查看b坐标是正还是负。