所以我跳进了一个物理引擎。现在的对撞机是球体和平面。我发现碰撞的深度和接触点的法线很容易,但在我的一生中,我无法理解能量的分布。
身体包含一个对撞机、一个质量、一个力矢量(速度 * 质量)、一个弹性值(0 没有反弹,1 个完全反弹)和一个摩擦值(0 滑香肠,1 动量吸血鬼)我用谷歌搜索到了地狱和回来后,一切都出现了 1D 和 2D 简化,但我根本无法将它们适应 3D。
编辑:我尝试关注此页面: http ://www.plasmaphysics.org.uk/collision3d.htm 。它看起来很简单,但由于某种原因,我仍然没有弹性为 1 的反弹。
我的实现如下:
var v = new vec3(
(body.force.x + other.force.x) / totalMass,
(body.force.y + other.force.y) / totalMass,
(body.force.z + other.force.z) / totalMass
);
body.force.set(
((velA.x - v.x) * elasticity + v.x) * body.mass,
((velA.y - v.y) * elasticity + v.y) * body.mass,
((velA.z - v.z) * elasticity + v.z) * body.mass
);
other.force.set(
((velB.x - v.x) * elasticity + v.x) * other.mass,
((velB.y - v.y) * elasticity + v.y) * other.mass,
((velB.z - v.z) * elasticity + v.z) * other.mass
);
对于弹性,我尝试将两个物体的弹性相乘并取它们的平均值;没变。