2013-02-12 96 views
1

如何在PhysiJS中查询物体点的线速度(相对于世界空间),给定物体的线速度和角速度?PhysiJS:如何获得旋转物体上给定点处的线速度

我正在考虑为此目的在对象上创建一个不可见的顶点,但我不认为API甚至会提供该功能。我是否需要根据物体的平移和旋转速度来计算自己? (如果是这样,那么three.js所或PhysiJS给出这样做的一个直接的方式?)

从第一原理:

  • 鉴于object.position(1)
  • 鉴于世界空间中的点的位置object.localToWorld(point)(2)
  • 鉴于object.getLinearVelocity()(3)
  • 鉴于object.getAngularVelocity()(4)

所以我需要:

  • 减(1)(2)给点在世界空间偏移(5)
  • 使用(4)和(5),以获得相对点的线速度对象(6)
  • 添加(6)和(3),以获得点

的总线速度对于第一和第三步骤I可以使用three.js所的的Vector3的.sub(Vector3).add(Vector3)方法,但中间操作是躲避我,虽然我猜想是一种增殖。考虑到(4)可以是欧拉角或四元数,我应该使用哪种操作?

我对矩阵的了解非常有限(而且生锈!),并且四元数不存在。

three.js所的API文档here

感谢

回答

0

终于来了!解决了。下面是避免PhysiJS的更通用的版本。只要用PhysiJS's的三个向量来替代。

scene.add(point2); 
scene.add(pointAxis); 
pointAxis.add(point); 

angularVelocity = new THREE.Vector3(0, 0, 0.01); 

function animate(){ 

    // rotate point around pointAxis 
    pointAxis.rotation = pointAxis.rotation.add(angularVelocity); 

    // calculate position of point in world space 
    var pointPosWorld = pointAxis.localToWorld(point.position.clone()); 

    // calculate position of point in world with respect to fulcrum 
    var pointOffsetPos = new THREE.Vector3(); 
    pointOffsetPos = pointPosWorld.sub(pointAxis.position.clone()); 

    // Calculate tangential velocity 
    tangentialVelocity = rotate.clone().cross(pointOffsetPos); 

} 

我到达上面的感谢回答here在物理堆叠交换场地要求。