判断三维空间点与平面相对位置关系的方法
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度为负,也即在平面后。