Компьютерная графика Лекция третья Тема Координаты, примитивы, преобразования Подготовлено А.А.Пименовым Для 4 курса мат.-мех. СПбГУ в 2006 calvrack@googlemail.com 1 Декартовы и полярные координаты • Декартовы координаты на плоскости и в пространстве • Полярные координаты • Цилиндрические координаты • Сферические координаты 2 Крен, Тангаж, Рыскание крен рыскание тангаж 3 Способы задания примитивов (Линия и Отрезок) • Две точки • Параметрическое задание • Каноническое представление • Как пересечение плоскостей 4 Способы задания примитивов (Плоскость) • Три точки • Аналитическое задание • Задание с нормалью 5 Формулы и операции (векторное произведение) 6 Формулы и операции (смешанное произведение) 7 Пересечения и принадлежность • Параллельные прямые • Скрещивающиеся прямые • Прямая и плоскость 8 Представление сцены Мировая система кординат • Система координат подсцены Точка 9 Замена системы координат • Со сдивгом • Без сдвига 10 Аффинные преобразования Аффиное преобразоване сохраняет параллельность и отношения расстояний 11 Сдвиг, масштабирование 12 Поворот 13 Собственные числа и геометрический смысл • Комплексный оператор в С3 имеет собственное число • Более того имеет 3 собственных числа • Одно из них вещественное… если коэффициенты вещественные • Ось вращения 14 Перенос 15 Проективные (однородные) координаты • Точность • Удобство • Возможность представлять несобственные элементы a , b , c ⇔[ x : y : z : w ] , гд е {〛 x a= w y b= w z c= w 16 Обобщенные преобразования X = A∗ x • Матрица 4x4 X= X= b a 1,1 a 1,2 a 1,3 x a a 2,1 a 2,2 a 2,3 ∗ y ∗ b c a 3,1 a 3,2 a 3,3 z A t u v a x b ∗ y c z 1 s 17 Перспективные преобразования • Общее рассуждения про нижнюю строку матрицы 18 Как быстро попарно умножать вектора? (x , y ,z ) * (a , b ,c) = ax + by + cz = (x + b) * (y + a) – yx - ab + cz Но xy и ab можно считать заранее... ! 19 Кватернионы Гамильтон q= [cos 2 , sin 2 ∗v] ∣q∣= w 2 x 2 y 2 z 2 q ° = [w ,− v ] ° −1 q q = 2 ∣q∣ ∣q∣= 1 ⇒q − 1 = q ° 20 Умножение кватернионов void MulQuaternions(Quaternion *res, const Quaternion *q1, const Quaternion *q2) { float A, B, C, D, E, F, G, H; A = (q1->w + q1->x) * (q2->w + q2->x); B = (q1->z - q1->y) * (q2->y - q2->z); C = (q1->x - q1->w) * (q2->y + q2->z); D = (q1->y + q1->z) * (q2->x - q2->w); E = (q1->x + q1->z) * (q2->x + q2->y); F = (q1->x - q1->z) * (q2->x - q2->y); G = (q1->w + q1->y) * (q2->w - q2->z); H = (q1->w - q1->y) * (q2->w + q2->z); res->w = B + (-E - F + G + H) * 0.5; res->x = A - ( E + F + G + H) * 0.5; res->y =-C + ( E - F + G - H) * 0.5; res->z =-D + ( E - F - G + H) * 0.5; } 21 Матрицы и кватернионы • 1-2y2-2z2 2xy+2wz 2xz-2wy 2xy-2wz 1-2x2-2z2 2yz+2wx 2xz+2wy 2yz-2wx 1-2x2-2y2 22 Применение кватерниона к вектору 23 • Скалярное произведение 3 умн, 2 сл • Векторное произведение 6 умн, 3 сл • Перемножение двух матриц 3x3 27 умножений и 18 сложений. • Перемножение двух кватернионов 16 умн и 12 сл. или (8+4) умн + 32 сл • Применение кватерниона к вектору • Умножение матрицы на вектор 9 умн + 6 сл • Конвертирование матрицы в кватернион требует 7 сложений и 2 условных перехода. • Конвертирование кватерниона в матрицу требует 16 умножений 15 сложений и 1 деление. • Конвертирование матрицы вращения в кватернион, умножение на другой кватернион, а затем конвертирование обратно в матрицу потребует 32 умножений 34 сложений 2 условных перехода и 1 деление. 24 Сферическая линейная интерполяция SLERP(t) = (p sin((1–t)a) – q sin(ta)) / sin(a) где q и p - кватернионы. t - изменяется от 0 до 1, a - угол между q и p, cos(a) = (q,p)/(|q|*|p|) = (q,p). Выводится исходя из линейной комбинации, единичной длинны и угла При малых углах используют обычную интерполяцию. 25 Преборазование нормали n∗ x p n∗ n x− p = 0 A∗ x A∗ p −1 A ∗ A x− p = 0⇒ −1 n∗ A 26 Несколько замечаний • О физике при повороте и кватернионе в степени • О площади многоугольника S P= 1 2 n− 1 ∑i= 0 X i∗ Y i 1 − Y i∗ X i 1 – о попадании точки в многоугольник • О замене двумерного поворота тремя сдвигами 27 Links • http://www.gamedev.ru/articles/?id=30129 • http://en.wikipedia.org • http://www.gamedev.ru/users/wat/articles/quaternions • http://www.pm298.ru/ • http://02-07-90327.fizteh.ru/index/kvaternion1/f_otc1 28 Q&A 29 Thanks! 30