Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Компьютерная Графика

Двумерный алгоритм преобразование в новые координаты.


Матричная запись.

Система уравнений (2.2) может быть записана в виде одного матричного уравнения

  (2.4)

или с использованием вектора-столбца

  (2.5)

В книгах по машинной графике запись с вектором-строкой (2.4) встречается чаще, чем с вектором-столбцом (2.5). Здесь также будет применяться запись типа (2.4). В такой записи i-я строка квадратной матрицы всегда является отображением i-го единичного вектора (здесь i=1,2). Вполне возможно записать в матричной форме систему уравнений (2.3)

  (2.6)

Однако первая часть этого уравнения не является чисто матричным произведением. В более сложных ситуациях, когда поворот совмещается с другими преобразованиями, было бы более удобно иметь единое матричное произведение для каждого элементарного преобразования. На первый взгляд это кажется невозможным, если преобразование включает операцию переноса. Но, как мы увидим ниже, с помощью матрицы преобразования размером 3х3  это вполне реально. Начнем с простого переноса. Пусть точка P(x, y) переносится в точку P’(x’, y’), где

x' = x + a
y' = y + b

Эти уравнения можно переписать в виде

Но с учетом будущих потребностей это уравнение лучше переписать в следующей форме

  (2.8)

(мы работаем в плоскости, поэтому координата Z всегда неизменна)

Легко проверить, что уравнения (2.7) и (2.8) эквивалентны. Такую запись принято называть записью в системе "однородных координат". Запись каждого преобразования в форме произведения матриц позволяет совмещать несколько преобразований в одном. Чтобы показать такое совмещение преобразований, объединим поворот с двумя переносами. Поворот на угол (фи)  вокруг начала координат O был описан уравнением (2.4).

Заменим это уравнение следующим:

  (2.9)

Теперь выведем новую версию уравнений (2.6) для описания поворота на угол вокруг точки.

Это уравнение может быть выражено формулой

  (2.10)

где через R обозначена матрица размером 3 х 3. Для нахождения этой матрицы R будем считать, что преобразование состоит из трех шагов с промежуточными точками (u1, v1) и (u2, v2).

1. Преобразование для переноса точки в начало координат O

[u1 v1 1] = [x y 1]T’

где

2. Поворот на угол (фи) относительно точки начала координат O

[u2 v2 1] = [u1 v1 1]Rо

где

  (2.11)

3. Перенос из начала координат в точку

[x’ y’ 1] = [u2 v2 1]T

где

Возможность комбинации этих шагов основана на свойстве ассоциативности матричного умножения, то есть

(AB)C = A(BC)

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

Теперь найдем

     [x' y' 1] = [u2 v2 1]T 
                  = {[u1 v1 1] R  }T 
                  = [u1 v1 1] R T 
                  = {[x y 1]T'} R T 
                  = [x y 1]T' R T 
                  = [x y 1]R 

где

R = T’ RоT

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

где введены обозначения

c1 = x -x Cos +y Sin
c2 = y -x Sin -y Cos

Раздел назад | Предыдущая тема | тема вперед | Следующий раздел

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
Мне нравитсяМне не нравится
28 сентября 2005, 17:27:31
Извините, соврал. Все написано правильно. Просто запутался с умножением вектора на матрицу и умножением матрицы на вектор. Данная матрица поворота вокруг заданной точки проверена на OpenGL. Все работает на ура.
2.
Аноним
Мне нравитсяМне не нравится
28 сентября 2005, 17:12:23
Формула не совсем правильна. Правильный вариант:

c1 = -y + x - x*Cos + y*Sin
c2 = x + y - x*Sin - y*Cos
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог