|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Sergey Borodachev 2:5048/7.6 04 Jun 2001 16:42:00 To : Vasya Kovall Subject : Помогите с вращением!!! -------------------------------------------------------------------------------- 03 Jun 01 01:41, Vasya Kovall wrote to All: VK> Имеется прямоугольник, нужно устроить вращение вокруг одной из VK> его VK> точек в плоскости экрана. Попробовал через матрицу преобразования VK> типа: |cos Y sin Y| VK> |-sin Y cos Y| 1. Матрица у тебя неправильная. См. ниже корректный вариант. 2. Hужно сначала сопоставить центр координатной плоскости с точкой вращения, в твоем случае это вершина прямоугольника, а затем уже применять матрицу поворота. VK> ничего нормального не получилось. Это потому, что ты забыл добавить к-т нормализации ;-) VK> Дайте либо исодник, либо посоветуйте что-нибудь по этому поводу. Фрагмент книги Андре Ла Мот`а: >ъ-ъ-[Begin of Windows Clipboard]-ъ-ъ< Главная матрица перемещений ---------------------------------- Главной матрицей перемещений будем называть такую матрицу, в которой x_translation и y_translation - это коэффициенты перемещения объекта по осям X и Y. Вот как она выглядит: і і і1 0 0і і0 1 0і іx_translation y_translation 1і і і Главная матрица масштабирования -------------------------------------- Главная матрица масштабирования - это такая матрица, в которой scale_x и scale_y - это коэффициенты масштабирования объекта по координатам x и y: іscale_x 0 0і і0 scale_y 0і і0 0 1і Такая матрица позволяет выполнять неоднородное масштабирование - мы можем задать один масштаб по оси X и другой - по оси Y. Таким образом, если мы хотим масштабировать объект однородно, то должны задать scale_x = scale_y. - 107 - Главная матрица поворотов ------------------------------- В главной матрице поворотов angle - это угол, на который вы хотите повернуть объект: іcos(angle) -sin(angle) 0і іsin(angle) cos(angle) 0і і0 0 1і Общая матрица масштабирования, поворотов и перемещений ---------------------------------------------------------- Hаступает торжественный момент. Теперь мы возьмем матрицы перемещения, масштабирования и поворота и перемножим их (получим их конкатенацию), чтобы получить общую матрицу, реализующую все три функции сразу. Окончательно матрица будер выглядеть так: іscale_x x cos(angle) scale_x x -sin(angle) 0і іscale_y x sin(angle) scale_y x cos(angle) 0і іx_translation y_translation 1і Если вы теперь умножите вершины объекта на эту матрицу, то получите перемещенный, повернутый и масштабированный объект. Hе слабо, а? Компонент нормализации вершины ------------------------------------ Я совсем упустил одну маленькую деталь, которую вы уже, наверное, заметили. "Как мы можем умножить вершину на матрицу размером 3х3?" Hеплохой вопрос. Рад, что вы спросили. Чтобы выполнить это, мы должны изменить представление структуры вершин, добавив компонент нормализации. Компонент нормализации - это просто единица, добавленная в конец структуры, описывающей каждую вершину. >ъ-ъ-[End of Windows Clipboard]-ъ-ъ< With respect, $erg. mailto:iam_serg@chat.ru ... Взялся за грудь - говори что-нибудь --- GoldED+/386 1.1.4.5 * Origin: Life is suck, but nothing better is known yet :( (2:5048/7.6) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/23173b1bbccb.html, оценка из 5, голосов 10
|