Перемещение круга вокруг точки - PullRequest
0 голосов
/ 20 августа 2011

У меня есть круг (ограничивающий круг), смещенный относительно центральной точки моего объекта, и я смотрю, как перемещать этот круг вокруг объекта при его вращении, чтобы он всегда находился в одном и том же месте персонажа.Например, скажем, у меня есть ограничительный круг для передней части автомобиля, когда автомобиль поворачивает, этот ограничительный круг тоже должен поворачиваться.

Итак, у меня есть две точки: position, которая является позициейцентральная точка сущности и offset, которая является смещением круга от этой позиции.Предполагается, что угол равен 0.

Так что, если моя машина будет повернута к 0 градусам: position (150, 150) и offset (50, 0), тогда ограничивающий круг будет равен 200, 150.

Теперь, если я повернул машину на 90 градусов, ограничивающий круг должен быть в положении 150, 200.

Это то, что у меня сейчас:

var differenceX : Number = _centre.x - _offset.x;
var differenceY : Number = _centre.y - _offset.y;

var rotatedX : Number = differenceX * Math.cos(_angle);
var rotatedY : Number = differenceY * Math.sin(_angle);

var currentOffset : Point = new Point(_centre.x + rotatedX, _centre.y + rotatedY);

Но этодайте мне эти длинные овалы и теперь идеальный круг.

Идеи?

Ответы [ 3 ]

0 голосов
/ 20 августа 2011

Чтобы повернуть автомобиль, вы фактически вернете его в исходное положение и поверните там, а затем переведите обратно.Центр круга такой же, то есть это просто еще одна точка на автомобиле.Просто выполните вращение только на _offset и затем переведите его на _centre.

0 голосов
/ 21 августа 2011

Вы вращаете разницу между смещением и положением вашего объекта.Я думаю, что у вас интуитивно было правильное представление о желании повернуть расстояние между кругом и его объектом, но вы могли ошибочно принять смещение за положение вашего круга ?.В любом случае, поскольку у вас уже есть смещение, нам не нужно вычислять расстояние между ними.

Кроме того, когда вы поворачиваете 2D-вектор, вам также необходимо использовать 2D-вращение.2D вращения используют компонент x и y, чтобы составить каждый новый компонент x 'и y'.Быстрый Google возвращает что-то вроде this .

Поскольку код всегда легче понять:

var cosAngle : Number = Math.cos(_angle);
var sinAngle : Number = Math.sin(_angle);

var rotatedX : Number = _offset.x * cosAngle - _offset.y * sinAngle;
var rotatedY : Number = _offset.x * sinAngle + _offset.y * cosAngle;

var currentOffset : Point = new Point(_centre.x + rotatedX, _centre.y + rotatedY);

Овальная форма вашего предыдущего поворота была из-за неиспользованияВращение 2D и расстояние вашего круга, вероятно, были отключены, потому что разница X и разница Y не были правильными значениями.

0 голосов
/ 20 августа 2011

Возможно, попробуйте не использовать сущность, чтобы нарисовать круг:

var circlePositionX : Number = _centre.x - _offset.x;
var circlePositionY : Number = _centre.y - _offset.y;

var radius : Number = 50;

var rotatedX : Number = circlePositionX + (radius * Math.cos(_angle));
var rotatedY : Number = circlePositionY + (radius * Math.sin(_angle));

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...