Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2014, 23:11   #1
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию 3d трансформация, матрицы, повороты, масштабирование

Может кто нибудь на словах объяснить как делать правильно масштабирование относительно новых координат?

Смысл такой - есть набор точек, определяющий фигуру. Мне надо повернуть фигуру, а потом уже повернутую отмасштабировать относительно координат.

Все делается через матрицы. И в этом самая загвоздка. У меня есть матрица поворота. Фигура поворачивается. Есть матрица масштабирования. Фигура масштабируется.
Но! Сложить все в кучку не удается. Адекватный результат получается только, если сначала фигура масштабируется, а потом уже поворачивается.

А если поменять местами матрицы во время их перемножения - получается фигня....

Мне нужно понять, чяднт...
Smogg вне форума Ответить с цитированием
Старый 10.03.2014, 23:25   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию не, все нормально работает, оказыцца

Извиняюсь за беспокойство)
Прост я се придумал тестовые фигуры с выгибонами, а не просто прямоугольники, поэтому и масштабирование после поворотов кажется идиотским:
Изображения
Тип файла: jpg good3Dtrans.jpg (73.6 Кб, 45 просмотров)
Smogg вне форума Ответить с цитированием
Старый 11.03.2014, 02:39   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Не надо менять матрицы местами - умножение зависит от порядка. И результат операций тоже
Black Fregat вне форума Ответить с цитированием
Старый 11.03.2014, 08:22   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Практически всегда сперва делается масштабирование (Scale) исходной фигуры, потом поворот (Rotate, если до масштабирования, то коэффициенты масштабирования усилят/уменьшат и поворот, что как бэ редко является тем, чего хочется) и только потом смещение (Translate, и его поведение, если он до предыдущих шагов сделан, вообще сложнопредсказуемо).
Чтобы использовать его у Вас, насколько я могу понять логику Вашей программы, а именно - операции эти разделены по времени - необходимо при любом изменении настроек пересобирать итоговую матрицу путём перемножения S*R*T (именно в этом порядке, т.к. уже озвучено, что произведение матриц некоммутативно) и потом с её (итоговой матрицы) помощью исходную фигуру сразу размещать на холсте.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3d трансформация прямоугольника Smogg Помощь студентам 3 07.03.2014 00:47
Повороты векторов Smogg Помощь студентам 3 29.12.2013 14:51
Трансформация (pascal - C++) spinogryz_ua Помощь студентам 4 30.03.2012 23:58
Трансформация (Pascal, C++) spinogryz_ua Помощь студентам 1 22.02.2012 11:06
Повороты картинок yura-cat Помощь студентам 1 30.10.2008 14:28