Афинные преобразования

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

DmSokol
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 27.02.2016 (Сб) 15:31

Афинные преобразования

Сообщение DmSokol » 03.05.2016 (Вт) 8:32

Здравствуйте, уважаемые форумчане.У меня вопрос по афинным преобразованиям и матрице поворота https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0_%D0%BF%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D1%82%D0%B0
Пытаюсь смоделировать поворот фигуры (простейший прямоугольник) вокруг заданной точки. Выкладываю пример
TEST 3.zip
. Набор исходных координат задан в исходной матрице. Чтобы повернуть фигуру, умножаю исходную матрицу на матрицу поворота. Получаю преобразованную матрицу, по координатам которой строю фигуру, полученную после поворота. В моем примере фигура поворачивается вокруг непонятных координат. Подскажите, пожалуйста, как точно задать координаты точки, вокруг которой будет вращаться фигура (напрмер, т. (50;50)).
У вас нет доступа для просмотра вложений в этом сообщении.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Афинные преобразования

Сообщение Mikle » 04.05.2016 (Ср) 13:50

Ты вращаешь вокруг начала координат (0,0). Чтобы повернуть вокруг точки x,y нужно переместить объект на -x,-y, повернуть вокруг 0,0, затем переместить на x,y.

DmSokol
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 27.02.2016 (Сб) 15:31

Re: Афинные преобразования

Сообщение DmSokol » 04.05.2016 (Ср) 17:59

Mikle, помогите, пожалуйста, на конкретном примере.
Исходная матрица с координатами фигуры: V
Матрица перемещения: M
Матрица поворота: A
ф - угол поворота
Преобразованная матрица: Vi
В моем примере реализована следующаяцепочка действий, при этом матрица переноса (М) - получается бесполезна, вращение производится все равно вокруг т.0,0.

|X1 Y1 Z1|
V= |X2 Y2 Z2| ;
|X3 Y3 Z3|
|X4 Y4 Z4|

|1 0 0 X|
M = |0 1 0 Y|
|0 0 1 Z|
|0 0 0 1|

|cosф -sinф 0 0|
A = |sinф cosф 0 0|
| 0 0 1 0|
| 0 0 0 1|

Vi = V x M x A

Заранее благодарю Вас!
У вас нет доступа для просмотра вложений в этом сообщении.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Афинные преобразования

Сообщение Mikle » 04.05.2016 (Ср) 18:27

Для начала нужно определиться, это будет 2D? Если так, то зачем нужны матрицы 4*4, когда достаточно 3*3?

DmSokol
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 27.02.2016 (Сб) 15:31

Re: Афинные преобразования

Сообщение DmSokol » 04.05.2016 (Ср) 19:05

В перспективе это будет 3D, но пока можно на 2D, сейчас координата Z не используется.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Афинные преобразования

Сообщение Mikle » 04.05.2016 (Ср) 19:57

DmSokol писал(а):В перспективе это будет 3D

Тогда пусть сразу будет 3D, чтобы потом не переделывать.
1. Пользуйся Option Explicit.
2. Забудь про градусы, только радианы.
Вот пример, тут я вставил модуль математики из своего старого проекта, при желании здесь можно взять модуль с более полным набором функций.
Что не ясно - спрашивай, и можно на "ты".
У вас нет доступа для просмотра вложений в этом сообщении.

DmSokol
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 27.02.2016 (Сб) 15:31

Re: Афинные преобразования

Сообщение DmSokol » 05.05.2016 (Чт) 0:16

Спасибо, Mikle! Классный пример. То, что нужно.

DmSokol
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 27.02.2016 (Сб) 15:31

Re: Афинные преобразования

Сообщение DmSokol » 06.05.2016 (Пт) 15:14

Заработало в 2D. Выкладываю свой пример
TEST 4 2D Работает.rar
, где фигура всегда вращается вокруг своего начала координат X1, Y1
Теперь нужно реализовать вращающийся куб (Гексаэдр). Там сложнее, во-первых матрица фигуры должна быть размером 8x8 (8 - вершин), затем в преобразованиях необходимо задавать направляющий вектор.
Mikle, помоги, пожалуйста, с 3D. Делаю построение 3D-фигуры в пространстве по XYZ
TEST 8 3D.rar
, за основу беру базовые координаты. Не знаю, что при преобразованиях делать с координатой Z, если рабочее пространство двухмерное.
У вас нет доступа для просмотра вложений в этом сообщении.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Афинные преобразования

Сообщение The trick » 06.05.2016 (Пт) 16:16

UA6527P

DmSokol
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 27.02.2016 (Сб) 15:31

Re: Афинные преобразования

Сообщение DmSokol » 06.05.2016 (Пт) 17:15

Спасибо. Но если можно поподробнее с преобразованием объемных фигур..
Задача состоит в следующем: необходимо построить матрицу поворота куба на угол ф вокруг прямой L, проходящей через точку P(a,b,c) и имеющую единичный направляющий вектор (l, m, n).
Теория 3D.pdf
У вас нет доступа для просмотра вложений в этом сообщении.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Афинные преобразования

Сообщение Mikle » 06.05.2016 (Пт) 21:09

DmSokol писал(а):необходимо построить матрицу поворота куба на угол ф вокруг прямой L, проходящей через точку P(a,b,c) и имеющую единичный направляющий вектор (l, m, n).

Ну так перемещай на -a,-b,-c, вращай вокруг оси l, m, n (MatrixRotationAxis), потом перемещай на a, b, c.
Или задействуй MatrixAffineTransformation.


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

    TopList