cocos creator 归一化向量normalize用法及应用(代码举例)

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)
//后面就根据时间运动就完事,很简单就不写了

后面就简单了,应用的地方还有很多,自己去实现


维尼聚合工具

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值