我正试图将两个碰撞的圆圈分开。感谢别人的帮助,我就在那儿!
这是我的代码:
var totalRadius : Number = _circle1.radius + _circle2.radius;
var x : Number = _circle1.position.x - _circle2.position.x;
var y : Number = _circle1.position.y - _circle2.position.y;
var distanceSquared : Number = (x * x) + (y * y);
if (distanceSquared < totalRadius * totalRadius)
{
var distance : Number = Math.sqrt(distanceSquared);
var separation : Number = totalRadius - distance;
var unitVectorX : Number = (_circle1.position.x - _circle2.position.x) / distance;
var unitVectorY : Number = (_circle1.position.y - _circle2.position.y) / distance;
_circle1.position.x += unitVectorX * (separation / 2);
_circle1.position.y += unitVectorY * (separation / 2);
_circle2.position.x -= unitVectorX * (separation / 2);
_circle2.position.y -= unitVectorY * (separation / 2);
}
如果圆圈的速度相同,则效果很好。当它们具有不同的速度时会出现问题,而问题是因为我将分离均匀分开(separation / 2)
我认为!
如果circle1的速度为1,0而circle2的速度为-1,0,则一切都能正常工作。两个圆圈相互撞击并停止。
如果circle1的速度为2.0且circle2的速度为-1,0,则圆圈逐渐向右移动。我想这就是发生的事情:
帧1:
式2:
帧3:
窗口4:
正如你所看到的,由于速度的不同,两个圆圈的右边都增加了+0.5。
最后,我的问题是:我怎样才能将它们的速度分解到等式中,这样才不会影响它们的分离?
谢谢!
答案 0 :(得分:0)
简短回答:你必须在那里得到momentum;)
正如我猜你想要 mass 一样,它归结为“v1_before ^ 2 + v2_before ^ 2 = v1_after ^ 2 + v2_after ^ 2”。正如维基文章所说,我只是“切换”速度。
我不明白为什么你认为圈子会向右移动?这种推测不是弹性碰撞吗?如果你想要它们具有相同的质量,它们应该朝不同的方向前进。
答案 1 :(得分:0)
你需要计算影响点,而不是仅仅(任意)向后移动它们。
快速搜索找到了这些链接: