motkot
@motkot
Программирование C#.

Как сделать поворот фигуры?

Здравствуйте! Есть массив с векторами, которые указывают позицию позицию кубов относительно середины из которых строится фигура. Например: (0;0;0) (1;0;0).

Эта фигура будет состоять из двух кубов и выглядеть как прямоугольник.

Так можно построить разные фигуры, но как эти фигуры поворачивать ( поворот происходит во все 4 стороны )?

При повороте позиции должны меняться вот так:

Поворот по часовой
(0;0;0) (1;0;0). (0;0;0) (0;0;1). (0;0;0) (0;0;-1). (0;0;0) (0;0;-1)

Поворот вверх
(0;0;0)(1;0;0). (0;0;0) (0;1;0). (0;0;0) (0;0;-1). (0;0;0) (0;-1;0)

Как считать позицию кубов при повороте по часовой, против часовой, вверх, вниз?
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ответы на вопрос 3
@AlexSku
Программист по автоматике
Почитайте формулы книги по 3D, вектор (посл. коорд.=0) или точка (посл. коорд. = 1) умножается на матрицу 4х4 (вектор и точка имеют длину 4).
Есть три стандартные матрицы поворота вокруг осей X, Y, Z. Есть матрица поворота вокруг произвольной оси.
Можно ещё поворачивать кватернионами.
Ответ написан
@U235U235
Если у вас кубы, то это уже не фигура, а тело. И не прямоугольник, а параллелепипед.
Поворот относительно начала координат делается просто умножением вектора координат на соответствующую матрицу вращения.
Ответ написан
Комментировать
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Повороты вдоль какой-то оси на 90 градусов все выглядят одинаково: 2 координаты меняются местами и одна из них меняет знак. Осталось только порисовать и сформулировать правила.

Так, поворот против часовой стрелке вдоль оси Z, меняяет местами X, Y и делает меняет знак у X, т.е. X' = -Y, Y' = X, Z' = Z. Вам надо все тройки вот таким побразом поизменять. Поворот по часовой стрелки вдоль Z делает наоборот. Опять же меняет X и Y и меняет знак Y.

Повороты вдоль других осей придумайте сами. Меняются местами две другие оси, и какая-то из них меняет знак. Представьте, куда двигаются (1,0,0), (0, 1, 0) и (0, 0, 1), что бы понять правила.

При реализации только аккуратно делайте. Если помене на месте, то надо именно swap делать, ведь если выполнить x=-y; y=x, то у вас изначальная x координата затрется в первом выражении и потеряется навсегда.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы