Скачиваний:
67
Добавлен:
16.04.2013
Размер:
3.38 Mб
Скачать

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

Композиция наиболее общего вида, составленная из операций R, S и Т, имеет матрицу

R11 R12 0

A = R21 R22 0

Mx My 1

Ее верхняя часть размером является объединенной матрицей поворота и масштабирования, в то время как mx и my описывают суммарный перенос. Для вычисления Р*М как произведения вектора на матрицу размером 3x3 требуются 9 операций умножения и 6 операций сложения. Структура последнего столбца матрицы в выражении позволяет упростить фактически выполняемые действия:

x' = x * R11 + y * R21 + Mx

y' = x * R12 + y * R22 + My

сводя процесс к 4 операциям умножения и 4 операциям сложения.

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

Другой областью применения, в которой важно быстродействие, является генерация последовательных кадров — изображений объекта (такого, как молекула или самолет), когда каждый следующий кадр отличается от предыдущего поворотом объекта в несколько градусов. Если каждое изображение строится и выводится на экран дисплея достаточно быстро (в течение 30 — 60 мс), то поворот объекта будет казаться непрерывным и плавным. Для достижения такого быстродействия каждую точку и линию объекта следует преобразовывать как можно быстрее. В уравнения поворота входят 4 операции умножения и 2 операции сложения. Эту оценку можно улучшить, воспользовавшись тем, что угол Θ мал (несколько градусов) и cos Θ 1 .

При такой аппроксимации уравнения поворота принимают вид

х' = х — y * sin Θ, y' = x' * sin Θ + y,

и тогда требуется только 2 операции умножения и 2 операции сложения.

Экономия двух операций умножения может оказаться существенной для ЭВМ, не имеющих аппаратно реализованных операций умножения. Можно получить еще лучшую аппроксимацию, если во втором уравнении использовать х' вместо х:

x' = x — y * sin Θ, y' = x' * sin Θ + y

Определитель соответствующей матрицы размером 2x2 теперь равен 1, как и определители всех матриц поворота.

Однако здесь возникает одно затруднение. Формулы представляют собой аппроксимацию точных значений х' и у' с некоторой небольшой ошибкой. Каждый раз, когда формулы применяются к новым значениям х и у, ошибка слегка увеличивается. При достаточно большом числе повторений ошибка станет сравнимой с самими значениями. В результате изображение поворачивающегося образа объекта все в большей степени будет выглядеть как совокупность линий, вычерченных случайным образом.

Это затруднение можно преодолеть, если сохранять исходный список (х, у) координат. После каждого поворота на 360° полученные в результате данные отбрасываются, а для последующего вращения берутся исходные данные. Для дополнительного списка координат потребуется память. В этом нет ничего удивительного, поскольку справедлива пространственно-временная зависимость между пошаговым и абсолютным поворотом! Преимущества, которые дает пошаговый поворот, нельзя получить, ничем не жертвуя.