如何判断一个点是否在任意凸多边形内部,还是外部
先说方法:利用向量叉乘后Z轴的正负判断,该方法计算简单。
如下图,以四边形为例,按照顺时针(也可以逆时针),分别计算向量 AB与AO、BC与BO、CD与CO、DA与DO的叉乘,所得结果的 z 轴分量同号则说明点 O 在四边形 ABCD 内部。
具体实现如下:
如果在四边形内部返回1,否则返回0
X0、y0为O点的坐标,X为四边形的x坐标构成的向量,Y为四边形的y坐标构成的向量
z1 = (X[1] - X[0]) * (y0 - Y[0]) - (x0 - X[0]) * (Y[1] - Y[0])
z2 = (X[2] - X[1]) * (y0 - Y[1]) - (x0 - X[1]) * (Y[2] - Y[1])
z3 = (X[3] - X[2]) * (y0 - Y[2]) - (x0 - X[2]) * (Y[3] - Y[2])
z4 = (X[0] - X[3]) * (y0 - Y[3]) - (x0 - X[3]) * (Y[0] - Y[3])
sum = z1/abs(z1) + z2/abs(z2) + z3/abs(z3) + z4/abs(z4);
if (sum == 4)
return 1;
else
return 0;
以下为向量叉乘原理:
原文:https://www.jianshu.com/p/ca048c46dee6
两个向量的叉乘,又叫向量积、外积、叉积,叉乘的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量组成的坐标平面垂直。
向量的叉乘公式为:
a ^ b = |a| * |b| * sinθ
叉乘的结果是一个新的向量,所以也称为向量积,它垂直于相乘的a、b两向量所构成的平面。
向量积被定义为:
模长:(在这里θ表示两向量之间的夹角(共起点的前提下)(0° ≤ θ ≤ 180°),它位于这两个矢量所定义的平面上。)
方向:a向量与b向量的向量积的方向与这两个向量所在平面垂直,且遵守右手定则。(一个简单的确定满足“右手定则”的结果向量的方向的方法是这样的:若坐标系是满足右手定则的,当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。c = a ∧ b)
叉乘几何意义:
在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于a和b向量构成的平面。
在3D图像学中,叉乘的概念非常有用,可以通过两个向量的叉乘,生成第三个垂直于a,b的法向量,从而构建X、Y、Z坐标系。如下图所示:
在二维空间中,叉乘还有另外一个几何意义就是:aXb等于由向量a和向量b构成的平行四边形的面积。
A向量和B向量叉乘的结果还是一个向量,二这个向量是永远垂直于A向量和B向量所在的这个平面的