Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[11]

0" 0

0 . 1

0" 0

0 , 1

0"

0 0 1

Обратите внимание на смену положения синуса угла с отрицательным знаком в матрице поворота вокруг оси y. Правильность этих матриц легко

проверить поворотом одного из ортов на 90o, при этом он должен перейти в следующий по порядку орт на соответствующей координатной оси.

Обратные преобразования будут выражаться обратными матрицами. Для операции переноса надо лишь заменить знаки компонент вектора переноса на противоположные:

T ~1 (Dz, Dy, Dz) = T(- Dz,-Dy,-Dz); для операции масштабирования - на обратные значения:

S-1 (Sz, Sy, Sz )= S (1/Sz ,1/Sy ,1/Sz); для поворота - выбором отрицательного угла поворота:

R 1 (а) = R(-a).

Результатом нескольких последовательных поворотов будет матрица

0"

0 . 0 .

Rz (а) =

Г Cos а Sin а - Sin а Cos а

0 0

00

Матрица поворота вокруг оси x имеет вид:

0 0 1 0

Rx (а) =

и вокруг оси y:

Ry (а) =

Г1 0

0

0 Cos а

Sin а

0 - Sin а

Cos а

0 0

0

Cos а 0

- Sin а

0 1

0

Sin а 0

Cos а

0 0

0

A

Г ГЦ

Г12

Г13

r21

Г22

Г23

Г31

Г32

Г33

0

0

0


Здесь верхняя матрица размером 3 х 3 называется ортогональной. Важным ее свойством является то, что обратная к ней матрица является

- 1T

транспонированной: B - B . Это полезно тем, что при вычислениях достаточно поменять индексы местами и обратное преобразование получается автоматически.

После перемножения любого числа матриц вида T, S и R результирующая матрица всегда будет иметь вид:

Г ГЦ

r12

r13

01

r21

r22

r23

0

r31

r32

r33

0

tx

ty

tz

1

Здесь верхняя часть размером 3 х 3 определяет суммарный поворот и масштабирование, а три коэффициента последней строки - суммарный перенос.

Вопросы эффективности вычислений

Рассмотрим проблему ускорения вычислений в одной из самых трудоемких операций компьютерной графики - операции поворота точки относительно начала координат. Как было показано ранее, для ее выполнения необходимо произвести 4 операции умножения, 2 операции сложения, а также вычислить значения синуса и косинуса угла поворота. Напомним вид формул поворота:

x - x • Cosa - y • Sina

y - x • Sina + y • Cosa

Одним из наиболее часто встречающихся способов ускорения операции поворота является отказ от вычисления синуса и косинуса угла во время выполнения программы, и использование их заранее подсчитанных значений, которые занесены в специальную таблицу. Например, в этой таблице могут храниться значения синусов и косинусов углов поворота с шагом в 1 градус. Тогда целое количество градусов угла поворота может служить в качестве индекса при извлечении соответствующих значений синусов и косинусов из таблицы. Такой прием называется табличным поворотом.

Дополнительным способом ускорения операции поворота является уменьшение количества операций умножения. Рассмотрим вывод формулы О. Бьюнемана с использованием тангенса половинного угла, в которой


поворот точки вокруг начала координат производится за 3 операции умножения и 3 операции сложения. Так как на многих микропроцессорах операции умножения выполняются дольше чем операции сложения, то экономия времени достигается за счет уменьшения операций умножения.

Вывод формулы будем получать из геометрических построений, как показано на рис.27.

Рис. 27. Вывод формулы О. Бьюнемана.

Будем искать выражение координат x и y через x и y . На оси Ox

отложим отрезок OS, такой что OS = x . Тогда x = OS - QS = x - QS. Здесь отрезок QS является горизонтальной проекцией отрезка PT, где

PT = PU + UT, PU = y, UT = xtgв => x = x- PT Sin2, где

PT = y + x tg . Теперь, зная x, можно выразить y в виде суммы длин отрезков QV и VP . Так как длины отрезков PV и PT равны как радиусы

окружности с центром в точке P, то y = x.gв + PT. Обозначим PT = T

отсюда следует, что



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19]