Геометрические преобразования в графических приложениях

Автор: | 29.01.2018

Преобразование из оконной СК в логическую СК
Поворот плоскости
Аффинные преобразования
Композиция матриц. Однородные координаты
Смена системы координат
Глобальная и локальная СК
Матрицы базовых преобразований 3D пространства
Алгоритмы построения проекций

Преобразование из оконной СК в логическую СК

Начало оконной (физической) системы координат располагается в левом верхнем углу экрана. Ось X направлена слева направо, ось Y – сверху вниз. В качестве единицы длины в данной системе координат используется пиксел.

Оконная СК неудобна для пользователя из-за непривычного расположения осей (ось y направлена вниз), задания координат в пикселях и др. Устраним  эти недостатки, используя логическую СК в которой:

  • центр координат перенесен из левого верхнего угла в центр экрана;
  • направление оси Y меняется на противоположное;
  • координаты (от -1 до +1) соотнесены с шириной и высотой окна;
  • введен отступ от края окна (MARGIN).

Преобразования из логической системы координат в оконную осуществляются при помощи зависимостей:

Согласно этим зависимостям:

Поворот плоскости

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

Рассмотрим произвольный вектор r, задающий некоторую точку в системе координат ху

При повороте на угол φ координаты точки запишутся в виде:

Выделим из этих уравнений 2 пары зависимостей – для пересчета координат точек в новой СК (1) и  для  обновления значений косинуса и синуса угла (2)

Для решения задачи пошагового вращения треугольника необходимо сохранять параметры предыдущего положения треугольника. В качестве таких параметров могут использоваться предыдущие координаты, либо суммарный угол поворота. Будем сохранять угловые  характеристики – синусы  и косинусы, поскольку именно они используются в  выражениях (1 и 2).

Фрагмент программной реализации на языке C/C++ демонстрирует использование уравнений (1 и 2) в программе:

Аффинные преобразования

 Аффинная геометрия  допускает изменение углов, но параллельные прямые остаются  параллельными.

Геометрия Евклида – частный случай аффинной геометрии. Она  допускает преобразования движения (перенос, вращение) и одинаковое масштабирование по осям. Углы не изменяются.

Выше были выведены уравнения для поворота плоскости. Добавим к повороту еще и перемещение. Получим уравнения преобразование движения.

В матричном представлении уравнения запишутся так:

Обобщим уравнения преобразований движения к уравнениям аффинного преобразования плоскости:

Принципиальное отличие уравнений преобразований движения от уравнений аффинного преобразования в том, что коэффициенты аффинного преобразования a, b, d и e независимы, т.е. они не связаны между собой тригонометрическими соотношениями.

Коэффициенты  a и e определяют также и масштабирование по осям:

На рисунке  показан треугольник, масштабированный с коэффициентами 0,5 по оси абсцисс и коэффициентом 2 вдоль оси ординат.

При отрицательных значениях коэффициентов сжатия/растяжения происходит отражение относительно соответствующих осей.

Композиция матриц. Однородные координаты

Объединение последовательности нескольких элементарных преобразований (вращение, перенос, масштабирование, отражение) в одно называется композицией (composing).

Можно ли получить одну результирующую матрицу?  Нельзя, если среди последовательности преобразований присутствует хотя бы один  перенос, поскольку операция переноса  реализуется матрицей (m n) отдельно от других преобразований.

Хорошо бы иметь математический аппарат, позволяющий включать в матрицу преобразований и операцию переноса. При этом чтобы композиция 2-х и более преобразований тоже описывалась одним преобразованием. Однородные координаты и есть этот математический аппарат. Добавим к системе из двух уравнений еще одно тождественное уравнение и получим матричное представление преобразований только с одной матрицей.

Если M1 и M2  представляют собой матрицы элементарных преобразований, то существует две возможные композиции: M1*M2 и M2*M1. Однако, результаты таких преобразований в общем случае различны, поскольку произведение матриц не является коммутативной операцией.

Первая композиция матриц получена в результате вращения и перемещения, вторая – в обратном порядке.

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



Ответ на вопрос. Оба матричные представления правильные, поскольку по правилу перемножения матриц (рядок на столбик) будет получен один и тот же результат. Соответственно правильное и представление ниже.

 

Смена системы координат

Пусть точка определена в СК X’Y’. Необходимо определить координаты этой точки в СК XY.

Для смены СК необходимо:

  1. определить матрицу преобразование СК xy в СК x’y’.
  2. определить матрицу, обратную к преобразованию 1
  3. умножить координаты точек на обратную матрицу

Матрица преобразования СК xy в СК x’y’ определяется последовательным перемножением матриц элементарных преобразований (вращения и перемещения).

Матрица, обратная к преобразованию 1, определяется произведением обратных матриц в обратной последовательности.

Глобальная и локальная СК

Рассмотрим пример поворота объекта относительно некоторой произвольной точки P1

Поскольку, нам известно, лишь, как поворачивать вокруг начала координат, разобьем исходную задачу на три подзадачи:

  1. Перенос, при котором точка Р1 вместе с объектом перемещается в начало координат;
  2. Поворот относительно начала координат;
  3. Перенос, при котором точка из начала координат возвращается в первоначальное положение.

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

Учитывая, что преобразование  T12 может быть определено как обратное от преобразования T01, а преобразование  T34 =  T01, композицию преобразований можно перезаписать выражением:

Учитывая, что результат перемножения матрицы на обратную ей матрицу будет единичная матрица, то последнее выражение можно упростить:

Таким образом, преобразование относительно глобальной СК определяется перемножением матрицы текущего положения объекта на матрицу последнего преобразования. Преобразование относительно локальной СК определяется перемножением тех же матриц, но множители меняются местами.

Решение этой задачи можно представить как взаимодействие 2-х систем координат:

  • глобальная (мировая) – в ней объединяются все элементы системы;
  • локальная (пользовательская), в которой описывается элемент.

Решение задачи в этом случае описывается аналогично, только при помощи другой терминологии:

  1. Перенос системы координат в точку Р1 (создание и активизация локальной системы координат);
  2. Поворот относительно локальной системы координат;
  3. Возврат к первоначальной системе координат (активизация глобальной системы координат).

Матрицы базовых преобразований 3D пространства

В трёхмерном пространстве переход из одной СК к другой описывается в общем случае следующим образом:

В матричном представлении уравнения могут быть записаны 2-я способами:

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



Алгоритмы построения проекций

Проекция – изображение пространственного объекта на плоскости

Различают 3 вида  проекций: центральная, параллельная и ортогональная.

Центральное проецирование – проецирование из заданного центра.

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

Частным случаем параллельного проецирования является ортогональное проецирование – проецирование лучами, перпендикулярными к плоскости проекций.  Рассмотрим первоначально его, как наиболее простое для понимания.

Возможны два способа определения ортогональной проекции объекта:

  1. Вектор проецирования и плоскость проекций неподвижны, объект перемещается;
  2. Вектор проецирования и плоскость проекций перемещаются, объект неподвижен.

Для реализации 1-го способа необходимо сначала обеспечить соответствующее положение объекта по отношению к плоскости проекций путем последовательного  перемножения матриц базовых преобразований. Затем, результирующая матрица этих преобразований перемножается  на матрицу, которая обнуляет координату Z (при проецировании на плоскость XY):

Для реализации 2-го способа  необходимо:

  • определить положение новой системы координат, плоскость XY которой будет перпендикулярна вектору проецирования;
  • пересчитать точки объекта в новой системе координат;
  • обнулить координату Z системы координат, связанной с плоскостью проекций.

Вектор проецирования можно задавать с помощью двух углов – углом вращения относительно оси X  и углом вращения относительно оси Y. Эти же 2-а угла  определяют положение новой системы координат , плоскость XY которой  перпендикулярна заданному вектору.

Положение новой СК относительно старой задается композицией 2-х матричных преобразований – вращения относительно оси X и вращения относительно оси Y:

Для пересчета точек объекта в новой системе координат необходимо получить обратную матрицу:

Центральная проекция. Геометрическая модель камеры 

Модель центрального проецирования наиболее близка нашему зрительному восприятию, кроме этого она используется при  формировании изображения в цифровой фотокамере (см. Геометрическая модель камеры).

 

Автор: Николай Свирневский

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *