Как повернуть объект на 90 градусов вокруг его центра? - PullRequest
0 голосов
/ 16 ноября 2011

Я пытаюсь настроить вращение моего падающего объекта (составной фигуры), чтобы он поворачивался на 90 градусов при каждом нажатии клавиши вокруг центральной точки. Я хочу использовать библиотеку java.awt.Point, чтобы обозначить одну из частей моей составной фигуры как «центр вращения», а затем использовать местоположение .Point для точек предыдущей позиции, а затем установить новые координаты x и y. ... а затем как-то установить новые координаты новой позиции.

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

Может кто-нибудь помочь с общим примером того, как вращать комп. формировать вокруг центра?

1 Ответ

1 голос
/ 16 ноября 2011

Не вдаваясь в реализацию Java Point, общая концепция очень проста.

Сначала вам нужно преобразовать все точки вашей фигуры так, чтобы центр вашей фигуры был (0,0).Например, если центр (Cx, Cy) и одна из ваших точек (Px, Py), то новая точка должна быть NewP = (Px - Cx, Py - Cy).Теперь после того, как все точки были преобразованы, вы должны сделать следующее для каждой из точек.Предполагая, что вы хотите повернуть на 90 градусов по часовой стрелке (проверьте ссылку ниже, чтобы узнать, как это сделать для других вращений): RotatedP = (-NewPy, NewPx)

После поворота вы должны преобразовать свои точки обратно в ихисходное местоположение: FinalP = (RotatedPx - NewPx, RotatedPy - NewPy).

Некоторый псевдокод:

Point p;
Center center;

Point relativePoint = p - center;

// For 90deg CW: -y, x
// For 90deg CC: y, -x
Point rotatedPoint = new Point(-1 * relativePoint.Y, relativePoint.X); // 90deg CW
Point finalPoint = rotatedPoint + center;

Просто прочитайте немного о преобразованиях и вращении, и это должно быть очень ясно дляВы: Повороты - Читать только первую часть (Повороты в двух измерениях)

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