如何检查一个点位于一个平面(或平面)的一侧?

时间:2014-05-26 09:27:49

标签: algorithm graph-algorithm

Pic1

请先看看上面的pic1。 2个点组合一条线,我们称之为LineAB,我们可以从我们的视线方向得到一个法线,让我们称之为视图方向,向量(lineAB)X视图方向,我们可以得到一个正常的命名平面法线。在pic1中,平面法线指向顶部(绿色箭头),平面法线平面将地图切割成2个部分。

由于C点与平面法线的方向相同,我们将其视为内部,让我们返回true。点D在平面法线的反方向上,它在外面,返回假。

我的问题在pic2中如下: Pic2

现在,有很多点A,A1,A2 ... A5,... An,构建许多行如lineAA1,行A1A2,... LineAn-1An(一个条件是:相邻的2个角度)线条等于或大于90度)加上视线方向(从我们的视线方向),我们可以得到许多平面PAA1,PA1P2,... PAn-1An,它们也将地图切割成2个部分。

我需要检查内部或外部的一个点。 例如,点C在内部,但点D在外面。

2 个答案:

答案 0 :(得分:2)

关于一个平面分离昏暗(3)空间并不困难,考虑一个分段组装的暗(2)平面,我们需要深入探讨:

问题可能会减少为分离昏暗(2)空间 如果仅考虑法线的计算,则考虑第三维,那么可以用不同的方式解决:
设v =(a,b)为lineAB的向量。法线分别是(b,-a)或(-b,a)。

如果只想检查点多边形内,只需使用光线投射算法。

当将dim(2)空间划分为由多边形链分开的两个单独的空间时,检查点是否位于每个零件线上法线的正向直线上是不够的(A [ i-1])(A [i]):

多边形链
polygonal-chain
点P 相对于正常N0为正,但为负w.r.t.正常的N1。 此外,上角都在90°以上(也显示了一些反角),但多边形链也不是凸起的。向上的y轴。
要解决您的问题,您可以使用光线投射算法,向朝负y方向,即“向下”,并查看交叉点的数量是否为奇数。

  • 如果线以比起点更高的x坐标结束,则奇数量的交叉点意味着“true”
  • 如果线以低于起点的x坐标结束,则奇数量的交叉点意味着“假”

答案 1 :(得分:0)

您可以找到来自C点(带有视图方向)​​的光线是否与其中一个段AiAi + 1相交。它可以通过X坐标进行二元搜索(快速找到潜在的段)