Я пытаюсь разделить два круга, которые сталкиваются. Благодаря помощи других, я прямо там!
Это мой код:
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. Два круга ударяются друг о друга и останавливаются.
Если круг 1 имеет скорость 2,0, а круг 2 имеет скорость -1,0, круги постепенно сдвигаются вправо. Я думаю, что это то, что происходит:
frame1:
- круг1 (99, 100)
- круг 2 (101, 100)
frame2:
- circle1 (101, 100)
- circle2 (100, 100)
- обнаружено столкновение, исправлено положение -0,5 и +0,5 соответственно.
- circle1 (100,5, 100)
- circle2 (100,5, 100)
frame3:
- круг1 (102,5, 100)
- circle2 (99,5, 100)
- обнаружено столкновение, исправлено положение -1,5 и +1,5 соответственно.
- circle1 (101, 100)
- circle2 (101, 100)
frame4:
- circle1 (103, 100)
- circle2 (100, 100)
- обнаружено столкновение, исправлено положение -1,5 и +1,5 соответственно.
- круг1 (101,5, 100)
- circle2 (101,5, 100)
Как видите, оба круга набирают +0,5 вправо из-за разницы в скорости.
Итак, наконец, мой вопрос: как я могу учесть их скорость в уравнении, чтобы она не играла роль в их разделении?
Спасибо!