刚体物理旋转

时间:2015-01-08 13:04:12

标签: rotation physics rigid-bodies

我想在Java中创建一个物理引擎。然而,这并不是我所困扰的代码。它只是刚体物理的数学,特别是力和它们如何影响物体的旋转。

让我们举例说,我有一个长度相同的正方形。由于重力(无空气阻力),方块将朝地面加速。这意味着在正方形的每个点上都会存在(0,-9.8)m / s的矢量力。

现在让我们说这个方块稍微旋转一下。当这个旋转的方形与地面(平面)接触时,在接触点处将有一个脉冲速度矢量(很可能是方形的一个角)。但是,广场上其他角落的力量会发生什么?从最初的引力来看,它们是如何受到影响的?

如果我的问题不够详细,我道歉。我喜欢上传图表,但我还没有声誉。

3 个答案:

答案 0 :(得分:1)

  1. 旋转是动能的形式

    首先是对运动的类比

    • alpha - 角度位置[rad]
    • omega - 角速度[rad / s]
    • epsilon - 角加速度[rad / s ^ 2]
    • alpha(t)/(dt^2)=omega(t)/dt=epsilon(t)

    现在是惯性

    • I - 二次旋转质量惯量[kg.m ^ 2]
    • m - 质量[kg]
    • M - 扭矩[N.m]

    和一些被利用的方程式

    1. M=epsilon*I - 达到加速所需的扭矩,反之亦然[N.m]
    2. acc=epsilon*radius - 周长加速度[m / s ^ 2]
    3. vel=omega*radius - 周长[m / s ^ 2]
    4. 等式#1可用于直接计算力。方程#2,#3可用于计算基于摩擦力的力,如车轮抓地力/阻力。不要忘记动能Ek=0.5*m*vel^2+0.5*I*omega^2,这样你就可以利用保存能量的定律。

    5. object1object2轮流连续接触时,

      周长速度/加速度产生交互力,这会减慢object2object2上产生阻力并在object1上产生反作用力的旋转速度。

      如果object1未固定,则此力也会产生扭矩并旋转object1

      如果强制旋转突然停止,则动能的所有旋转部分都会移动到碰撞反作用力脉冲。

      如果物体处于更复杂的旋转运动中,那么你应该计算实际旋转轴和alpha,omega,epsilon并使用它,因为物体可以旋转更多旋转,每个旋转具有不同的旋转中心。

      此外,如果物体在旋转并且在不同的轴上施加另一个旋转,则会产生陀螺扭矩,从而在垂直于两者的第三轴上产生旋转。

      所以当你把所有这些放在一起时,你就会知道你需要什么样的结构。如果没有关于模拟的结构和属性的更多信息,抱歉不能比这更具体......

答案 1 :(得分:0)

施加力在接触脉冲的计算中不起作用,因为据说脉冲发生在远小于模拟时间步长的时间尺度上。基本上,变化是在撞击过程中由于重力或其他力量可以忽略不计的速度。

答案 2 :(得分:0)

如果我理解正确,你会担心广场的不同角落 - 一个有影响,三个没有。

然而,由于您想要进行刚体动力学,因此将刚体视为具有质心(在本例中为正方形的中心),位置,旋转和几何(更有帮助)在这种情况下,广场,但它可以是任何东西)。

顶点的角位于质心的恒定位置和旋转 - 它只是刚体的位置和旋转,它同时改变了世界上所有四个角的位置。这种观点的一个优点是它与几何形状无关 - 你可以有10个或20个角,方法也是一样。

关于计算轮换: 重力像以前一样工作。但是,你现在有另一种力量(从它作用的时间起的冲动) - 你必须添加两者的效果才能获得系统的完整结果。

在您描述的情况下,冲动将是由于其中一个角落发生碰撞。它必须在接触点计算,接触法线 - 在这种情况下是平面的法线。

如果法线指向与质心不同的方向,则会导致旋转(以及位置变化)。

位置变化的数量取决于您对接触计算和分辨率,材料属性,数值步进,冲击速度,时间步长等进行建模的方式......

正如其他人所提到的,阅读物理学(刚体动力学)和物理模拟可能是更好理解概念的良好起点。