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

  • Post author:
  • Post category:其他


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 版权协议,转载请附上原文出处链接和本声明。