2013-02-12 31 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在物理堆疊交換場地要求。