- •Пугачев а.И.
- •1.1. Растровые изображения
- •1.2. Графические устройства ввода-вывода
- •1.3. Видеоадаптеры
- •2.1. Двумерные примитивы
- •2.2. Визуализация на дискретной области вывода
- •2.3. Визуализация отрезков прямых
- •2.5. Кривые Безье
- •2.7. Алгоритм закрашивания ориентированных многоугольников
- •2.8. Теоретико-множественные операции над двумерными областями
- •2.9. Построчный алгоритм тмо
- •2.10. Программная организация данных для представления сложных объектов
- •3.1. Двумерные геометрические преобразования
- •3.2. Совмещение преобразований. Преобразование относительно заданного центра
- •3.4. Непрерывные геометрические преобразования
- •3.5. Линейные преобразования фрагментов изображения
- •4.1. Трехмерные примитивы
- •4.2. Аппроксимация криволинейных поверхностей
- •4.3. Многогранники и сложные объекты
- •4.4. Свет и цвет
- •4.5. Диффузная модель распространения света
- •4.6. Зеркальное отражение света
- •4.7. Трехмерные геометрические преобразования
- •4.8. Проецирование трехмерных объектов
- •4.9. Ориентация и потенциальная видимость поверхностей
- •4.10. Удаление невидимых точек поверхностей
- •4.11. Метод визуального сглаживания Гуро
- •4.12. Метод визуального сглаживания Фонга
- •4.13. Системы координат в пространственной сцене
- •4.14. Алгоритмы трехмерной визуализации
- •4.15. Построение изображения с тенями
- •Основы компьютерной графики
3.4. Непрерывные геометрические преобразования
Непрерывные геометрические преобразования – важный инструмент в интерактивных графических программах, с помощью которого производится построение и размещение фигур на экране монитора. Другим применением непрерывных преобразований является анимация, т.е. моделирование различных видов движения объектов по заранее разработанным траекториям или других непрерывных изменений их геометрии.
В силу дискретного характера формирования изображения в компьютере плавные, непрерывные преобразования получают как последовательность малых преобразований. Результат каждого преобразования, как кадр фильма, выводится на экран.
Реализация непрерывных преобразований возможна в двух формах – интегральной и дифференциальной.
В интегральной форме в любой момент времени t матрица С(t) текущих координат рассчитывается на основе матрицы С0 исходных, т.е. первоначально заданных и неизменяемых координат:
C(t) = C0 W(t), (3.27)
где W(t) – матрица текущего преобразования на момент времени t.
Начальным значением матрицы W(t) для t = 0 будет единичная матрица I, т.е. W(0) = I.
В дифференциальной форме для расчета матрицы С(t + ∆t) новых координат на очередном шаге преобразования используется матрица С(t) координат, полученных на предыдущем шаге:
C(t + ∆t) = C(t) ∆W, (3.28)
где ∆W – матрица элементарно малого преобразования за время ∆t.
Начальным значением С(t) при t = 0 будет матрица первоначально заданных координат, т.е. С(0) = C0.
В программах, моделирующих движение объектов в реальных условиях, параметры t и ∆t соответствуют времени. В большинстве же других графических приложений более важным бывает сам факт движения объектов. Тогда в качестве величины, сопоставимой со временем, удобнее использовать программные циклы по расчету результатов элементарных преобразований и визуализации, т.е. t в этом случае будет соответствовать номеру цикла, а ∆t = 1.
Ниже показано, как в интегральной форме выглядят частные виды непрерывных преобразований.
Преобразование плоскопараллельного перемещения
(3.29)
где mx(t) и my(t) – функции, задающие непрерывное перемещение по соответствующим осям. Для равномерного прямолинейного перемещения mx(t) = vxt; my(t) = vy t, где vx, vy – составляющие скорости [1/цикл].
Преобразование вращения относительно начала координат
(3.30)
Функция определяет непрерывное изменение угла поворота. Для моделирования равномерного вращения следует задать угловую скорость w [рад/цикл].
Преобразование масштабирования относительно начала координат
(3.31)
где sx(t) и sy(t) – функции, задающие непрерывное изменение масштабных коэффициентов по соответствующим осям. Для моделирования линейного изменения масштабов по осям со скоростями vx и vy формулы изменения масштабных коэффициентов будут следующими:
(3.32)
При программной реализации этого закона необходимо контролировать и не допускать использование нулевых значений sx(t) и sy(t), приводящих к вырождению преобразуемых объектов.
Эффекту приближения и удаления фигур лучше соответствует показательный закон изменения масштаба:
(3.33)
Этот закон удобен и в реализации, так как нулевые значения sx(t) и sy(t) здесь исключаются.
Простейшие законы изменения параметров в приведенных непрерывных преобразованиях даны в качестве примеров. Если необходимо, то можно использовать и более сложные законы, в том числе и задаваемые с помощью различных средств ввода: мыши, джойстика, трекбола и других устройств управления или контроля. Например, в системах виртуальной реальности значения этих параметров поступают с датчиков, контролирующих движения пользователя.
Теперь рассмотрим, как выглядят непрерывные преобразования в дифференциальной форме.
Плоскопараллельное перемещение:
(3.34)
Здесь ∆mx, ∆my – элементарно малые перемещения по соответствующим осям за время ∆t.
Вращение вокруг начала координат:
(3.35)
Здесь ∆φ – элементарно малый угол поворота за время ∆t.
Масштабирование относительно начала координат:
(3.36)
Здесь (1 + δx), (1 + δy) – элементарно малые изменения масштабных коэффициентов.
Заметим, что моделирование масштабирования в дифференциальной форме по результату соответствует масштабированию в интегральной форме на основе показательного закона изменения масштабных коэффициентов.
Сравнивая между собой интегральную и дифференциальную формы геометрических преобразований, можно сделать следующие выводы:
в дифференциальной форме ошибки от каждого элементарного преобразования со временем накапливаются в значениях координат, что при большом числе шагов преобразования может привести к отклонению от заданной траектории и к необратимым искажениям формы фигур;
в интегральной форме легко задавать различные законы изменения параметров;
в дифференциальной форме легко реализуются только линейные законы изменения параметров (для масштабирования – показательный).