3D游戏引擎数学基础3--向量(下篇)

在上一篇博文中,我们谈到了向量以及向量的运算,不过我们还留下了两个向量的运算没有讲解,那就是点乘,叉乘和数乘。向量的乘法在开发过程中使用的频繁程度就不多说了,我们直接来看。

向量数乘
标量可以与向量相乘,可以直观联想到,该运算可以对向量进行缩放。该运算不改变向量的方向,除非标量是负数,这样向量的方向与原来的方向相反。

k * u = (k * ux, k * uy, k * uz)

在Unity引擎中有对物体进行缩放的功能,其提供在三个坐标轴上的缩放,其底层的运算估计就是向量数乘。

于是,有需要重载一下乘法操作符了。

向量点乘
点乘是向量代数所定义的两种乘法之一,其运算规则如下

u · v = ux * vx + uy * vy + uz * vz

上述公式并不具有明显的几何意义。但由余弦定理,可以发现u · v = |u| * |v| * cosθ,即两个向量的点乘等于两者夹角的余弦乘以两个向量的模的乘积。由此可知,如果uv都是单位向量,则u · v就等于uv夹角的余弦。

根据这个规则,点乘有一些有用的性质:
1、若u · v = 0, 则uvuv垂直)
2、若u · v > 0, 则两向量之间的夹角小于90°
3、若u · v < 0,则两向量之间的夹角大于90°

然后,我们需要一个计算点乘的函数。

向量叉乘
向量代数所定义的第二种乘法为叉乘。与点乘不同(结果为一个标量),叉乘的结果是另一个向量。运算所得的向量puv彼此正交,也就是说pu正交, 也与v正交。叉乘的运算规则如下:

p = u x v = [(uy*vz - uz*vy), (uz*vx - ux*vz), (ux*vy - uy*vx)]

看着眼晕,其分量形式为:
px = (uy*vz - uz* vy)
py = (uz*vx - ux*vz)
pz = (ux*vy - uy*vx)

来张图有个具体的概念:
这里写图片描述
从图上可以看到,叉乘后的方向是向上的,那么是什么决定了这向上的方向呢?答案是:坐标系和叉乘顺序。由于我们采用左手坐标系,所以我们使用左手法则来判断叉乘结果的方向。左手手指沿着第一个向量向第二个向量弯曲,拇指的指向就是这两个向量叉乘结果的方向。(如果是右手坐标系,则用右手法则来判断。)另外,叉乘并不满足交换律,u x v != v x u,因此,在做计算的时候需要对这点留一下心。不过,如果做多了,这也就是一个本能,并不需要去思考的事情。

OK。叉乘运算也需要加到引擎中去。

至此,向量部分的数学知识已经回顾完毕,接下来就要说到矩阵了,嗯,也是必备知识之一。

由于笔者水平有限,博文中难免会出现疏漏,欢迎读者批评指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值