cocos creator 归一化向量normalize用法及应用 代码举例
会了给我评论点赞,听到没有,臭弟弟
-
normalize 返回归一化后的向量,先看下Vec2中实现这个normalize的方法
proto.normalize = function (out) { out = out || new Vec2(); out.x = this.x; out.y = this.y; out.normalizeSelf(); return out; };
其实就是封装了normalizeSelf
-
然后看下normalizeSelf的方法,向量归一化,让这个向量的长度为 1
proto.normalizeSelf = function () { var magSqr = this.x * this.x + this.y * this.y; if (magSqr === 1.0) return this; if (magSqr === 0.0) { return this; } var invsqrt = 1.0 / Math.sqrt(magSqr); this.x *= invsqrt; this.y *= invsqrt; return this; };
看代码就知道,先求2D坐标的平方根,如果为1或0直接返回值,最终得到的向量平方和为1
那么问题来了,这个能干什么,这个可以做很多事
举个简单的栗子:
有两段路,路是相连的但距离不相等,有已知的速度,那通过这个可以让物体在两段路上匀速运动
你是不是想,既然速度一定,那速度不变不就是匀速了,那你就错了,我说的是x和y方向的速度加起来是匀速的,毕竟路可能不是平行或竖直的,而且路也会拐弯,你要做的只是设一下物体的朝向就好了
//下面的是路的拐弯处求速度
let vecDir: cc.Vec2 = nextPoint.sub(curPoint)
//假设初始速度为5,那新的速度可以这样求出,这个速度包括x和y方向
let vecSpeed: cc.Vec2 = vecDir.normalize().mul(5)
//后面就根据时间运动就完事,很简单就不写了
后面就简单了,应用的地方还有很多,自己去实现
版权声明:本文为S_clifftop原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。