判断三维空间点与平面相对位置关系的方法

  vtkPlane类中的成员函数:void EvaluateFunction(double x[3])、void EvaluateFunction(double x,double y,double z)用于估算点x[3]是否位于平面上、平面前或平面后(法线方向为前)。EvaluateFunction的源代码如下:

double vtkPlane::EvaluateFunction(double x[3])
{
  return ( this->Normal[0]*(x[0]-this->Origin[0]) +
           this->Normal[1]*(x[1]-this->Origin[1]) +
           this->Normal[2]*(x[2]-this->Origin[2]) );
}

判断三维空间点与平面相对位置关系的方法








向量的点乘(Dot Product是相应元素的乘积的和:
    V1( x1, y1)   V2(x2, y2) = x1*x2 + y1*y2
是一个标量(Scalar)。

点乘有什么用呢,我们有:
    A   B = |A||B|Cos(θ)
θ
是向量A和向量B间的夹角|A|为向量A的模(norm),也就是A的长度, 在二维空间中就是|A| = sqrt(x2+y2)。由上图可见余弦角度-90度到90度为正,所以EvaluateFuction中源码为计算点x与Origin形成的向量与法向量的点乘。结果为正时表示x与Origin形成的向量与法向量间夹角在-90度到90度之间,
也即在平面前;结果为负时表示x与Origin形成的向量与法向量间夹角在-90度到-180度及90度到180度为负,也即在平面后。