cocos2d-js 中的Chipmunk矢量:cp.Vect

对象定义、常量和构造函数

定义:

cp.Vect = function(x, y){
    this.x = x;
    this.y = y;
}

零向量常量:

cp.vzero  = cp.v(0,0);

创建新结构体所用的便捷构造函数:

cp.v(x, y)

操作运算

      v, v1, v2均为cp.Vect, s,t,d,dist为float

  • cp.Bool cp.v.eql(v1,  v2) – 检测两个向量是否相等。在使用C++程序时,Chipmunk提供一个重载操作符==。(比较浮点数时要小心!)

  • cp.Vect cp.v.add(v1, v2) – 两个向量相加。在使用C++程序时,Chipmunk提供一个重载操作符+

  • cp.Vect cp.v.sub(v1, v2) – 两个向量相减。在使用C++程序时,Chipmunk提供一个重载操作符-

  • cp.Vect cp.v.neg(v) – 使一个向量反向。在使用C++程序时,Chipmunk提供一个重载一个一元负操作符-

  • cp.Vect cp.v.mult(v, s) – 标量乘法。在使用C++程序时,Chipmunk提供一个重载操作符*

  • cp.Float cp.v.dot(v1, v2) – 向量的点积。

  • cp.Float cp.v.cross(v1, v2) – 2D向量交叉相乘的模。2D向量交叉相乘的积作为一个只有z坐标的3D向量的z值。函数返回z坐标的值。

  • cp.Vect cp.v.perp(v) – 返回一个垂直向量。(旋转90度)

  • cp.Vect cp.v.rperp(v) – 返回一个垂直向量。(旋转-90度)

  • cp.Vect cp.v.project(v1, v2) – 返回向量v1在向量v2上的投影。

  • cp.Vect cp.v.rotate(v1, v2) – 使用复杂的乘法运算将向量v1按照向量v2旋转。如果v1不是单位向量,则v1会被缩放。

  • cp.Vect cp.v.unrotate(v1, v2) – 和cpvrotate()相反。

  • cp.Float cp.v.len( v) – 返回v的长度。

  • cp.Float cp.v.lengthsq(v) – 返回v的长度的平方,如果只是比较长度的话它的速度比cpvlength()快。

  • cp.Vect cp.v.lerp(v1, v2, t) – 在v1和v2之间线性插值。

  • cp.Vect cp.v.lerpconst(v1,v2, d) – 以长度d在v1和v2之间线性插值。

  • cp.Vect cp.v.slerp(v1, v2, t) – 在v1和v2之间球形线性插值。

  • cp.Vect cp.v.slerpconst(v1, v2, a) – 在v1和v2之间以不超过角a的弧度值球形线性插值。

  • cp.Vect cp.v.normalize(v) – 返回a的一个归一化副本。作为特殊例子,在调用cpvzero时返回cpvzero。

  • cp.Vect cp.v.clamp(v, len) – 将v固定到len上。

  • cp.Float cp.v.dist(v1, v2) – 返回v1和v2间的距离。

  • cp.Float cp.v.distsq(v1, v2) – 返回v1和v2间的距离的平方。如果只是比较距离的话它比cpvdist()快。

  • cp.Bool cp.v.near(v1, v2, dist) – 如果v1和v2间的距离小于dist则返回真。

  • cp.Vect cp.v.forangle(a) – 返回所给角(以弧度)单位向量。

  • cp.Float cp.v.toangle(v) – 返回v所指的角度方向的弧度。

部分测试

//cp.Vect测试
var vect1 = cp.v(2, 3);
var vect2 = cp.v(1, 1);
var vect3 = new cp.Vect(2, 3);

cc.log(cp.v.eql(vect1, vect2));  //false
cc.log(cp.v.eql(vect1, vect3));  //true
cc.log(cp.v.add(vect1, vect2)); //cp.v(3, 4)

参考:

http://www.tairan.com/archives/5670


你可能感兴趣的:(cocos2d-js,chipmunk)