-
Notifications
You must be signed in to change notification settings - Fork 1
КГ Лекция 01_02. Кривые и операции над ними.
Компьютерная графика – совокупность методов и средств преобразования информации в графическую форму и из графической с помощью ЭВМ. Методы – математические и алгоритмы. Средства – технические и программные. Компьютерная (вычислительная) геометрия.
Любой геометрический объект может быть задан несколькими способами.
Окружность – три точки; координаты центра и радиус. Параметрическое число геометрического объекта – минимальное количество параметров, задающих этот объект.
-
Прямая
– 3 (Ax+By+C=0) -
Прямоугольник
– 5 (концы диагонали и угол) -
Эллипс
– 5 (центр, a,b, угол; или вписывая в прямоугольник)
Рассмотрим окружность, возьмём две точки. Минимальное расстояние между ними
после округления должно быть >= 1, иначе точки начнут сливаться. Пусть угол между
радиусами этих точек равен θ
При достаточно большом радиусе кривизны кривой, две соседние точки кривой должны выбираться таким образом, чтобы величина угла (выраженная в радианах) между радиусами этих точек 3 ' 2 2 был не меньше чем 1/радиус. Радиус кривизны
Если прямая задана параметрически, х(т)
и у(т)
, то
В полярных координатах
Если взять две точки на кривой, провести через М1
касательную, то радиус кривизны
где w
– угол между касательной и осью абсцисс.
Для эллипса можно выделить два участка; граничной является точка, в которой
dx \ dy = 1
. На участке 0..х1
Х
изменяется с шагом 1 и вычисляется У
, на участке х1..х2
У изменяется с шагом 1 и вычисляется Х
.
При построении изображений часто приходится иметь дело с ситуациями, когда общее изображение (рисунок) включает в себя целый ряд компонент (подрисунков), отличающихся друг от друга только местоположением, ориентацией, масштабом, т.е. отдельные подрисунки обладают значительным геометрическим сходством.
Отличие фрагментов:
- Местоположение и радиус,
- Пропорции,
- Ориентация.
В этом случае целесообразно описать один подрисунок в качестве базового, а затем получать остальные требуемые подрисунки путем использования операций преобразования.
С помощью операций преобразования можно выполнять следующие действия:
- перемещать рисунки из одного места экрана в другое;
- создавать рисунок из более мелких элементов (составных частей);
- добавлять к существующему рисунку новые элементы;
- увеличивать размер рисунка для улучшения его наглядности или отображения более мелких деталей;
- уменьшать размер рисунка для внесения, например, поясняющих надписей или отображения на экране новых рисунков;
- создавать движущиеся изображения.
Все изменения рисунков можно выполнить с помощью трех базовых операций:
- Переноса (перемещение)
- Масштабирования (увеличения или уменьшения размеров)
- Поворота (вращение)
Для реализации перечисленных операций используется аппарат линейных преобразований.
Линейное преобразование на плоскости - это такое отображение плоскости в себя, при котором прямая переходит в прямую. Произвольная точка с координатами (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 |
Постановка задачи.
Зададим подвижную систему координат (У вверх). В ней зададим поверхность, задав вектор Ri некой центральной точки поверхности, и ориентацию поверхности, задав вектор нормали Ni этой точки. Поверхность обладает цветом Ci. Поскольку изображение является реалистичным, необходимо передать различные оптические эффекты – отражение света (диффузное и зеркальное), его пропуск, затенение. Задаётся коэффициент зеркального Кзi и диффузного Кдиффi отражения, коэффициент пропускания Кпрi. Далее задаётся подвижная система координат, связанная с неким объектом (радиус-вектор Под i). Вектор Rпод идёт из центра неподвижной в центр подвижной системы. Третья система координат связывается с наблюдателем. Начало её совмещается с положением точки наблюдения, Z направлена по линии взгляда, и изображение строится на картинной плоскости Хнабл:Унабл. Также присутствуют источники освещения Iистi. Они задаются координатами Xистi, Yистi, Zистi, цветом (интенсивностью каждой из трех составляющих) Также необходимы условия среды – коэффициент пропускания.
Для каждого динамического объекта требуется указать управляющие операторы, на основе которых может быть вычислено его положение для дискретных моментов времени, разделенных интервалами
- Разработка (трехмерной) математической модели синтезируемой визуальной обстановки. Представление поверхности: Аналитическое описание или полигональная модель или т.п.
- Определение положения наблюдателя в 3мерном пространстве, направления линии взгляда и положения экрана, размеров окна обзора, значения управляющих сигналов (для динамических объектов).
- Формирование операторов, осуществляющих пространственное перемещение динамических моделируемых объектов
- Преобразование координат объектов в неподвижной системе в координаты в системе наблюдателя.
- Отсечение объектов сцены (в том числе ФРАГМЕНТОВ объектов) в пределах пирамиды видимости (удаление того, что находится за пределами видимой области).
- Нахождение двумерных перспективных проекций объектов сцены на картинную плоскость.
- Исключение невидимых объектов сцены при заданном положении наблюдателя. Закрашивание и затенение видимых участков сцены.
- Вывод полученного полутонового изображения на экран растрового дисплея.