叉积

来源:互联网 发布:三星网络光端机 编辑:程序博客网 时间:2024/05/16 11:00

叉积

  叉积的计算是线段方法的核心。考虑如图33-1(a)所示的向量p1和p2。我们可以把叉积解释为由点(0,0),p1,p2 和 p1+p2=(x1+x2,y1+y2)所构成的平行四边形的有向面积。另一种与之等价但更有效的叉积定义方式是将之看做矩阵行列式:

p1×p2=det[x1y1x2y2]=x1y2x2y1=p2×p1

p1×p2值为正,则相对于原点(0,0)来说,p1位于p2的顺时针方向;若p1×p2值为负,则p1位于p2的逆时针方向。图(b)展示了向量p的顺时针和逆时针区域。叉积为0时出现边界情况;在这种情况下,两个向量是共线的,指向相同方向或者相反方向。

  为了确定相对于公共端点p0,有向线段p0p1是在顺时针还是逆时针方向更接近p0p2,我们将p0作为原点从而使问题简化。用p1-p0来表示向量p1=(x1,y1),其中x1=x1x0y1=y1y0,类似的,可以定义p2-p0。然后,计算叉积
(p1p0)×(p2p0)=(x1x0)(y2y0)(x2x0)(y1y0)

如果叉积为正,那么p0p1 位于p0p2 的顺时针方向;否则为逆时针方向。

确定连续线段是向左转还是向右转

  我们讨论的下一个问题是在点p1处,两条连续的线段p0p1¯¯¯¯¯¯p1p2¯¯¯¯¯¯ 是向左转还是向右转。也就是说,找出一种方法可以确定一个给定角p0p1p2的转向。采用叉积运算来解决这个问题可以避免计算角度。如图33-2所示,我们只需简单地判断一下有向线段p0p2是位于p0p1的顺时针还是逆时针方向。因此,我们计算出叉积(p2p0)×(p1p0)。若结果为负,则p0p2p0p1的逆时针方向,在p1处左转。同理,若结果为正,则在顺时针方向,在p1处右转。而叉积为0则意味着p0、p1和p2三者共线。