Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
ЛАБОРАТОРНАЯ РАБОТА №8
Преобразование двумерных координат. Динамическое
Преобразование координат.
1. Цель работы: исследование математических методов и алгоритмов преобразования двумерных и трехмерных координат в процессе построения сложных графических изображений, а так же изучение алгоритмов построения динамических изображений со сложным преобразованием координат в графическом режиме.
Задачи работы.
Освоить приемы работы с системой двумерных координат.
Содержание работы.
- Получить задание у преподавателя.
- Написать и отладить на компьютере программу, реализующую требуемое преобразование изображения без масштабирования.
- Если изображение искажено, ввести масштабирующие коэффициенты.
- Результат работы программы продемонстрировать преподавателю.
- Напечатать листинг программы.
Требования к отчету
Отчет выполняется на листах А4 формата и должен содержать:
- название работы, постановку задачи, порядок выполнения работы и полученное изображение;
- ответы на контрольные вопросы.
Теоретический материал
Преобразования координат широко используются при синтезе как статических, так и динамических изображений с целью реализации таких операций над рисунком как перенос, поворот, подобие, симметрия. Перенос является достаточно простой операцией, т.к. реализуется путем изменения значений одной и/или второй координат. Другие операции, а тем более их комбинация, характеризуются большей сложностью и требуют математических преобразований. Для простоты в данной лабораторной работе рассматриваются только двумерные преобразования. Обычно в данном процессе исходно задаются основные координаты x1, y1, а через них в виде уравнений просчитываются вторичные координаты x22, y22.
x22 = f(x1, y1),
y22 = f(x1, y1).
Наиболее распространены так называемые аффинные преобразования, которые предполагают сохранение после расчета вторичных координат параллельность и формы у прямых. Общий вид уравнений таких преобразований имеет вид
x22 = axxx1 + axyy1 + ax,
y22 = ayxx1 + ayyy1 + ay.
При этом сдвиг без поворота характеризуется матрицей коэффициентов
ax | ||
ay |
где ax, ay - задают сдвиг соответственно по осям x и y, т.е.
x2 = x1 + ax,
y2 = y1 + ay.
Операция масштабирования (преобразования подобия) реализуется матрицей
М | ||
М |
Зеркальное отображение относительно диагонали первого квадранта (смена координатных осей) предполагает матрицу вида
Повороту на угол α против часовой стрелки соответствует матрица
сosα | -sinα | |
sinαα | cosα |
Комбинации двух или более операций преобразования соответствует комбинация коэффициентов соответствующих матриц. Так, например, сдвиг с одновременным поворотом реализуется матрицей
сosα | -sinα | ах |
sinαα | cosα | аy |
Описание среды программирования
При преобразовании координат в среде языка программирования Turbo Pascal необходимо учесть, что графический экран ПК представляет собой четвертый квадрант прямоугольной системы координат, т.е. начало координат находится в левом верхнем углу. Полноценная система координат создается самим пользователем путем переноса ее начала вниз и/или вправо на величины Dx и/или Dy, т.е. реализуется локальная система, сдвинутая на данные величины относительно глобальной. В дальнейшем, глобальные координаты всех точек (xг, yг) пересчитываются через локальные (xл, yл) по следующим уравнениям:
xг = xл + Dx,
yг = Dy - yл.
Вторая проблема, возникающая обычно при сложных преобразованиях, - разная разрешимость (количество пикселей на единицу длины) графического экрана по горизонтали и вертикали. Попытка изобразить квадрат путем задания одинакового количества пикселей по его сторонам приводит к отображению прямоугольника, вытянутого по высоте. Данный эффект отсутствует только при разрешении 640х480 и особенно усиливается при установке подрежимов с низким количеством пикселей по вертикали, например, 640х200 (см. лабораторную работу №3). Для устранения данного эффекта средствами языка Паскаль производится предварительное масштабирование изображения с помощью процедуры GetAspectRatio (mx, my), где mx, my - переменные, в которые записывается число точек по горизонтали и вертикали. В дальнейшем, при построении требуемого изображения все координаты по оси x должны умножаться на отношение my/mx или, наоборот, все координаты по оси y умножаются на отношение mx/my. При этом возникает еще одна проблема, связанная с особенностями языка Паскаль: получаемые при умножении масштабированные координаты могут принимать вещественные значения, что запрещено для параметров графических примитивов данного языка. Поэтому все результаты таких умножений должны округляться функцией Round.
Дата публикования: 2015-02-20; Прочитано: 227 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!