今天学习了一下《计算几何》,里面讲了一下关于判断一个点是否在某个三角形内的问题(在二维平面上)。其中有一个算法是“同向法”,主要是用叉积来判断两个点是否在某条线段的同一侧,如图(1)所示。关于“同向法”再次不做具体介绍,感兴趣的同学可以百度之,或者关注本人后面更新的博文。关于《计算几何》系列的博文,我会继续学习,总结并发布到博客上。
图1
好了,言归正传,我们只知道在二维平面中,两个向量的叉乘其结果(叉积)是一个确切的值。例如向量A(x1,y1)和向量B(x2,y2)叉乘:A(x1,y1)xB(x2,y2) = |A||B|sina,其中a为向量A和向量B的夹角,|A|和|B|是向量A和向量B的模,sina是一个与角a有关的实数。可以看出向量A和向量B的最终结果是一个确切的实数。这和我们所知的两个向量的叉积是一个垂直于其平面的法向量有些背离了,因为我们得到确实是一个值,而不是一个向量。这是神马情况呢?
对于一个三角形ABC来说,CA和CB的夹角为a,那么三角形的面积S = 1/2(|CA||CB|sina),也就是S = 1/2(CAxCB),可以将该面积看作三角形的有向面积。由右手坐标系可知,正对着我们的方向为正面,那么背对着我们的一面就是负面,因为对于一个平面而言,肯定是有一个正面和负面了。如果定义该三角形的平面法向量的方向n,那么n就与向量CA,CB垂直,也就和三角形正面的法向量是一致的。所以说,二维向量的叉积不能简单地看作是一个标量,其实质上是一个向量。
下面将二维向量看作成z轴值恒为0的三维向量,例如向量OA(x1,y1,0),OB(x2,y2,0),其实质上还是平面xy上的向量,只不过引入z轴,使其具有三维空间的上的意义。可以根据三维向量的叉积公式(1-1)计算得出OAxOB的值。
(1-1)
其矩阵表示如下:
那么OAxOB = (0,0,x1y2-x2y1)(#1),很明显(0,0,x1y2-x2y1)也是一个向量,并且是垂直于向量OA和OB构成的平面的法向量,而其方向的正负就取决于它们的输入(x1,y1)和(x2,y2)的值。