对象移动和旋转多少

时间:2018-04-08 17:10:16

标签: collision-detection game-physics

我创建了一个可以在对象上施加力的系统。因此,当施加的力不与质心对齐时,物体开始旋转。并且当给予力时它也会移动。 但是我开始思考,当我在角落里推动空间(如矩形)的东西时,它会旋转并同时开始移动。所以能量分配到线性运动和转速,但是如何比例?现在,我以两倍的效率将能量转移到两者。但是如果你总结所有能量,它将是我给出的能量的两倍。 那么有人知道这个比例或等式吗?

由于

1 个答案:

答案 0 :(得分:0)

毕达哥拉斯提取力成分

下图将有助于可视化力量。

enter image description here

  1. A B C D E M 是2D点{x,y}
  2. 红色 AB 是作为向量的力量。
  3. M 是质心。
  4. 蓝色 BD 是移动对象的力量
  5. 绿色 BE 是旋转的力量。
  6. 通过获得归一化向量 BM AB

    的叉积的逆sin来找出角度Ɵ

    旋转力是 AB * sin(Ɵ)的长度,正确的方向(符号)将来自算法( BM x AB 的交叉点)和跨国力量是 AB * cos(Ɵ)的长度,沿着 BM

    伪代码

    // 2D Points from diagram
    A = {x,y};  
    B = {x,y};
    M = {x,y};
    
    // get length of vectors AB BM (^ is to the power of)
    ABlen = ((B.x - A.x) ^ 2 + (B.y - A.y) ^ 2) ^ 0.5;
    BMlen = ((B.x - M.x) ^ 2 + (B.y - M.y) ^ 2) ^ 0.5;
    
    
    // Create normalized vectors AB and BM
    ABnorm = {x : (B.x - A.x) / ABlen, y : (B.y - A.y) / ABLen};
    BMnorm = {x : (M.x - B.x) / BMlen, y : (M.y - B.y) / BMLen};
    
    // Get the angle Ɵ
    Ɵ = asin(BMnorm.x * ABnorm.y - BMnorm.y * ABnorm.x);
    
    // Rotational Force BE
    rotateForce = ABlen * sin(Ɵ);
    
    // Translational Force BD
    translateForce = ABlen * cos(Ɵ);
    
    // Translational force as a vector
    translateForceVec = {x : ABnorm.x * translateForce, y : ABnorm.y * translateForce};
    

    牛顿第二定律

    通过牛顿第二定律f施加力F = ma以获得加速a = F / m

    旋转力变为旋转加速度,但取决于物体的质量分布。