3.4 向量积:测量定向区域
如前所述,向量积以两个三维向量和作为输入,其输出是另一个三维向量。它与点积的相似之处在于,输入向量的长度和相对方向决定了输出;但不同之处在于,它的输出不仅有大小,还有方向。我们需要仔细思考三维空间中方向的概念,以理解向量积的作用。
3.4.1 在三维空间中确定自己的朝向
在本章开头介绍轴、轴和轴时,我提出了两点:第一,我承诺常见的平面存在于三维世界中;第二,我设定了垂直于平面的方向,且平面在的地方。我没有明确指出的是,轴的正方向是向上的而不是向下的。
换句话说,如果我们从通常的角度来看平面,可以看到轴正半轴从平面上向我们延伸。另一种选择是让轴正半轴远离我们(见图3-34)。
图3-34 像在第2章中那样,在三维空间中定位自己以观察平面。当观察平面时,我们选择正轴指向我们,而不是远离我们
这里的区别并不是角度的问题。这两种选择代表了三维空间的不同方向,从任何角度看都是可以区分的。假设我们漂浮在轴的某个正坐标上,比如图3-34中的上图。可以看到轴的正方向是从轴的正方向逆时针旋转了1/4圈;否则,轴的朝向就是错误的。
现实世界中的很多事物都有方向性,与它们的镜像看起来并不完全相同。例如,鞋的左右脚大小和形状相同,但方向不同。普通的咖啡杯没有方向,没有标记的咖啡杯是没法通过照片来区分的。但如图3-35所示,如果两个咖啡杯在相反的两面上有相同的图案,是可以区分的。
图3-35 没有图案的杯子与其镜像是同一对象,一面有图案的杯子则与其镜像不同
大多数数学家用手作为检测方向的现成工具。我们的手是定向的,所以即使右手或左手不幸脱离身体,我们也能分辨出它们。你能分辨出图3-36中的手是右手还是左手吗?
图3-36 这是右手还是左手
很明显,这是右手:如果是左手,指尖上不可能有指甲!数学家可以用手来区分坐标轴的两种可能方向,称为右手方向和左手方向。右手方向的规则如图3-37所示:如果右手食指指向轴正方向,中指、无名指和小指向轴正方向弯曲,那么你的拇指就会指明轴的正方向。
图3-37 右手规则帮助我们记住选择的方向
这就是右手规则,如果它与你的坐标轴一致,那么你就(正确地)使用了右手方向。方向很重要!如果你正在实现程序来控制无人机或腹腔镜手术机器人,就需要保持上、下、左、右、前、后是一致的。向量积作为定向机器,可以帮助我们在所有的计算中跟踪方向。
3.4.2 找到向量积的方向
在告诉你如何计算向量积之前,我想向你展示它的样子。已知两个输入向量,向量积的结果垂直于这两个向量。例如,如果,,那么向量积恰好是(0, 0, 1),如图3-38所示。
图3-38 和的向量积
事实上,如图3-39所示,平面内任意两个向量的向量积都位于轴上。
图3-39 平面内任意两个向量的向量积都位于轴上
这清楚地说明了为什么向量积在二维中不起作用:它返回的向量位于包含两个输入向量的平面之外。我们可以看到,向量积的输出总是垂直于两个输入,即使输入并不在平面内也是一样(见图3-40)。
图3-40 向量积总是返回垂直于两个输入的向量
但是有两个可能的垂直方向,向量积只能在其中之一上。例如,(1, 0, 0) × (0, 1, 0)的结果正好是(0, 0, 1),指向轴正方向。轴上的任何向量,不管是正还是负,都垂直于这两个输入。为什么结果会指向正方向?
这就是方向的作用:向量积也遵循右手规则。一旦你找到了垂直于两个输入向量和的方向,向量积的方向就将三个向量、和置于了右手系中。也就是说,我们可以将右手食指指向的方向,将三指弯向,拇指指向的就是的方向(见图3-41)。
图3-41 右手规则告诉我们向量积指向哪个垂直方向
当输入向量位于两个坐标轴上时,不难找到它们的向量积指向的确切方向:它指向剩余坐标轴的一个方向。一般来说,如果不计算它们的向量积,就很难描述垂直于两个向量的方向。我们一旦知道如何计算它,就掌握了一个非常有用的特征。但是向量并不仅仅指定方向,还指定了长度。向量积的长度也蕴含有用的信息。
3.4.3 求向量积的长度
和点积一样,向量积的长度也是一个数,它提供了关于输入向量的相对位置的信息。它测量的并不是两个向量的对齐程度,而更像是“它们的垂直程度”。更准确地说,它告诉我们两个输入之间的面积有多大(见图3-42)。
图3-42 向量积的长度等于一个平行四边形的面积
如图3-42所示,以和为边的平行四边形的面积等于向量积的长度。对于给定长度的两个向量,在它们垂直时张成的面积最大。如果和在同一方向上,则张不成任何面积,向量积的长度为零。这是显而易见的:如果两个输入向量平行,则不存在唯一的垂直方向。
与结果的方向搭配,结果的长度能给我们一个精确的向量。平面上的两个向量保证有指向轴正方向或负方向的向量积。从图3-43中可以看到,平面向量张成的平行四边形越大,向量积越长。
图3-43 根据张成的平行四边形的面积,平面上的向量对具有不同大小的向量积
平行四边形的面积有一个三角公式:如果和的夹角为,面积就是。我们可以结合长度和方向来求一些简单的向量积。例如,(0, 2, 0)和(0, 0, -2)的向量积是多少?这两个向量分别位于轴和轴上,所以要想与它们垂直,向量积必须位于轴上。我们用右手定则来求出结果的方向。
用食指指向第一个向量的方向(轴正方向),再把三根手指弯向第二个向量的方向(轴负方向),我们发现大拇指指向轴负方向。向量积的大小是,因为轴和轴相交成90°角。(在这种情况下,平行四边形恰好是一个边长为2的正方形。)求得向量积的大小是4,所以结果是(-4, 0, 0):在轴负方向上长度为4的向量。
看起来,通过几何方法计算向量积是一种有良好定义的运算,但是这并不实用。一般来说,当向量并不总在坐标轴上时,要找到垂直结果所需的坐标并不容易。幸运的是,有一个明确的公式可以用输入坐标来计算向量积的坐标。
3.4.4 计算三维向量的向量积
向量积的公式乍一看很复杂,但我们可以用Python函数快速把它包装起来,然后毫不费力地进行计算。首先从和的坐标开始。虽然可以将其坐标设置成和,但是使用更好的符号会更清楚:和。比起用这样的任意字母来称呼它,记住是的坐标更加容易。根据这些坐标,向量积的公式为:
如果使用Python,则如下所示。
def cross(u, v):
ux,uy,uz = u
vx,vy,vz = v
return (uy*vz - uz*vy, uz*vx - ux*vz, ux*vy - uy*vx)
你可以在练习中试着使用这个公式。注意,与我们目前使用的大多数公式相比,这个公式似乎不能很好地推广到其他维度。它要求输入向量必须有三个分量。
这个代数程序与本章中的几何描述一致。因为它能给出面积和方向,所以向量积可以帮助我们判断,能否在三维空间中看到同样浮在空间中的多边形。例如,如图3-44所示,站在轴上的观察者是看不到和张成的平行四边形的。
图3-44 向量积指出多边形对观察者是否可见
换句话说,图3-44中的多边形与观察者的视线平行。利用向量积,我们不用画图也能知道这一点。因为向量积与人的视线垂直,所以多边形是不可见的。
现在是时候开始我们的终极项目了:用多边形构建一个三维对象,并在二维画布上绘制它。你会使用到目前为止见过的所有向量操作。特别是,向量积将帮你判断哪些多边形是可见的。
3.4.5 练习
练习3.19:如图3-45所示,各图中都存在三个相互垂直的箭头,分别表示轴、轴和轴的正方向。在这些显示为三维框的透视图中,框的背面是灰色的。四幅图中的哪一个与我们选择的相符?也就是说,哪张图显示了我们所画的轴、轴和轴,即使从不同的角度来看也是如此?
图3-45 以上哪些轴线与我们约定的方向一致
解:从上向下看图3-45a,我们会像往常一样看到轴和轴,且轴指向我们。与我们约定的方向一致的是图3-45a。
在图3-45b中,轴指向我们,而轴正方向与轴正方向顺时针成90°角。这与我们的方向不一致。
如果我们从轴正方向上的某点看图3-45c(从框的左侧),会看到轴正方向与轴正方向逆时针成90°角。图3-45c也与我们的方向一致。
从框左侧看图3-45d,轴正方向应该是朝向我们的,轴正方向仍位于轴正方向的逆时针方向。这与我们的方向也是一致的。
练习3.20:如果把三条坐标轴立在镜子前,镜子里图像的方向是相同的还是不同的呢?
解:镜像的方向是相反的。从这个角度看,轴和轴仍然指向相同的方向。在原图中,轴正半轴在轴正半轴的顺时针方向,但在镜像中变成了逆时针方向(见图3-46)。
图3-46 轴、轴和轴及其镜像
练习3.21:(0, 0, 3) × (0, -2, 0)的结果指向什么方向?
解:如果我们把右手食指指向(0, 0, 3),也就是轴正方向,然后弯曲三指指向(0, -2, 0),即轴负方向,则大拇指会指向轴正方向。因此,(0, 0, 3) × (0, -2, 0)指向轴正方向。
练习3.22:(1, -2, 1)和(-6, 12, -6)向量积的坐标是多少?
解:这些向量互为彼此的负标量乘积,它们指向相反的方向且不会张成任何面积。因此,向量积的长度为零。唯一一个长度为零的向量是(0, 0, 0),这就是答案。
练习3.23(小项目):如图3-47所示,平行四边形的面积等于它的底边长乘以它的高。
图 3-47
基于此,请解释公式是有意义的。
解:在图3-48中,向量定义了底边,所以底边长度为。可以从的头部到底边画一个直角三角形。的长度就是斜边,而三角形的高就是我们要找的高。根据正弦函数的定义,高为。
图3-48 平行四边形的面积公式使用其一个角的正弦来表示
因为底长为,高是,所以平行四边形的面积确实是。
练习3.24:向量积(1, 0, 1) × (-1, 0, 0)的结果是什么?
(a) (0, 1, 0)
(b) (0, -1, 0)
(c) (0, -1, -1)
(d) (0, 1, -1)
解:这些向量位于平面,所以它们的向量积在轴上。将右手食指指向(1, 0, 1)的方向,并将三指向(-1, 0, 0)方向弯曲,则拇指会指向轴负方向(见图3-49)。
图3-49 通过几何方法来计算(1, 0, 1)和(−1, 0, 0)的向量积
可以求出向量的长度和它们之间的夹角,从而得到向量积的大小,但我们已经从坐标中得到了底长和高。因为它们都是1,所以长度也是1。因此,向量积为(0, -1, 0),它是轴负方向上长度为1的向量,答案是(b)。
练习3.25:使用Python的
cross
函数计算,其中第二个向量是几个不同的值。每个结果的坐标是多少,为什么?解:无论选择哪个向量,结果的坐标都是零。
>>> cross((0,0,1),(1,2,3)) (-2, 1, 0) >>> cross((0,0,1),(-1,-1,0)) (1, -1, 0) >>> cross((0,0,1),(1,-1,5)) (1, 1, 0)
因为,所以和都是零。这意味着不管和的值是多少,向量积公式中的都是零。从几何学上讲,这是有意义的:向量积应该垂直于两个输入,并且垂直于(0, 0, 1),分量必须为零。
练习3.26(小项目):用代数法证明垂直于和,不管和的坐标是多少。
提示:将和展开成坐标用于证明。
解:在下面的方程中,设,。我们可以将用如下的坐标方式表示,把向量积展开成坐标,并进行点积运算。
在继续展开点积后,我们看到共有6项。每一项都能与另一项抵消。
因为完全展开后,所有项都被抵消了,所以结果是零。为了节省“墨水”,这里不再展示的结果,但情况仍不变:出现了6个项并相互抵消,结果为零。这意味着垂直于和。