我想在Java中创建一个物理引擎。然而,这并不是我所困扰的代码。它只是刚体物理的数学,特别是力和它们如何影响物体的旋转。
让我们举例说,我有一个长度相同的正方形。由于重力(无空气阻力),方块将朝地面加速。这意味着在正方形的每个点上都会存在(0,-9.8)m / s的矢量力。
现在让我们说这个方块稍微旋转一下。当这个旋转的方形与地面(平面)接触时,在接触点处将有一个脉冲速度矢量(很可能是方形的一个角)。但是,广场上其他角落的力量会发生什么?从最初的引力来看,它们是如何受到影响的?
如果我的问题不够详细,我道歉。我喜欢上传图表,但我还没有声誉。
答案 0 :(得分: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] 和一些被利用的方程式
M=epsilon*I
- 达到加速所需的扭矩,反之亦然[N.m] acc=epsilon*radius
- 周长加速度[m / s ^ 2] vel=omega*radius
- 周长[m / s ^ 2] 等式#1可用于直接计算力。方程#2,#3可用于计算基于摩擦力的力,如车轮抓地力/阻力。不要忘记动能Ek=0.5*m*vel^2+0.5*I*omega^2
,这样你就可以利用保存能量的定律。
在object1
与object2
轮流连续接触时,
周长速度/加速度产生交互力,这会减慢object2
在object2
上产生阻力并在object1
上产生反作用力的旋转速度。
如果object1
未固定,则此力也会产生扭矩并旋转object1
如果强制旋转突然停止,则动能的所有旋转部分都会移动到碰撞反作用力脉冲。
如果物体处于更复杂的旋转运动中,那么你应该计算实际旋转轴和alpha,omega,epsilon
并使用它,因为物体可以旋转更多旋转,每个旋转具有不同的旋转中心。
此外,如果物体在旋转并且在不同的轴上施加另一个旋转,则会产生陀螺扭矩,从而在垂直于两者的第三轴上产生旋转。
所以当你把所有这些放在一起时,你就会知道你需要什么样的结构。如果没有关于模拟的结构和属性的更多信息,抱歉不能比这更具体......
答案 1 :(得分:0)
施加力在接触脉冲的计算中不起作用,因为据说脉冲发生在远小于模拟时间步长的时间尺度上。基本上,变化是在撞击过程中由于重力或其他力量可以忽略不计的速度。
答案 2 :(得分:0)
如果我理解正确,你会担心广场的不同角落 - 一个有影响,三个没有。
然而,由于您想要进行刚体动力学,因此将刚体视为具有质心(在本例中为正方形的中心),位置,旋转和几何(更有帮助)在这种情况下,广场,但它可以是任何东西)。
顶点的角位于质心的恒定位置和旋转 - 它只是刚体的位置和旋转,它同时改变了世界上所有四个角的位置。这种观点的一个优点是它与几何形状无关 - 你可以有10个或20个角,方法也是一样。
关于计算轮换: 重力像以前一样工作。但是,你现在有另一种力量(从它作用的时间起的冲动) - 你必须添加两者的效果才能获得系统的完整结果。
在您描述的情况下,冲动将是由于其中一个角落发生碰撞。它必须在接触点计算,接触法线 - 在这种情况下是平面的法线。
如果法线指向与质心不同的方向,则会导致旋转(以及位置变化)。
位置变化的数量取决于您对接触计算和分辨率,材料属性,数值步进,冲击速度,时间步长等进行建模的方式......
正如其他人所提到的,阅读物理学(刚体动力学)和物理模拟可能是更好理解概念的良好起点。