Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_KG_rulez.doc
Скачиваний:
8
Добавлен:
25.08.2019
Размер:
726.02 Кб
Скачать

Матричные преобразования объектов Двумерные преобразования относительно координат.

  1. Сдвиг.

y

Сдвиг точки по OY обозначается Dy,

P’(x’,y’) по OX обозначается Dx,

Dy x’ = x + Dx,

P(x,y) y’ = y + Dy,

Важен знак коэффициента D.

x

Dx

[x’, y’] = [x, y] + [Dx, Dy]

P’ = P + T

Теоретически для любого изображения нужно выполнить такие действия над каждой точкой изображения. Если имеем дело с векторным изображением, то для отрезка (А, В) достаточно выполнить перенос концов отрезка (А’, В’). Данное утверждение справедливо для действий масштабирования и поворота. Три действия сдвиг, масштаб и поворот позволяют получить абсолютно любое пространственное преобразование объекта.

  1. Масштабирование.

y

P’(x’, y’)

P(x,y)

x

При масштабировании координаты точки умножаются на коэффициент масштабирования.

x’ = x * Sx

y’ = y * Sy

Запишем в матричной форме коэффициент масштабирования S.

Тогда

P’ = P * S

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

Для простоты промасштабируем по обоим осям.

Пример. Пусть начало отрезка проходит через начало координат.

1 ) y

Промасштабируем его по обеим осям с коэффициентом 2.

P2(1,1) Sx = Sy = 2.

P3(0.5;0.5)

x

P1(0,0)

Тогда получится

y

P2‘(2, 2)

P1‘(0,0)

2) Возьмём P3(0.5;0.5). Выполним масштаб по обеим осям с тем же коэффициентом. Зрительно отрезок как бы сместился вправо. При масштабировании это происходит всегда.

y

P2(2,2)

P3(1,1)

x

  1. Поворот. Если известен угол поворота , то

y

P2‘(x’,y’) x’ = x cos  – y sin 

y’ = x sin  + y cos 

 P(x,y)

x

В матричной форме

Или P’ = P * R, где R – это матрица поворота. При движении против часовой стрелки угол поворота считается положительным, при движении по часовой стрелке угол поворота отрицательный. Недостатки в преобразованиях: сдвиг выполняется через сложение, а масштаб и поворот через умножение. При достаточно сложном объекте это неудобно. Чтобы уйти от сложения в сдвиге объекта, из математики позаимствовали понятие однородных координат.

P(Wx,Wy,W)

То есть, для точки в двухмерном пространстве появляется фиктивная третья координата:

Тогда сдвиг выполняется в матричной форме через умножение P’ = P * T. Таким же образом третья координата добавляется в действие масштабирования и поворота.

Для масштабирования:

Для поворота:

P’ = P * T * S *R – даёт наименьшее количество операций умножения.

Двухмерное преобразование относительно произвольной точки.

P(x,y) – над которой выполняется преобразование

P1(x1,y1)

Результирующее положение точки P’(x’,y’). Относительно начала координат мы знаем. Проще всего так:

  1. Сдвинем начало координат в точку P1(x1,y1).

  2. Выполним все нужные действия над точкой P.

  3. Вернёмся к исходной системе координат.

Сдвиг всей картинки на величину –x1 и –y1:

сдвиг действия возврат

Есть отдельные сокращённые матрицы для сдвига, масштаба и поворота относительно любой точки. Смысл – сократить количество операций умножения.

Например.

– результат – это матрица размером 3х3.

Результат умножения таких матриц имеет вид:

Пользоваться перемноженными матрицами можно, если используется не очень быстрая ЭВМ. Причём это касается в первую очередь видеосистемы (не успевает выполнить умножение за время регенерации кадров). Во всех остальных случаях пользоваться упрощёнными формулами не имеет смысла.

Очень часто применяется способ упрощения реализации поворота. От кадра к кадру угол меняется не более чем на 1 градус. В этом случае косинус близок к 1, то есть cos  1, при   1:

На каждом шаге погрешность очень маленькая, однако если количество оборотов достигнет двух и более, то погрешность может достигнуть веских величин, поэтому пройдя полный круг 360, нужно вернуться к исходному положению точки, то есть погасить погрешность.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]