Skip to content

КГ Лекция 01_02. Кривые и операции над ними.

Vladislav Mansurov edited this page Apr 16, 2022 · 1 revision

Введение

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

Любой геометрический объект может быть задан несколькими способами.

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

  • Прямая – 3 (Ax+By+C=0)
  • Прямоугольник – 5 (концы диагонали и угол)
  • Эллипс – 5 (центр, a,b, угол; или вписывая в прямоугольник)

Об аппроксимации кривых

Рассмотрим окружность, возьмём две точки. Минимальное расстояние между ними после округления должно быть >= 1, иначе точки начнут сливаться. Пусть угол между радиусами этих точек равен θ

image

При достаточно большом радиусе кривизны кривой, две соседние точки кривой должны выбираться таким образом, чтобы величина угла (выраженная в радианах) между радиусами этих точек 3 ' 2 2 был не меньше чем 1/радиус. Радиус кривизны

image

Если прямая задана параметрически, х(т) и у(т), то

image

В полярных координатах

image

Если взять две точки на кривой, провести через М1 касательную, то радиус кривизны

image где w – угол между касательной и осью абсцисс.

Для эллипса можно выделить два участка; граничной является точка, в которой dx \ dy = 1. На участке 0..х1 Х изменяется с шагом 1 и вычисляется У, на участке х1..х2 У изменяется с шагом 1 и вычисляется Х.

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

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

Отличие фрагментов:

  1. Местоположение и радиус,
  2. Пропорции,
  3. Ориентация.

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

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

  1. перемещать рисунки из одного места экрана в другое;
  2. создавать рисунок из более мелких элементов (составных частей);
  3. добавлять к существующему рисунку новые элементы;
  4. увеличивать размер рисунка для улучшения его наглядности или отображения более мелких деталей;
  5. уменьшать размер рисунка для внесения, например, поясняющих надписей или отображения на экране новых рисунков;
  6. создавать движущиеся изображения.

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

  1. Переноса (перемещение)
  2. Масштабирования (увеличения или уменьшения размеров)
  3. Поворота (вращение)

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

Линейное преобразование на плоскости

Линейное преобразование на плоскости - это такое отображение плоскости в себя, при котором прямая переходит в прямую. Произвольная точка с координатами (X,Y) переходит в результате линейного преобразования в точку с координатами (X1,Y1) в соответствии с выражениями:

X1 = AX + BY + C
Y1 = DX + EY + F
где A,B,C,D,E,F - коэффициенты данного преобразования.

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

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

Декартовы координаты x = X / W , y = Y / W .

Линейное преобразование в матричной форме:

                          | A D 0 |
(X1, Y1, 1) = (X, Y, 1) * | B E 0 | = (X, Y, 1) * M
                          | C F 1 |
где M - обозначается матрица преобразования

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

Перенос: приходится использовать однородные координаты, которые были введены в геометрии и ныне широко используются в машинной графике. В однородных координатах точка P(X, Y) записывается в виде P(W*X, W*Y ,W) для любого масштабного множителя W <> 0. При этом если для точки задано ее представление в однородных координатах P(X, Y, W), то можно найти ее двумерные декартовы координаты как x = X / W, y = Y / W, где W – масштабный коэффициент. Для двумерного пространства W = 1, поэтому операция деления не требуется. Однородные координаты можно представить как вложение промасштабированной с коэффициентом W двумерной плоскости в плоскость z = W (здесь z = 1) в трехмерном пространстве. Следует добавить, что с помощью матрицы преобразования:

                  |A B|
(X1, Y1)=(X,Y) *  |C D| 
// нельзя описать операцию переноса.

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

(X2,Y2,1) = (X1,Y1,1) * M2 = (X,Y,1) * M1 * M2 = (X,Y,1) * M, (3)
где X,Y - координаты исходной точки;
X1,Y1 - координаты точки после первого преобразования;
X2,Y2 - координаты точки после второго преобразования; 
M1,M2,M - матрицы соответственно первого,  второго и  результирующего преобразований.

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

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

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

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

Формулы переноса изображения

Для переноса точки из позиции с координатами (X,Y) в позицию с координатами (X1,Y1) надо к координате X добавить DX, а к координате Y - DY единиц, причем

DX = X1 - X 
DY = Y1 - Y
X1 = X + DX 
Y1 = Y + DY

Матрица переноса изображения

    | 1   0   0 |
M = | 0   1   0 |
    | dx  dy  1 |

Замечание:

  • Положительное значение DX означает перемещение точки вправо по горизонтали, отрицательное - влево; положительное значение DY - перемещение вниз по вертикали, отрицательное - вверх.
  • Не следует задавать слишком малые значения DX, DY (DX < 0,5, DY < 0,5), так как в этом случае точка повторно высвечивается на старом месте.

Масштабирование изображения на плоскости

Масштабирование – изменение пропорций\размеров изображения.

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

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

Задается четырьмя параметрами:

  • координаты центра масштабирования
  • коэффициент по Х, коэффициент по У.

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

Однородное масштабирование – коэффициенты одинаковые, неоднородные – с разными коэффициентами.

Формулы масштабирования

Центр Xm,Ym, точка X,Y, новая точка X1,Y1, коэффициенты Kx,Ky,

X1 – Xm = Kx * (X-Xm)
Y1 – Ym = Ky * (Y-Ym)

X1 = X * KX + (1 - KX) * XM
Y1 = Y * KY + (1 - KY) * YM
где X,Y - координаты исходной точки;
X1,Y1 - координаты промасштабированной точки;
XM,YM - координаты центра масштабирования;
KX,KY - коэффициенты масштабирования.

При этом, если KX > 1 и KY > 1, то рисунок увеличивается в размере и удаляется от начала координат; если KX < 1 и KY < 1, то рисунок уменьшается в размерах и приближается к началу координат.

Таким образом, К.Новая = К.Центра + Коэффициент * (К.Старая – К.Центра)

Матрица масштабирования

В матричной форме, для случая Xm = Ym = 0:

         / kx  0   0 \
Mмасш = |  0   ky  0  |
         \ 0   0   1 /

В общем случае – вначале мы проводим ПЕРЕНОС, чтобы центр масштабирования совпал с центром координат, затем провести масштабирование, затем обратный перенос: Мпереноса_в_0 ∗ Ммасш ∗ М переноса обратно. Если коэффициент меньше 1 – изображение уменьшается, точки перемещаются ближе к центру масштабирования. Если больше – увеличиваются, точки перемещаются дальше. Если коэффициент меньше 0 – изображение заодно получится зеркальное отображение (курову не говорите отзеркаливается - ответ не засчитан).

Масштабирование рисунка

Для масштабирования рисунка необходимо в соответствии с формулами вычислить новые координаты всех точек нового изображения, а затем полученные точки соединить линиями. При этом размеры рисунка равномерно увеличиваются или уменьшаются, если KX=KY. Однако не всегда надо вычислять координаты всех точек нового рисунка. Например, при масштабировании окружности, достаточно вычислить новые координаты ее центра, а в качестве радиуса взять величину k*R (k - коэффициент масштабирования, R - радиус исходной окружности). Таким же образом можно поступить при масштабировании эллипсов, прямоугольников.

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

С помощью масштабирования можно растянуть или сжать изображение вдоль одной координатной оси, оставив его без изменения вдоль другой оси. Например, масштабируя квадрат с коэффициентами масштабирования KX = 1, KY =2, получим прямоугольник, у которого большая сторона имеет вертикальное расположение.

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

Поворот

Поворот – задается тремя параметрами: центр поворота, и углом поворота. Центр Xc,Yc, точка X,Y, новая X1,Y1, О – угол на который поворачиваем, Ф – исходный угол относительно оси абсцисс.

Формулы поворота точки

Для выполнения поворота надо указать величину угла, на который необходимо осуществить поворот, и координаты точки, которая берется за центр вращения. Если исходную точку A с координатами (X,Y) по дуге окружности с центром в точке C с ко-ординатами (Xс,Yс) поворачивают на угол t, то координаты (X1,Y1)

X1 = Xс + (X - Xс) * cos(t) + (Y - Yс) * sin(t) * rx/ry
Y1 = Yс + (Y - Yс) * cos(t) - (X - Xс) * sin(t) * ry/rx,
где rx, ry - разрешающие способности вдоль оси X и Y соответственно.

Матрица поворота

    | cost  -sint  0 |
M = | sint   cost  0 |
    |  0      0    1 |

Если начало координат расположено в левой верхней точке экрана, то угол поворота измеряется в направлении против часовой стрелки. Если же начало координат лежит в левой нижней точке экрана, то угол поворота должен измеряться в направлении по часовой стрелке. Центр поворота может быть расположен в любом месте экрана, а также за пределами его границ. Угол поворота лежит обычно в пределах от 0 до 360 , другие углы поворота также допустимы, однако поворот при этих углах эквивалентен повороту при углах из указанного диапазона.

Поворот рисунка

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

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

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

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

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

Основные свойства преобразований

Коммутативность – независимость результата преобразований от порядка, в котором они происходят. (X1 Y1 1) = (X Y 1)M1M2 – если М1 можно умножить на М2, то в ОБЩЕМ случае, М2 умножить на М1 нельзя – в общем случае, преобразование коммутативностью не обладает.

Коммутативные преобразования:

1 2
Перенос Перенос
Масштаб. Масштаб.
Поворот Поворот
Однородное масшт. Поворот

Доказательство коммутативности производится через перемножение матриц.

Аддитивные и мультипликативные операции – типа сложение и умножение.

Аддитивные: перенос-перенос и поворот-поворот. Чтобы найти итоговую матрицу такого поворота, достаточно сложить аргументы.

              |     1         0      0 |
Mпер1 Мпер2 = |     0         1      0 |
              | dx1 + dx2 dy1 + dy2  1 |
              | cos t1+t2  -sin t1+t2  0 |
Mпер1 Мпер2 = | sin t1+t2   cos t1+t2  0 |
              |     0          0       1 |

Мультипликативные: перемножить аргументы:

                | kx1*kx2    0     0 |
Mмасш1 Ммасш2 = |    0    ky1*ky2  0 |
                |    0       0     1 |

Синтез сложного динамического реалистичного изображения

Постановка задачи.

image

Зададим подвижную систему координат (У вверх). В ней зададим поверхность, задав вектор Ri некой центральной точки поверхности, и ориентацию поверхности, задав вектор нормали Ni этой точки. Поверхность обладает цветом Ci. Поскольку изображение является реалистичным, необходимо передать различные оптические эффекты – отражение света (диффузное и зеркальное), его пропуск, затенение. Задаётся коэффициент зеркального Кзi и диффузного Кдиффi отражения, коэффициент пропускания Кпрi. Далее задаётся подвижная система координат, связанная с неким объектом (радиус-вектор Под i). Вектор Rпод идёт из центра неподвижной в центр подвижной системы. Третья система координат связывается с наблюдателем. Начало её совмещается с положением точки наблюдения, Z направлена по линии взгляда, и изображение строится на картинной плоскости Хнабл:Унабл. Также присутствуют источники освещения Iистi. Они задаются координатами Xистi, Yистi, Zистi, цветом (интенсивностью каждой из трех составляющих) Также необходимы условия среды – коэффициент пропускания.

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

image

Этапы синтеза

  1. Разработка (трехмерной) математической модели синтезируемой визуальной обстановки. Представление поверхности: Аналитическое описание или полигональная модель или т.п.
  2. Определение положения наблюдателя в 3мерном пространстве, направления линии взгляда и положения экрана, размеров окна обзора, значения управляющих сигналов (для динамических объектов).
  3. Формирование операторов, осуществляющих пространственное перемещение динамических моделируемых объектов
  4. Преобразование координат объектов в неподвижной системе в координаты в системе наблюдателя.
  5. Отсечение объектов сцены (в том числе ФРАГМЕНТОВ объектов) в пределах пирамиды видимости (удаление того, что находится за пределами видимой области).
  6. Нахождение двумерных перспективных проекций объектов сцены на картинную плоскость.
  7. Исключение невидимых объектов сцены при заданном положении наблюдателя. Закрашивание и затенение видимых участков сцены.
  8. Вывод полученного полутонового изображения на экран растрового дисплея.
Clone this wiki locally