Реферат: Задачи графических преобразований в приложениях моделирования с использованием ЭВМ
--PAGE_BREAK--<img width=«80» height=«56» src=«ref-1_370083794-635.coolpic» v:shapes="_x0000_s1056"><img width=«6» height=«6» src=«ref-1_370084429-203.coolpic» v:shapes="_x0000_s1057"> <img width=«214» height=«9» src=«ref-1_370077043-252.coolpic» v:shapes="_x0000_s1062"><img width=«9» height=«185» src=«ref-1_370084884-272.coolpic» v:shapes="_x0000_s1063">
<img width=«112» height=«98» src=«ref-1_370085156-838.coolpic» v:shapes="_x0000_s1065 _x0000_s1064">
Рис. 4
<img width=«175» height=«146» src=«ref-1_370085994-809.coolpic» v:shapes="_x0000_s1066"> <img width=«11» height=«11» src=«ref-1_370076774-269.coolpic» v:shapes="_x0000_s1071"><img width=«214» height=«9» src=«ref-1_370077043-252.coolpic» v:shapes="_x0000_s1072"><img width=«9» height=«185» src=«ref-1_370077295-272.coolpic» v:shapes="_x0000_s1073">
<img width=«90» height=«100» src=«ref-1_370087596-1069.coolpic» v:shapes="_x0000_s1076 _x0000_s1075 _x0000_s1074">
Рис. 5
<img width=«146» height=«127» src=«ref-1_370088665-1105.coolpic» v:shapes="_x0000_s1077"> <img width=«11» height=«11» src=«ref-1_370076774-269.coolpic» v:shapes="_x0000_s1082"><img width=«214» height=«9» src=«ref-1_370077043-252.coolpic» v:shapes="_x0000_s1083"><img width=«9» height=«185» src=«ref-1_370077295-272.coolpic» v:shapes="_x0000_s1084">
<img width=«127» height=«217» src=«ref-1_370090563-1243.coolpic» v:shapes="_x0000_s1087 _x0000_s1085 _x0000_s1086">
Рис. 6
<img width=«11» height=«11» src=«ref-1_370091806-283.coolpic» v:shapes="_x0000_s1089">
<img width=«11» height=«12» src=«ref-1_370092089-254.coolpic» v:shapes="_x0000_s1091"><img width=«50» height=«98» src=«ref-1_370092343-746.coolpic» v:shapes="_x0000_s1092"> <img width=«214» height=«9» src=«ref-1_370077043-252.coolpic» v:shapes="_x0000_s1097"><img width=«9» height=«185» src=«ref-1_370077295-272.coolpic» v:shapes="_x0000_s1098">
<img width=«50» height=«40» src=«ref-1_370093613-477.coolpic» v:shapes="_x0000_s1099 _x0000_s1100">
Рис. 7
Выбор этих четырех частных случаев определяется двумя обстоятельствами.
1. Каждое из приведенных выше преобразований имеет простой и наглядный геометрический смысл (геометрическим смыслом наделены и постоянные числа, входящие в приведенные формулы).
2. Как известно из курса аналитической геометрии, любое преобразование вида (2.1) всегда можно представить как последовательное исполнение (суперпозицию) простейших преобразований вида 1 – 4 (или части этих преобразований).
Таким образом, справедливо следующее важное свойство аффинных преобразований плоскости: любое отображение вида (2.1) можно описать при помощи отображений, задаваемых формулами (2.3) – (2.11).
Для эффективного использования этих известных формул в задачах компьютерной графики более удобной является их матричная запись. Матрицы, соответствующие случаям 1 – 3, строятся легко и имеют соответственно следующий вид:
<img width=«41» height=«60» src=«ref-1_370094090-425.coolpic» v:shapes="_x0000_s1101"><img width=«40» height=«60» src=«ref-1_370094515-417.coolpic» v:shapes="_x0000_s1102"><img width=«98» height=«60» src=«ref-1_370094932-545.coolpic» v:shapes="_x0000_s1103">cos j sin j a 0 1 0
-sin j cos j 0 d 0 -1
3.
Однородные координаты точки
Пусть М – произвольная точка плоскости с координатами х и у, вычисленными относительно заданной прямолинейной координатной системы. Однородными координатами этой точки называется любая тройка одновременно не равных нулю чисел х1, х2, х3, связанных с заданными числами х и у следующими соотношениями:
x1 / x3 = x, x2 / x3 = y (3.1)
При решении задач компьютерной графики однородные координаты обычно вводятся так: произвольной точке М (х, у) плоскости ставится в соответствие точка МЭ (х, у, 1) в пространстве.
Необходимо заметить, что произвольная точка на прямой, соединяющей начало координат, точку О (0, 0, 0), с точкой МЭ (х, у, 1), может быть задана тройкой чисел вида (hx, hy, h).
Будем считать, что h = 0. Вектор с координатами hx, hy, h является направляющим вектором прямой, соединяющей точки О (0, 0, 0) и МЭ (х, у, 1). Эта прямая пересекает плоскость z = 1 в точке (х, у, 1), которая однозначно определяет точку (х, у) координатной плоскости ху.
Тем самым между произвольной точкой с координатами (х, у) и множеством троек чисел вида (hx, hy, h), h = 0, устанавливается взаимно однозначное соответствие, позволяющее считать числа hx, hy, h новыми координатами этой точки.
Широко используемые в проективной геометрии однородные координаты позволяют эффективно описывать так называемые несобственные элементы (по существу, те, которыми проектная плоскость отличается от привычной евклидовой плоскости).
В проективной геометрии для однородных координат принято следующее обозначение:
х: у: 1 (3.2)
или, более общо,
х1: х2: х3 (3.3)
(здесь непременно требуется, чтобы числа х1, х2, х3 одновременно в нуль не обращались).
Применение однородных координат оказывается удобным уже при решении простейших задач.
Рассмотрим, например, вопросы, связанные с изменением масштаба. Если устройство отображения работает только с целыми числами (или если необходимо работать только с целыми числами), то для произвольного значения h (например, h = 1) точку с однородными координатами (0.5, 0.1, 2.5) представить нельзя. Однако при разумном выборе h можно добиться того, чтобы координаты этой точки были целыми числами. В частности, при h = 10 для рассматриваемого примера имеем (5, 1, 25).
Рассмотрим другой случай. Чтобы результаты преобразования не приводили к арифметическому переполнению для точки с координатами (80000, 40000, 1000) можно взять, например, h = 0.001. В результате получим (80, 40, 1).
Приведенные примеры показывают полезность использования однородных координат при проведении расчетов. Однако основной целью введения однородных координат в компьютерной графике является их несомненное удобство в применении к геометрическим преобразованиям.
При помощи троек однородных координат и матриц третьего порядка можно описать любое аффинное преобразование плоскости.
Считая, h = 1, сравним две записи:
<img width=«79» height=«98» src=«ref-1_370095477-689.coolpic» v:shapes="_x0000_s1104">
a g 0
(x * y * 1) = (x y 1) b d 0 (3.4)
l m 1
Нетрудно заметить, что после перемножения выражений, стоящих в правой части последнего соотношения, мы получим формулы (2.1) и (2.2) и верное числовое равенство 1 = 1. Тем самым сравниваемые записи можно считать равносильными.
Элементы произвольной матрицы аффинного преобразования не несут в себе явно выраженного геометрического смысла. Поэтомучтобы реализовать то или иное отображение, то есть найти элементы соответствующей матрицы по заданному геометрическому описанию, необходимы специальные приемы. Обычно построение этой матрицы в соответствии со сложностью поставленной задачи и с описанными выше частными случаями рзбивают на несколько этапов.
На каждом этапе пишется матрица, соответствующая тому или иному из выделенных выше случаев 1 – 4, обладающих хорошо выраженными геометрическими свойствами.
Выпишнм соответствующие матрицы третьего порядка.
А. Матрица вращения (rotation)
<img width=«127» height=«98» src=«ref-1_370096166-807.coolpic» v:shapes="_x0000_s1105">
cos j sin j 0
[ R ] = -sin j cos j 0 (3.5)
0 0 1
Б. Матрица растяжения-сжатия (dilatation)
<img width=«89» height=«98» src=«ref-1_370096973-725.coolpic» v:shapes="_x0000_s1106">
a 0 0
[ D ] = 0 d 0 (3.6)
0 0 1
В. Матрица отражения (reflection)
<img width=«79» height=«108» src=«ref-1_370097698-679.coolpic» v:shapes="_x0000_s1107">
1 0 0
[ M ] = 0 -1 0 (3.7)
0 0 1
Г. Матрица переноса (translation)
<img width=«89» height=«107» src=«ref-1_370098377-710.coolpic» v:shapes="_x0000_s1108">
1 0 0
[ T ] = 0 1 0 (3.8)
l m 1
Рассмотрим примеры аффинных преобразований плоскости.
Пример 1. Построить матрицу поворота вокруг точки А (a, b) на угол j (рис. 9).
<img width=«24» height=«60» src=«ref-1_370099087-490.coolpic» v:shapes="_x0000_s1110"><img width=«146» height=«107» src=«ref-1_370099577-1211.coolpic» v:shapes="_x0000_s1111"> <img width=«214» height=«9» src=«ref-1_370077043-252.coolpic» v:shapes="_x0000_s1115"><img width=«9» height=«185» src=«ref-1_370084884-272.coolpic» v:shapes="_x0000_s1116"> j
<img width=«203» height=«11» src=«ref-1_370101312-340.coolpic» v:shapes="_x0000_s1117 _x0000_s1118">
Рис. 8
продолжение
--PAGE_BREAK--1-й шаг. Перенос на вектор – А (-a, -b) для смещения центра поворота с началом координат;
<img width=«89» height=«108» src=«ref-1_370101652-732.coolpic» v:shapes="_x0000_s1119">
1 0 0
[ T-A ] = 0 1 0 (3.9)
-a -b 1
матрица соответствующего преобразования.
2-й шаг. Поворот на угол j;
<img width=«146» height=«88» src=«ref-1_370102384-739.coolpic» v:shapes="_x0000_s1120">cos j sin j 0
[ Rj] = -sin j cos j 0 (3.10)
0 0 1
матрица соответствующего преобразования.
3-й шаг. Перенос на вектор А (a, b) для возвращения центра поворота в прежнее положение;
<img width=«89» height=«108» src=«ref-1_370101652-732.coolpic» v:shapes="_x0000_s1121">
1 0 0
[ TA ] = 0 1 0 (3.11)
a b 1
матрица соответствующего преобразования.
Перемножим матрицы в том же порядке, как они выписаны:
[ T-A ] [ Rj] [ TA ].
В результате получим, что искомое преобразование (в матричной записи) будет выглядеть следующим образом:
<img width=«329» height=«107» src=«ref-1_370103855-992.coolpic» v:shapes="_x0000_s1122">
cos j sin j
(x* y* 1) = (x y 1) -sin j cos j 0 (3.12)
-a cos j + b sin j +a -a sin j — b cos j+ b 1
Элементы полученной матрицы (особенно в последней строке) не так легко запомнить. В то же время каждая из трех перемножаемых матриц по геометрическому описанию соответствующего отображения легко строится.
Пример 2. Построить матрицу растяжения с коэффицентами растяжения aвдоль оси абсцисс и b вдоль оси ординат и с центром в точке А (a, b).
1-й шаг. Перенос на вектор –А (-a, -b) для совмещения центра растяжения с началом координат;
<img width=«89» height=«108» src=«ref-1_370101652-732.coolpic» v:shapes="_x0000_s1123">
1 0 0
[ T-A ] = 0 1 0 (3.13)
-a -b 1
матрица соответствующего преобразования.
2-й шаг. Растяжение вдоль координатных осей с коэффицентами a иb соответственно; матрица преобразования имеет вид
<img width=«89» height=«98» src=«ref-1_370096973-725.coolpic» v:shapes="_x0000_s1124">
a 0 0
[ D ] = 0 d 0 (3.14)
0 0 1
3-й шаг. Перенос на вектор А (a, b) для возвращения центра растяжения в прежнее положение; матрица соответствующего преобразования:
<img width=«89» height=«108» src=«ref-1_370101652-732.coolpic» v:shapes="_x0000_s1125">
1 0 0
[ TA ] = 0 1 0 (3.15)
a b 1
Премножив матрицы в том же порядке
[ T-A ] [ D ] [ TA ],
<img width=«242» height=«136» src=«ref-1_370107036-1101.coolpic» v:shapes="_x0000_s1126">получим окончательно
a 0 0
( x* y* 1) = (x y 1) 0 d 0 (3.16)
(1 — a)a (1 — d)b 1
Рассуждая подобным образом, то есть разбивая предложенное преобразование на этапы, поддерживаемые матрицами [ R ], [ D ], [ M ], [ T ], можно построить матрицу любого аффинного преобразования по его геометрическому описанию.
4.
Аффинные преобразования в пространстве
Рассмотрим трехмерный случай (3D) (3-dimension) и сразу введем однородные координаты.
Потупая аналогично тому, как это было сделано в размерности два, заменим координатную тройку (x, y, z), задающую точку в пространстве, на четверку чисел
(x y z 1)
или, более общо, на четверку
(hx hy hz), h = 0.
Каждая точка пространства (кроме начальной точки О) может быть задана четверкой одновременно не равных нулю чисел; эта четверка чисел определена однозначно с точностью до общего множителя.
Предложенный переход к новому способу задания точек дает возможность воспользоваться матричной записью и в более сложных трехмерных задачах.
Любое аффинное преобразование в трехмерном пространстве может быть представленно в виде суперпозиции вращений, растяжений, отражений и переносов. Поэтому вполне уместно сначала подробно описать матрицы именно этих преобразований (ясно, что в данном случае порядок матриц должен быть равен четырем).
А. Матрицы вращения в пространстве.
Матрица вращения вокруг оси абсцисс на угол j:
<img width=«194» height=«127» src=«ref-1_370108137-1019.coolpic» v:shapes="_x0000_s1127">
1 0 0 0
0 cos j sin j
0 -sin j cos j 0
0 0 0 1
Матрица вращения вокруг оси ординат на угол y:
<img width=«194» height=«127» src=«ref-1_370108137-1019.coolpic» v:shapes="_x0000_s1130">
cos y 0 -sin y 0
0 1 0 1
sin y 0 cos y 0
0 0 0 1
Матрица вращения вокруг оси аппикат на угол c:
<img width=«194» height=«127» src=«ref-1_370108137-1019.coolpic» v:shapes="_x0000_s1133">
cos c sin c 0 0
-sin c cos c 0 0
0 0 1 0
0 0 0 1
Полезно обратить внимание на место знака “ — ” в каждой из трех приведенных матриц.
Б. Матрица растяжения-сжатия:
<img width=«146» height=«118» src=«ref-1_370111194-901.coolpic» v:shapes="_x0000_s1136">
a 0 0 0
0 b 0 0
0 0 g 0
0 0 0 1
где
a> 0 – коэффицент растяжения (сжатия) вдоль оси абсцисс;
b > 0 – коэффицент растяжения (сжатия) вдоль оси ординат;
g > 0 – коэффицент растяжения (сжатия) вдоль оси аппликат.
В. Матрицы отражения
Матрица отражения относительно плоскости ху:
<img width=«146» height=«118» src=«ref-1_370111194-901.coolpic» v:shapes="_x0000_s1139">
1 0 0 0
0 1 0 0
0 0 -1 0
0 0 0 1
Матрица отражения относительно плоскости yz:
<img width=«146» height=«118» src=«ref-1_370111194-901.coolpic» v:shapes="_x0000_s1142">
-1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Матрица отражения относительно плоскости zx:
<img width=«146» height=«118» src=«ref-1_370111194-901.coolpic» v:shapes="_x0000_s1145">
1 0 0 0
0 -1 0 0
0 0 1 0
0 0 0 1
продолжение
--PAGE_BREAK--