Преобразование декартовых прямоугольных координат на плоскости и в пространстве. Преобразования в пространстве

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

Определение. Преобразование плоскости называется аффинным (от англ. affinity – родство) , если

  • оно взаимно однозначно;
  • образом любой прямой является прямая.

Преобразование называется взаимно однозначным , если

  • разные точки переходят в разные;
  • в каждую точку переходит какая-то точка.

Свойства аффинного преобразования в трехмерном пространстве:

  • отображает n -мерный объект в n -мерный: точку в точку, линию в линию, поверхность в поверхность;
  • сохраняет параллельность линий и плоскостей;
  • сохраняет пропорции параллельных объектов – длин отрезков на параллельных прямых и площадей на параллельных плоскостях.

Любое аффинное преобразование задается матрицей 3x 3 с ненулевым определителем и вектором переноса:

Посмотрим на это с точки зрения математики. R представляет собой матрицу линейного оператора над пространством трехмерных векторов. Вектор T требуется для осуществления параллельного переноса: если помножить (000) на любую матрицу 3x 3, опять получим (000) – начало системы координат, относительно преобразования R , является неподвижно точкой. Требование, чтобы определитель был ненулевой, диктуется определением. По сути, если определитель матрицы R равен нулю, то всё пространство переходит в плоскость, прямую или точку. Тем самым не соблюдается взаимная однозначность .

На практике удобно задавать аффинное преобразование одной матрицей. При этом используются однородные координаты, введенные в предыдущей статье . Аффинное преобразование будет задаваться следующей матрицей 4x 4:

Заметим, что первые три значения последней строки равны 0. Это необходимое условие того, что преобразование будет аффинным. В общем случае произвольная матрица размера 4x 4 задает проективное преобразование. Такие преобразования, как можно догадаться из названия, используются для проецирования трехмерной сцены. Подробнее об этом будет рассказано в одной из последующих статей.

Рассмотрим частные случаи аффинных преобразований.

Прим. Здесь и в дальнейшем будет использоваться система координат, введенная следующим образом:

  • система координат правая;
  • ось z направлена на наблюдателя, перпендикулярно плоскости экрана;
  • ось y находится в плоскости экрана и направлена вверх;
  • ось x находится в плоскости экрана и направлена вправо.

Подробнее мы остановимся на этом при рассмотрении геометрического конвейера.

Матрица этого преобразования выглядит следующим образом:

В данном случае матрица R = E , единичной матрице.

Преобразования, рассматриваемые ниже, затрагивают только матрицу R , поэтому будет указываться только она.

Поворот (вращение)



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

Прим. Поворот вокруг произвольного вектора не равно поворот вокруг произвольной направленной прямой.



Заметим, что при повороте вокруг оси y ординаты точек (у -координаты) не меняются. Также стоит отметить, что координаты x и z точки преобразуются независимо от y -координаты. Это означает, что любая точка p (x , y , z ) перейдет в точку p ’(x ’(x , z ), y , z ’(x , y )) . Теперь осталось понять, как преобразуются координаты x и z : в плоскости Oxz это будет поворот вокруг начала координат по часовой стрелке (т.к. x z y - левая тройка), т.е. в отрицательном направлении. Матрица такого преобразования известна (см. Поворот плоскости):



Матрица преобразования R y (φ y ) :

Поворот вокруг осей x и z



Аналогичными рассуждениями можно получить матрицы поворотов R x (φ x ) и R z (φ z ) вокруг осей x и z , соответственно.

Приведём окончательные результаты:

Несложно заметить, что определители матриц R x , R y , R z равны 1 . Также матрицы вращений R rot обладают свойством ортогональности: R T R = RR T = E . Из этого, в свою очередь, следует полезное свойство, что обращение матрицы поворота можно заменить транспонированием: R -1 (φ ) = R T (φ ) .

Масштабирование (сжатие/растяжение, отражение)



Коэффициенты сжатия/растяжения, по аналогии с двухмерным пространством, определяются диагональными членами матрицы R :

Результат:



Комбинация коэффициентов s x = -1, s y = 1, s z = 1 будет задавать отражение от плоскости Oyz (x = 0) . При s x = s y = s z = -1 получим центральную симметрию относительно начала координат.

Интерпретация матрицы R

Рассмотрим, что представляет собой матрица R с точки зрения линейной алгебры. Оказывается, что матрица R содержит базис новой системы координат.

Действительно, матрица

(R 11 R 12 R 13 )

(R 21 R 22 R 33 )

(R 31 R 32 R 33 )

переводит вектора декартова базиса:

(100) → (R 11 R 21 R 31 )

(010) → (R 12 R 22 R 32 )

(001) → (R 13 R 23 R 33 )



Теперь несложно получить преобразование скоса. Например:

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

Сложные аффинные преобразования

Сложные аффинные преобразования можно получить как комбинацию простых (элементарных) преобразований. При этом выбирать простые аффинные преобразования можно по разному. Например, поворот можно представить как комбинацию масштабирования и сдвига. Тем не менее, для удобства, поворот также считается элементарным преобразованием. Поворот вокруг произвольного вектора представляется как комбинация поворотов вокруг координатных осей. Об этом будет подробно рассказано в следующей статье.

Преобразования на плоскости и в пространстве

В компьютерной графике всœе что относится к плоскому случаю принято обозначать 2D (2-dimentional) двумерное, а всœе что относится к пространственным – 3D.

Аффинные преобразования на плоскости

Affinis – родственный (лат). Потому, что фигуры сохраняются при аффинных преобразованиях.

Предположим, существует некоторая прямолинœейная система координат (OXY). Тогда, каждой точке М можно поставить в соответствие пару координат (x,y). Введя другую систему координат O * X * Y * , можно поставить той же точке М другую пару координат (x * ,y *). Переход от одной системы к другой:

x * =ax+by+c, с условием |a b|¹0

y * =dx+ey+f |d e|

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


Нужно отметить, что координаты точки M можно представить в виде вектораиз начала координат с координатами Mx,My.

Тогда преобразование можно записать в векторной форме (это справедливо только для прямоугольной системы координат).

M*=((M-O*)X*,(M-O*)Y*)

Где O*-координаты начала координат второй системы в координатах первой. X*,Y* - орты (направляющие вектора) второй системы координат в координатах первой.

a=(Xx*), b=(Xy*),c=-O*X*

d=(Yx*), e=(Yy*),f=-O*Y*

Это преобразование можно записать и в матричном виде

, или , где вектора считаются в виде матриц вида 1´2.

Элемент Cij матрицы C=AB есть сумма произведений элементов i-ой строки матрицы A на элементы j-ого столбца матрицы B.

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

Аффинное преобразование – геометрическое преобразование плоскости или пространства ĸᴏᴛᴏᴩᴏᴇ можно получить комбинируя поворот, перенос, зеркальные отражения и масштабирование в направлениях координатных осœей.

Поворот (R - rotation). Вокруг начала координат на угол a.

x * =x*cosa-y*sina

y * =x*sina+y*cosa

Растяжение, сжатие вдоль координатных осœей (D – dilatation).

Отражение (M – mirror). Относительно оси абсцисс.

Перенос (T – translation).

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

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

Иногда удобно представлять всœе преобразования в одной матричной форме, для этого используют однородные координаты.

Однородные координаты

Для точки M с координатами x,y на плоскости, однородными координатами является тройка чисел x1,x2,x3, одновременно неравная нулю и связанная соотношениями x1/x3=x, x2/x3=y. Точке с координатами x,y на плоскости сопоставляется точка xh,y,h,h в однородном пространстве, обычно h=1 (x,y,1).

Общее преобразование точек в однородных координатах можно записать в виде.

А матрицы базовых преобразований будут выглядеть следующим образом:

Комбинация преобразований.

Предположим нужно повернуть точку на угол вокруг некоторой точки A.

Начала переносим точку A в начало координат (-Ax,-Ay). Далее поворот. Далее перенос обратно в точку А. (Ax,Ay). Можно получить единое преобразование

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

В 3D пространстве точка (вектор) представляется тремя координатами (x,y,z), или четырьмя однородными координатами (x,y,z,1).

Следует ввести понятия левая и правая тройка векторов. Три вектора a,b,c образуют правую тройку, в случае если после совмещения начал векторов кратчайший поворот от a к b кажется наблюдателю, смотрящему с конца вектора c идущим против часовой стрелки. Правило правой руки – вектор a совмещается с локтем, вектор b входит в ладонь, вектор c совпадает с большим пальцем. Система координат принято называть правой, в случае если ее направляющие вектора образуют правую тройку.

Векторное произведение c=a´b, с – вектор перпендикулярный обоим векторам, образует с ними правую тройку.

Cx=Ay*Bz-Az*By, Cy=Az*Bx-Ax*Bz, Cz=Ax*By- Ay*Bx

Преобразования остаются те же: вращение (только теперь вокруг трех осœей), растяжение, отражение (относительно трех плоскостей), перенос.

Вращение против часовой, в случае если смотреть из начала координат для левой системы координат (для правой – наоборот).

, ,

,

, ,

К примеру, нужно построить матрицу вращения относительно прямой с направляющим ортом L, проходящей через точку A.

1. Перенос A в начало координат

2. Совмещение прямой с осью X.

Сначала поворот вокруг оси X

на угол a , cosa=Lz/d, sina=Lx/d, где d=

В случае если d=0, значит прямая уже совпадает с осью X.

Затем поворот вокруг оси Y на угол b .

Повернутый вектор равен (Lx,Ly,Lz,1)=(Lx,0,d,1).

cosb=Lx, sinb=d

3. Поворот вокруг оси X на нужный угол

4. Возвращение к оси L ,

5. Перенос на точку A

Общая матрицы получится

Преобразование в систему координат заданную ортами

В случае если система задана тройкой взаимно перпендикулярных ортов X*,Y*,Z*.

, обратное преобразование – транспонированная матрица [R] T

Проектирование

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

Существует два наиболее употребляемых вида проектирования параллельное и центральное (перспективное).

При проектировании объекта на плоскость нужно провести через каждую точку объекта прямую из заданного проектирующего пучка и найти пересечение этой прямой с плоскостью.

При параллельном проектировании пучок состоит из параллельных прямых, при центральном – проходит через некоторую точку.

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

Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, чтобы получить аксонометрическую параллельную проекцию объекта на экране нужно совместить направление пучка с одной из осœей (обычно это Z). Оси X и Y совпадут с осями X,Y на экране, а ось Z – будет направлена вглубь экрана.

Чтобы получить перспективную проекцию точки крайне важно поместить точку схода пучка в начало координат, направление на экран (перпендикуляр из точки схода к плоскости проектирования) совместить с осью Z, тогда Xp=X*d/Z, Yp=Y*d/Z, где d - расстояние от начала координат до плоскости проектирования.

Это преобразование можно записать в виде матрицы. ,

Единственное, в таком преобразовании теряется глубина (z), но можно ее вычислить из последней координаты вектора.

Кроме этих преобразований проектирования крайне важно сделать еще несколько, чтобы изображение правильно смотрелось на экране. В первую очередь, его нужно растянуть до размеров окна, во-вторых, его нужно зеркально отобразить вокруг оси Х (т.к. ось Y обычно направлена вниз), в-третьих, его нужно перенести в центр окна.

Общая матрица преобразования выглядит следующим образом.

Cx,Cy – координаты центра экрана.

ratio – отношение размера по Y к размеру по X, для разных разрешений экрана разный. Разрешение – количество точек на единицу поверхности, в данном случае единица – весь экран монитора. Экран монитора имеет соотношение горизонтального размера к вертикальному 4/3, в связи с этим для разрешений с количеством точек по горизонтали и вертикали кратным этому числу ratio=1 (к примеру 640/480). Иначе ratio=(4*sizey)/(3*sizex) (320x200 =0.83).

S – масштабный коэффициент, для параллельной проекции выбирается вручную, для перспективной проекции S равняется единице, но рассчитывается d (расстояние до плоскости проектирования) исходя из поля зрения FOV (field of view). FOV – максимальный угол, который образуют прямые в пучке, угол зрения.

FOV обычно варьируется от 50° до 100°, FOV человеческого глаза - 90°.

Мировая, модельная и экранная системы координат

Мировая – основная система координат, в которой заданы всœе объекты сцены.

Модельная – система координат, в которой задана внутренняя структура объектов.

Экранная – система координат наблюдателя, еще ее называют системой координат камеры.

Модель обычно располагают в модельной системе таким образом, что центр системы совпадает либо с геометрическим, либо с центром масс модели, ось X совпадает с направлением вперед, ось Y – вправо, ось Z – вверх.

Модель задается в мировой системе координат координатами центра модели M (вектор) и ориентацией (либо тремя ортами, либо тремя углами крен (X), тангаж (Y), курс (Z), матрица при этом формируется как последовательность поворотов ). Для преобразования из модельных координат нужно сначала повернуть в соответствии с матрицей ориентации , а затем перенести на .

Курс Крен Тангаж

Положение и ориентацию камеры можно задать точно аналогично тому, как и положение модели. Но часто, достаточно только направления зрения камеры. Обычно (в реальной жизни) камера не имеет крена, ᴛ.ᴇ. ось X (вправо) всœегда горизонтальна, а плоскость YZ следовательно всœегда вертикальна.

Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, в случае если предположить, что ось Z камеры (направление зрения) не вертикальна, то можно найти ось X=Norm(Z´Up), где Up(0,0,1) вертикальный вектор (X получится перпендикулярен вертикальному вектору Up, а значит горизонтален). Наконец ось Y=X´Z (вверх). Следите за тем, чтобы система оставалась левой.

Чтобы преобразовать точки из мировой системы в экранные крайне важно сначала применить перенос , а затем повернуть на транспонированную матрицу ориентации камеры T .

Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, для того, чтобы перевести точку из модельных координат в экранные крайне важно произвести следующее преобразование T . После таких преобразований ось Z будет направлена вдоль направления зрения и можно делать проектирование.

Лекция 6-7-8

Преобразования на плоскости и в пространстве - понятие и виды. Классификация и особенности категории "Преобразования на плоскости и в пространстве" 2017, 2018.

Глава 1. Дополнение. Преобразование декартовых прямоугольных координат на плоскости и в пространстве. Специальные системы координат на плоскости и в пространстве.

Правила построения систем координат на плоскости и в пространстве рассмотрены в основной части Главы 1. Были отмечены удобства применения прямоугольных систем координат. При практическом использовании средств аналитической геометрии часто возникает необходимость преобразовать принятую систему координат. Обычно это диктуется соображениями удобства: упрощаются геометрические образы, нагляднее становятся аналитические модели и используемые при вычислениях алгебраические выражения.

Построение и использование специальных систем координат: полярных, цилиндрических и сферических диктуется геометрическим смыслом решаемой задачи. Моделирование при помощи специальных систем координат часто облегчают разработку и использование аналитических моделей при решении практических задач.

Результаты, полученные в Дополнении Главы 1, будут использоваться в линейной алгебре, большая часть – в математическом анализе и в физике.

Преобразование декартовых прямоугольных координат на плоскости и в пространстве.

При рассмотрении задачи построения системы координат на плоскости и в пространстве отмечалось, что систему координат образуют пересекающиеся в одной точке числовые оси: на плоскости требуются две оси, в пространстве – три. В связи с построением аналитических моделей векторов, введением операции скалярного произведения векторов и решением задач геометрического содержания было показано, что применение прямоугольных систем координат наиболее предпочтительно.

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

Мы будем исходить из первичного понятия системы отсчета , принятого в физике. Наблюдая движение тел, было обнаружено, что движение изолированного тела не может быть определено само по себе. Нужно иметь ещё хотя бы одно тело, относительно которого наблюдается движение, то есть изменение его относительного положения. Для получения аналитических моделей, законов, движения с этим вторым телом, как с системой отсчёта, связали систему координат, причём так, что система координат представляла собой твёрдое тело !

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

1). Параллельный перенос: следим только за одной точкой – точкой .

2). Вращение осей системы координат относительно точки : как твёрдого тела.

Преобразование декартовых прямоугольных координат на плоскости .

Пусть имеем на плоскости системы координат: , и . Система координат получается параллельным переносом системы . Система координат по­лу­ча­ется вращением системы на угол , причём за положительное направление вращение принято вращение оси против часовой стрелки.

Определим для принятых систем координат базисные векторы. Так как система получена параллельным переносом системы , то для обеих этих систем примем базисные векторы: , причём единичные и совпадающие по направлению с осями координат , , соответственно. Для системы в качестве базисных векторов примем единичные векторы , совпадающие по направлению с осями , .

Пусть задана система координат и в ней определена точка = . Будем считать, что перед преобразованием имеем совпадающие системы координат и . Применим к системе координат параллельный перенос, определяемый вектором . Требуется определить преобразование координат точки . Воспользуемся векторным равенством: = + , или:

Проиллюстрируем преобразование параллельного переноса известным в элементарной алгебре примером.

Пример Д 1 : Задано уравнение параболы: = = . Привести уравнение этой параболы к простейшей форме.

Решение :

1). Воспользуемся приёмом выделения полного квадрата : = , которое легко представить в виде: –3 = .

2). Применим преобразование координат – параллельный перенос : = . После этого уравнение параболы принимает вид: . Это преобразование в алгебре определяют так: парабола = получена смещением простейшей параболы вправо на 2, и вверх на 3 единицы.

Ответ: простейшая форма параболы: .

Пусть задана система координат и в ней определена точка = . Будем считать, что перед преобразованием имеем совпадающие системы координат и . Применим к системе координат преобразование вращения так, что относительно исходного своего положения, то есть относительно системы оказывается повёрнутой на угол . Требуется определить преобразование координат точки = . Запишем вектор в системах координат и : = .

В то же время для любого угла имеем: что достаточно просто наблюдаем из рисунка. Тогда: = . Последнее может быть записано в виде: = . Из векторного равенства получаем преобразование координат для точки : .Нарушение авторских прав и

Тема этого выпуска задание аффинного преобразования в матричной форме. Эта тема, по сути, является обобщением всего, что было сказано ранее.

Определение. Преобразование плоскости называется аффинным , если

  • оно взаимно однозначно;
  • образом любой прямой является прямая.

Преобразование называется взаимно однозначным , если

  • разные точки переходят в разные;
  • в каждую точку переходит какая-то точка.

Однородные координаты

Если рассмотреть параллельный перенос, то оказывается, что для его задания матрицы 2x2 уже недостаточно. Но его можно задать с помощью матрицы размера 3x3. Появляется вопрос, откуда взять третью координату у двумерной точки?

Определение. Однородные координаты - координаты, обладающие тем свойством, что определяемый ими объект не меняется при умножении всех координат на одно и то же число.

Однородными координатами вектора (х, у) является тройка чисел (x", y", h) , где х = х" / h, у = y"/h, а h - некоторое вещественное число (случай, когда h = 0 является особым).

Прим. Данные координаты не позволяют однозначно задать точку плоскости. Например, (1 , 1, 1) и (2, 2, 2) задают одну и ту же точку (1, 1) . Предлагается взять набор (x, y, 1) , который будет описывать все точки плоскости.

Матрица преобразования для однородных координат имеет размер 3х3. Рассмотрим некоторые преобразования в однородных координатах.

Сжатие/растяжение

Это преобразование умножает соответствующие координаты точек на коэффициенты масштабирования по осям: (x, y ) -> (a x * x , a y * y ) . Матрица преобразования запишется следующим образом:

[ a x 0 0 ]

Где a x – растяжение по оси x ,

a y – растяжение по оси y .

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

Поворот


Матрица поворота 2x2 была подробно разобрана ранее. Теперь она дополняется строкой и столбцом:

[ -sin(phi)cos(phi) 0]

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

Параллельный перенос


Исходный вектор (x, y ) переходит в (x + t x, y + t y ) . Матрица преобразования запишется следующим образом:

[ 1 0 0]

[ t x t y 1]

Отражение


Как говорилось в примечании к преобразованию сжатия/растяжения, отражения получаются следующим образом:

[-10 0]


отражение относительно оси x


отражение относительно оси y

Общий вид аффинного преобразования

Матрица 3x3, последний столбец которой равен (0 0 1) T , задает аффинное преобразование плоскости:

[ * * 0]

[ * * 0]

[ * * 1]

По одному из свойств, аффинное преобразование можно записать в виде:

f (x ) = x * R + t ,

где R – обратимая матрица 2 x2, а t – произвольный вектор. В однородных координатах это запишется следующим образом:

[ R 1,1 R 1,2 0 ]

[ R 2,1 R 2,2 0 ]

[ t x t y 1 ]

Если умножить вектор-строку на эту матрицу получаем результат преобразования:

[ xy1 ] *[ R 1,1 R 1,2 0 ]

[ R 2,1 R 2,2 0 ]

[ t x t y 1 ]

[ x’y’1 ]+[ t x t y 1 ]

При этом [ x ’ y ’ ]= R *[ x y ]

Прим. Любопытный читатель уже задал себе вопрос: в чем смысл определителя матрицы R? При аффинном преобразовании площади всех фигур изменяются в | R|. (Можно строго доказать это с точки зрения математики, но здесь этот факт приводится без доказательства.)

Т.о. аффинное преобразование представляется в виде композиции некоторого преобразования, задаваемого матрицей R , и параллельного переноса. Разберем более подробно природу этой матрицы и возможности, которые она нам дает.

Матрица R определяет новый базис плоскости. Т.е. вектор (1, 0) переходит в (R 1,1, R 1,2 ), вектор (0, 1) переходит в (R 2,1, R 2,2 ). Новый базис это строки матрицы R .

Пример.


При отражении относительно оси y , базисный вектор по оси ординат сохраняется, а по оси абсцисс переходит в (-1, 0) . Т.о. матрица R будет выглядеть следующим образом:


Теперь становится ясно, что кроме вышеперечисленных преобразований, с помощью аффинного преобразования можно получить скос:


Выше приведены базовые сведения о таком мощном инструменте, как аффинное преобразование. Остается много вопросов: какой подкласс аффинных преобразований сохраняет углы между прямыми? Как можно представить аффинное преобразование в виде композиции нескольких подклассов? Как задавать более сложные преобразования, например, осевая симметрия относительно произвольной прямой?

Ответы на эти вопросы и более детальное рассмотрение аффинного преобразования будут приведены отдельно, в качестве раздела курса теоретической геометрии.

Остановимся на практической реализации аффинного преобразования в виде демонстрационной программы. К возможностям приложения, демонстрирующего поворот плоскости мышью, добавляются функции параллельного переноса при нажатой клавише CTRL .

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

  • блок, в котором происходит создание окна и обрабатываются сообщения операционной системы, реализован в файл emain . cpp
  • графический движок, выполняющий отрисовку изображения, класс Engine
  • прослойка, необходимая для преобразования логических координат в оконные и обратно, класс Viewport
  • объект, отвечающий за реакцию на действия пользователя, класс Action

В приведенном примере реализованы эти функциональные блоки, с подробными комментариями.

5. ГЕОМЕТРИЧЕСКИЕ ПРЕОБРАЗОВАНИЯ

Вывод изображения на экран дисплея и разнообразные действия с ним, в том числе и визуальный анализ, требуют от пользователя известной геометрической грамотности. Геометрические понятия, формулы и факты, относящиеся прежде всего к плоскому и трехмерному случаям, играют в задачах компьютерной графики особую роль. Геометрические соображения, подходы и идеи в соединении с постоянно расширяющимися возможностями вычислительной техники являются неиссякаемым источником существенных продвижений на пути развития компьютерной графики, ее эффективного использования в научных и иных исследованиях. Порой даже самые простые геометрические методики обеспечивают заметные продвижения на отдельных этапах решения большой графической задачи.

5.1. Преобразования на плоскости и в пространстве

Для решения таких задач, как движение объектов и их частей, управления камерой применяются аффинные преобразования (АП), рассмотрим их основные свойства:

1) точки, лежащие на одной прямой, после преобразования лежат на одной прямой;

2) пересекающиеся прямые остаются пересекающимися, а параллельные – параллельными;

3) при АП пространства пересекающиеся плоскости остаются пересекающимися, параллельные – параллельными, а скрещивающиеся – скрещивающимися;

4) при АП сохраняются отношения площадей двух квадратов на плоскости и отношение объемов двух кубов в пространстве.

Аффинные преобразования на плоскости

Допустим, на плоскости задана прямолинейная координатная система. Тогда каждой точке М соответствует упорядоченная пара чисел (х ,у ) ее координат (рис. 5.1). Вводя на плоскости еще одну прямолинейную систему координат, мы ставим в соответствие той же точкеМ другую пару чисел – (х *,у *).

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

x* = α x+ β y+ λ ,

y* = γ x+ δ y+ µ ,

где α , β , λ , γ , µ , δ – произвольные числа, связанные неравенством

α β ≠ 0.

γ δ

Формулы (1) можно рассматривать двояко: либо сохраняется точка и изменяется координатная система (рис. 5.2) (в этом случае произвольная точка М остается той же, изменяются лишь ее координаты), либо изменяется точка и сохраняется координатная система (рис. 5.3) (в этом случае формулы (1) задают отображение, переводящее произвольную точкуM (x ,y ) в точкуМ *(х *,у *), координаты которой определены в той же координатной системе).

Рис. 5.1. Исходные

Рис. 5.2. Преобразова-

Рис. 5.3. Преобразова-

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

ние точки

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

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

1. Поворот вокруг начальной точки на угол ϕ описывается формулами

x * = x cosϕ − y sinϕ ,

y * = x sinϕ + y cosϕ .

2. Растяжение (сжатие) вдоль координатных осей можно задать так:

x * = α x ,y * = δ y ,α > 0,δ > 0.

Растяжение вдоль оси абсцисс обеспечивается при условии, что α > 1, а сжатие – при 0 <α < 1.

3. Отражение (относительно оси абсцисс) задается при помощи

x *= x ,y *= − y .

4. Параллельный перенос обеспечивают соотношения

x* = x+ λ , y* = y+ µ .

Выбор этих четырех частных случаев определяется двумя обстоятельствами.

1. Каждое из приведенных выше преобразований имеет простой и наглядный геометрический смысл (геометрическим смыслом наделены и постоянные числа, входящие в приведенные формулы).

2. Как доказывается в курсе аналитической геометрии, любое преобразование вида (1) всегда можно представить как по-

следовательное исполнение простейших преобразований. Для эффективного использования этих известных формул в за-

дачах компьютерной графики более удобной является их матричная запись. Матрицы, соответствующие случаям А ,Б иВ , строятся легко и имеют соответственно следующий вид:

cosϕ

sinϕ

− sinϕ

cosϕ

−1

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

Однородные координаты точки

Пусть М – произвольная точка плоскости с координатамих иу , вычисленными относительно заданной прямолинейной координатной системы. Однородными координатами этой точки называется любая тройка одновременно неравных нулю чиселx 1 ,x 2 ,x 3 , связанных с заданными числамиx иy следующими соотношениями:

x 1/ x 3= x , x 2/ x 3= y .

При решении задач компьютерной графики однородные координаты обычно вводятся так: произвольной точке М (х ,у ) плоскости ставится в соответствие точкаМ *(х ,у , 1) в пространстве (рис. 5.4).

Заметим, что произвольная точка на прямой, соединяющей начало координат, точку O (0, 0, 0) с точкойM *(х ,у , 1), может быть задана тройкой чисел вида (hx ,hy ,h ).

Рис. 5.4. Однородные координаты

Будем считать, что h ≠ 0. Вектор с координатамиhx ,hy ,h является направляющим вектором прямой, соединяющей точки 0(0, 0, 0) иМ *(х ,у , 1). Эта прямая пересекает плоскостьz = 1 в точке (х ,у , 1), которая однозначно определяет точку (х ,у ) координатной плоскостиху.

Тем самым между произвольной точкой с координатами (х ,у ) и множеством троек чисел вида (hx ,hy ,h ) приh ≠ 0 устанавливается (взаимно однозначное) соответствие, позволяющее считать числаhx ,hy ,h новыми координатами этой точки.

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

Применение однородных координат оказывается удобным уже при решении простейших задач, например, масштабирования:

1) точку с однородными координатами (0.5; 0.1; 2.5) h=1 нельзя представить целыми координатами, но, например, при выборе h= 10 получаем (5; 1; 25);

2) чтобы результаты преобразования не приводили к арифметическому переполнению, для точки с координатами

(80000;40000;1000) можно взять, например, h= 0,001. В ре-

зультате получим (80;40;1).

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

При помощи троек однородных координат и матриц третьего порядка можно описать любое аффинное преобразование плоскости.

В самом деле, считая h = 1, сравним две записи: помеченную символом * и следующую, матричную:

{x *y * 1}= {x y 1}

Нетрудно заметить, что после перемножения выражений, стоящих в правой части последнего соотношения, мы получим обе формулы (1) и верное числовое равенство 1 ≡ 1. Тем самым сравниваемые записи можно считать равносильными.

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

На каждом этапе находят матрицу, соответствующую тому или иному из выделенных выше случаев А ,Б ,В илиГ , обладающих хорошо выраженными геометрическими свойствами.

Выпишем соответствующие матрицы третьего порядка.

А. Матрица вращения (rotation)

Б. Матрица растяжения

cosϕ

sinϕ

(сжатия) (dilatation)

cosϕ

= − sinϕ

Г. Матрица переноса (translation)

В. Матрица отражения (re-

− 1 0 .

Рассмотрим примеры аффинных преобразований плоскости.

Пример 1. Построить матрицу поворота

вокруг точки А(a, b) на угол ϕ (рис. 5.5).

А (-а ,

совмещения центра

поворота

координат.

2-й шаг. Поворот на уголϕ .

A(a,

Рис. 5.5. Поворот

возвращения центра поворота в прежнее положение; матрица соответствующего преобразования.

cosϕ

sinϕ

= − sinϕ

cosϕ

−A

−a

−b

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

sinϕ

sinϕ

{x *y * 1}= {x y 1}×

− sinϕ

cosϕ

− a cosϕ + b sinϕ + a

− a sinϕ − b cosϕ + b

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

Пример 2. Построить матрицу растяжения с коэффициентами растяженияα вдоль оси абсцисс иβ вдоль оси ординат и с центром в точке А(а, b).

1-й шаг. Перенос на вектор А (-а , -b ) для совмещения центра растяжения с началом координат.

2-й шаг. Растяжение вдоль координатных осей с коэффициентамиα иβ соответственно.

3-й шаг. Перенос на векторА (а ,b ) для возвращения центра растяжения в прежнее положение; матрица соответствующего преобразования.



Понравилась статья? Поделитесь с друзьями!