|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.06.2010, 13:56 | #11 | ||
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
Цитата:
Последний раз редактировалось alexBlack; 29.06.2010 в 14:05. |
||
29.06.2010, 23:07 | #12 | |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
Цитата:
В матрицах мне как-то вообще трудно разобраться. Может пояснишь код немного? Я ещё не проходил математические матрицы. И вообще в ряд ли пройду Последний раз редактировалось Altera; 29.06.2010 в 23:13. |
|
30.06.2010, 08:47 | #13 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Кратко по коду.
Points3D - координаты вершин куба (на четвертую координату можно не обращать внимание - всегда 1). В этом массиве координаты никогда не меняются. DrawScene; - вызов PointsTo2D - приведение координат к двумерным. Затем просто соединяем вершины чтобы получить куб. ---- Немного теории. Любые преобразования точки в пространстве - это умножение координат точки на матрицу. Например, возьмем матрицу поворота вокруг оси OX Код:
|x, y, z, 1| * M = |x, y*cos a -z*sin a, y*sin a + z cos a, 1| знакомые формулы, не правда ли ? Прелесть в том, что в матричной форме не нужно делать явных операций с тригонометрическими формулами. Любое преобразование в пространстве получается простым умножением матриц. Например, если нужно сделать поворот покруг оси OX, затем перенос вдоль оси OY, берем две матрицы - матрицу поворота MRox и матрицу переноса MToy и перемножаем их. Теперь достаточно умножить координаты точек на полученную матрицу и получим новые координаты точек после выбранных трансформаций. Очень доступно написано здесь Компьютерная графика. Динамика, реалистические изображения ----- В коде RMatrix - это матрица сделанных поворотов. При нажатие клавиши (например, Up) создаем матрицу поворота: MatrixRx(B, pi/36); и добавляем ее к уже сделанным поворотам умножая текущую матрицу: RMatrix := M4_Mul_M4(RMatrix, B); ----- Матрицу можно было бы сразу применить ко всем точкам Points3D, но тогда неудобно будет добавлять новые точки аттрактора. ----- Вернемся к PointsTo2D. Здесь мы создаем матрицу масштабирования. Затем умножаем ее на матрицу поворотов RMatrix. Наконец, умножаем ее же на матрицу, задающую перспективу. Таким образом получена матрица A для преобразования координат. Теперь умножаем координаты всех точек на эту матрицу и получаем координаты точек на проекции. |
30.06.2010, 18:43 | #14 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
А почему матрица размером 4x4 а не 3х3?
Переделал на 3х3, нормально всё. Не силён я всё таки в тригонометрии. У тебя там 10^6 этих долбаных матриц и 10^8 их всевозможных перемножений. Ничего понять не могу. Перспективу я тоже выпилил что бы на нервы не действовало. Но всё равно разобраться не могу. Последний раз редактировалось Altera; 30.06.2010 в 19:20. |
01.07.2010, 20:27 | #15 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
arcTan(Y/X) при X = 0, тоже материться будет)))
юзай arcTan2(Y,X) - там на сколько я помню все предусмотрено... С матрицами и вправду проще... Но для человека который не изучал линейную алгебру и геометрию проще будет с тригонометрией разобраться. Во всяком случае мне было проще. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Описание и обсуждение шаблонов проектирования (паттерны) | atomicxp | Общие вопросы по программированию, компьютерный форум | 35 | 20.01.2018 21:42 |
использование платного ПО для проектирования | Domanoff | Свободное общение | 4 | 11.06.2010 13:33 |
Волновой алгоритм (алгоритм Ли) | MrRockchip | Общие вопросы C/C++ | 4 | 10.05.2010 13:26 |
Case инструменты проектирования. | Levsha100 | Свободное общение | 5 | 06.12.2009 03:12 |
Занесение данных в StringGrid на этапе проектирования формы | program123 | Компоненты Delphi | 2 | 16.02.2009 23:00 |