Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
lunatichai
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 6
#1

Матричные преобразования

25.01.2017, 21:09. Просмотров 253. Ответов 12
Метки нет (Все метки)

Здравствуйте, помогите с матрицами. Имеется 3 прямоугольника (скажем 1-красный, 2-черный, 3- зеленый), причем зеленый двигается по матрице красного. Нужно чтобы зеленый зависел от черного и красного. Т.е. если поворачиваем черный то зеленый вращается вокруг точки поворота черного и если затем поворачиваем еще вокруг красного, то зеленый уже от текущего поворачивается вокруг точки вращения красного.
PS: На картинках попытался отобразить что имеется ввиду, а также по факту opengl тут не имеет значения и достаточно 2D.
0
Миниатюры
Матричные преобразования   Матричные преобразования   Матричные преобразования  

Матричные преобразования  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2017, 21:09
Ответы с готовыми решениями:

Матричные преобразования в OpenGL
Всем привет. Дошел до матричных преобразований по книге "OpenGL суперкнига 3е...

Преобразования
Здравствуйте, как преобразовать Четырехугольник в пятиугольник или к примеру...

Модельные преобразования
Задание: Нарисовать 4 равносторонних треугольника (без преобразований, с...

Найти матрицу преобразования
Здравствуйте Для треугольника известны начальные позиции его точек (A1, B1,...

Двумерное изображение. Аффинные преобразования
Построить двумерное изображение заданной фигуры. Выполнить над ней все аффинные...

12
Excalibur921
750 / 425 / 68
Регистрация: 12.10.2013
Сообщений: 2,838
26.01.2017, 01:53 #2
На что влияет только сдвиг:
1) красного.
2) зеленого.
3) черного.
На что влияет только поворот:
4) красного.
5) зеленого.
6) черного.

Изначальная задача что? Для чего это?

Хотите перемещать жесткий треугольник ABC за точку A или C и свободно задавать B
и хотите вращать треугольник то вокруг A то вокруг С?
0
lunatichai
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 6
26.01.2017, 08:07  [ТС] #3
добавлю что за центр вращения у каждой фигуры указан ее же левый верхний угол. красный и черный никак не влияют друг на друг. Задача в том что на зеленый могу действовать 2 остальных в равной степени. т.е при сдвиге красного скажем вправо на 10 зеленый также двигается вправо на 10. затем при сдвиге черного вправо на 10 зеленый из позиции 0,10 перейдет в 0,20. при повороте черного зеленый от своей текущей позиции должен вращать вокруг центра черного (левый верхний унол черного). далее если повернем красный то зеленый от уже текущей позиции должен повернутся вокруг центра вращения красного. сам зеленый может также перемещаться. И добавлю чтобы было яснее двигаться и поворачиваться все фигуры будут мышкой.
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
26.01.2017, 11:32 #4
Все начинается с "мира" - системы координат (СК) в которой меряются все остальные. Т.к. упоминаний о нем ноль, то предположим что мир - стандартная СК окна, центр (0, 0) = левый верхний угол, X идет вправо, Y вниз. Все пр-ки записаны в мировой СК. Теперь рассмотрим поворот вокруг левого верхнего угла черного пр-ка (bx, by). Ставим центр локальной СК туда. Матрица (row-major)
1 0 0 0
0 1 0 0
0 0 1 0
-bx -by 0 1
Теперь поворачиваем на угол "a" в новой СК. Матрица
cos(a) -sin(a) 0 0
sin(a) cos(a) 0 0
0 0 1 0
0 0 0 1
Теперь вернемся в мир, матрица
1 0 0 0
0 1 0 0
0 0 1 0
bx by 0 1
Перемножив эти 3 матрицы получим одну. Если теперь применить ее "справа" ко всем точкам пр-ков - получим нужный поворот.

Примечание: если матрицы "column-major" (как в OpenGL) то все буде выглядеть иначе, но рез-т тот же самый
0
lunatichai
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 6
26.01.2017, 11:47  [ТС] #5
Igor3D, спасибо за ответ. вы описали просто поворот вокруг точки. вопрос несколько стоит сложнее. например на 1м рисунке вложенном черный со смещением 100,100 зеленый и красный в 0,0. значит если повернуть черный на 90гр то зеленый повернется на 90гр и левый верхний угол сместится в точку 200,0. так вот теперь если повернуть красный то вместе с ним относительно 0,0 должен повернуться и зеленый. какую комбинацию матриц нужно использовать?
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
26.01.2017, 11:58 #6
Цитата Сообщение от lunatichai Посмотреть сообщение
вы описали просто поворот вокруг точки. вопрос несколько стоит сложнее.
Второй поворот - все точно так же, только смещение берем для левого верхнего угла красного пр-ка. Если бы он вращался вместе с черным - то к смещению сначала применить матрицу первого поворота. Словом - смещение в мире
0
Excalibur921
750 / 425 / 68
Регистрация: 12.10.2013
Сообщений: 2,838
26.01.2017, 12:03 #7
Похоже ТС хочет такое:
Если сдвиг красный, то сдвиг зеленого и черного.
Если сдвиг зеленый то остальные неподвижны.
Если сдвиг черный, то сдвиг зеленого и красного.

Если поворот красный, то поворот зеленого и черного, центр поворота красный.
Поворот зеленого недоступен.
Если поворот черного, то поворот зеленого и красного, центр поворота черный.
0
lunatichai
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 6
26.01.2017, 12:10  [ТС] #8
Excalibur921, нет красный не влияет на черный и черный на красный тоже. но оба они влияют на зеленый. вот по формуле Mз=Мк*Мч получается что крутится вместе с красным вокруг его центра вращения и при повороте черного вращается вокруг своей верхней левой точки. а должен вокруг центра черного.
0
Excalibur921
750 / 425 / 68
Регистрация: 12.10.2013
Сообщений: 2,838
26.01.2017, 12:16 #9
Я ж вам предлагал опишите по пунктам (6 штук).
Двигаем объект что с другими? Крутим объект что с другими?
0
lunatichai
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 6
26.01.2017, 12:28  [ТС] #10
Excalibur921, ды я уж и обьяснил и показал на картинках. на картинках же поочерели показано что происходит и какой результат. 1 - исходное положение. 2-вращение черного и где тогда будет зеленый. 3- вращение красного и где должен быть зеленый.
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
26.01.2017, 12:47 #11
Цитата Сообщение от lunatichai Посмотреть сообщение
я уж и обьяснил и показал на картинках. на картинках же поочерели показано что происходит и какой результат. 1 - исходное положение. 2-вращение черного и где тогда будет зеленый. 3- вращение красного и где должен быть зеленый.
Ну так и в чем проблема? Делаете матрицу для поворота вокруг черного, применяете ее к черному и зеленому. Потом матрицу для поворота вокруг красного, применяете к красному и зеленому. Ну можно к зеленому один раз применить произведение матриц
0
lunatichai
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 6
26.01.2017, 12:52  [ТС] #12
Igor3D, проблема в том что так не работает. при умножении матрицы красного на матрицу черного вращается вокруг красного и вокруг себя.
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
26.01.2017, 12:56 #13
Цитата Сообщение от lunatichai Посмотреть сообщение
проблема в том что так не работает. при умножении матрицы красного на матрицу черного вращается вокруг красного и вокруг себя.
Зависит от того какие матрицы (реализацию) Вы используете. Напр если OpenGL то надо записывать в обратном порядке (а по смыслу читать справа налево). Разберитесь с одним поворотом, дальше легче
0
26.01.2017, 12:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2017, 12:56

Компьютерная графика, аффинные преобразования
Помогите!!!!! Плиз!!! Написать программу позволяющую: 1) Построить...

Быстрый алгоритм преобразования изображения BGRA в RGB (си/си++)
Собственно по теме, есть массив пикселей в формате BGRA необходимо быстро...

Матричные преобразования!
Доброго времени суток! Разбираюсь с матричными преобразованиями. Проблема...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru