4. Введите некоторые промежуточные величины: т - w u*, п - w v*, e = yjm2 +п2, а также г - (тли* + nv*)/e.
5. Вычтите из вектора w часть вектора г так, чтобы оставшаяся часть стала ортогональной векторам и* и v*. Обозначьте с = w - ex. (Докажите, что с и* = с v* = 0.)
6. Нормируйте вектор с, для чего задайте вектор w* - c/S3, где 53 - |с|.
7. Таким образом, матрица
является ортогональной и поэтому представляет вращение. (Вычислите ее определитель: если он равен -1, то просто замените лу* на -лу*.)
Докажите, что и*Я4 = и*, у*Я, - v* + ^и*/52 - у/52 и лу*Я, = лу*. Сначала докажите следующее свойство тензорного произведения: для любых векторов а, Ь, с справедливо равенство а(Ь®с) = - (а Ь)с. Затем примените это свойство и факт ортогональности векторов и*, v*, лу* для доказательства истинности первых трех соотношений.
5.9. Дополнительная литература
11. Докажите, что и*Я2 = и*, у*Я2 = V* и ч/*Н2 = \у* + ег/53 = \у/53.
12. Объедините все промежуточные результаты и покажите, что М = 5/?Я,Я2,
Отметим, что такое разложение не является единственным, поскольку векторы u, V и w можно было бы ортогонализировать в другом порядке. Например, мы могли вначале сформировать вектор w* = w/ |w|, затем вычесть часть v из w* и получить вектор, ортогональный к вектору w*, а затем вычитанием вектора из и получить вектор, ортогональный к двум остальным.
Напишите подпрограмму
void decomposeCDBL m [3][3]. DBL S [3][3]. DBL R [3][3], DBL Hl [3][3].DBL H2 [3][3]).
которая принимает матрицу m и вычисляет матрицы s, r, ht и Я2 методом 12 шагов, как это описано у Голдмана. Величина DBL определена как double.
Известны и другие способы разложения трехмерного преобразования - см., например, работы Томаса [Thomas, 195] и Шумейка [Shoemake, 186].
Тематическое задание 5.7. Рисование трехмерных сцен, описанных на языке SDL
Уровень сложности II.
Разработайте законченное приложение, которое использует классы типа Scene, Shape, Affine4 и поддерживает чтение и рисование сцепы, описанной в SDL-файле. Для упрощения работы используйте классы, содержащиеся на web-сайте книги. Конкретизируйте любые методы drawOpenGLO, которые вам потребуются. Разработайте файл описания сцены, содержащий описания переключателя, деревянного стула н нескольких стен.