在给定物体的线性和角速度的情况下,如何查询物理点中物体点的线速度(相对于世界空间)?
我正在考虑为此目的在对象上创建一个不可见的顶点,但我认为API甚至不提供这种能力。我是否需要根据物体的平移和旋转速度来计算自己? (如果是这样,那么THREE.js或PhysiJS是否提供了这样做的直接方式?)
从第一原则出发:
object.position
(1)object.localToWorld(point)
(2)object.getLinearVelocity()
(3)object.getAngularVelocity()
(4)所以我需要:
对于第一步和第三步,我可以使用Three.js的Vector3的.sub(Vector3)
和.add(Vector3)
方法,但是中间操作让我望而却步,尽管我猜是一种乘法。鉴于(4)可以是欧拉角还是四元数,我应该使用什么样的操作?
我对矩阵的了解非常有限(并且生锈!)和四元数不存在。
Three.js的API文档是here
由于
答案 0 :(得分:0)
最后!解决了。以下是避免使用PhysiJS的更通用的版本。只需将三个向量与PhysiJS的向量相加。
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,我到达了上面。