Как разделить два встречных круга? - PullRequest
0 голосов
/ 01 сентября 2011

Я хочу разделить два сталкивающихся круга, чтобы отбросить их поровну на минимальную величину, чтобы они были идеально разделены.

Пока у меня есть это:

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;

    // No idea what to do now!

}

Это все, что я понял до сих пор. Итак, я знаю, что произошло столкновение, и я знаю, что каждый круг - это separation сумма друг от друга (поэтому я думаю, разделить на 2, чтобы разделить их поровну).

Проблема в том, что у разделения нет подразумеваемой направленности, и я не знаю, что делать. Я не могу просто сделать circle1.position -= separation / 2; circle2.position += separation / 2, потому что это сместит оси X и Y одинаково.

Как мне добавить направленность к separation?

Спасибо!

1 Ответ

1 голос
/ 01 сентября 2011

Используйте единичный вектор, чтобы переместить оба круга на separation / 2.

unitVector = (circle1.Position - circle2.Position) / distance

circle1.Position += unitVector * seperation / 2

circle2.Position -= unitVector * seperation / 2

Edit:

просто измените seperation / 2 и / или +- часть. Это позволит вам переместить его на любое расстояние.

...