Загрузил Artem

fullKG

реклама
01. Описание графических объектов в машинной графике. Понятие о
графических примитивах и их атрибутах.
Графические примитивы.
(1) – геометрические атрибуты – определяют форму графического объекта;
(2) – атрибуты представления (видимости, визуализации);
(3) – атрибуты идентификации – как обеспечивается замыкание обратной связи
человека с машиной;
Базовые графические примитивы.
1.
Полилиния – набор точек соединяющихся отрезками прямых.
Точки характеризуются геометрическими атрибутами, а как соединяются это
атрибуты видимости.
Линии: пунктир, точечная, штриховая, замкнутая, разомкнутая, разного
цвета, разной толщины – атрибуты визуализации.
Если пользователь выделяет линию и она меняет свои атрибуты
визуализации – это и есть атрибуты идентификации – т.е. это атрибуты
видимости но меняющиеся.
2.
Кронтура замкнутые (разомкнутые) – контур может быть заполнен
определенными фигурами (штриховка, звездочки, элементы микросхем и
т.д.), а так это тоже что и полилиния – характеризуется массивом точек
которые соединяются либо отрезками или дугами.
Атрибут – набор точек.
3.
Матрица точек – прямоугольная область m x n каждая точка которой
характеризуется своим цветом. Эта всегда область // границам экрана.
Атрибут – m x n точками и координаты привязки.
m x n может меняться только в сторону увеличения масштаба,
если меняем в уменьшение, то мы можем потерять некоторую
информацию.
4.
Маркеры – специальные значки позволяющие отмечать отдельные
координаты графических элементов:
Атрибут 1– координаты
Атрибут 2 – вид маркера.
5.
Текстовая строка – строка состоящая из символов, характеризуется:
- геометрическим атрибутом – точка привязки.
- атрибутом видимости – стиль текста, тип, наклон, привязка текста к точке
привязки (по началу или по концу строки), сжатие (растяжение).
Обобщенный графический примитив – совокупность базовых примитивов:
- эллипс
- гипербола
- транзистор
- изображение микросхемы
02. Математическое представление и преобразование координат точек
на плоскости. Изменение масштаба изображения по координатам,
отображение относительно осей, начала координат, поворот, сдвиг.
Изменение геометрических атрибутов можно свести к операции умножения матриц.
y
а
с
b
х
   xa  
  y a   
 x * a  y *c x *b  y * d 
 xa ya

a
a
a
a
x y
  a b    x * a  y * c x * b  y * d 

b
b
b
b
 b
 c d   b



 xc yc

....................... .......................


матрица 
матрица


*
описания
объекта
*
преобразования
Для каждого типа преобразования есть своя матрица преобразования.
Есть коэффициент "a" отличный от 0: a  0
d=1
c=b=0
 xa
 xb


ya  axa
yb   axb
 
 
ya 
yb  изменение масштаба по оси X


а>0
a < 0: знак координаты меняется – картинка переходит в отрицательную область;
а = -1: получаем отображение относительно оси “Y”
коэффициент "a" отвечает за изменения масштаба по оси “X” и отображения
относительно оси “Y”
a 1
d 0
bc0
 xa
 xb


ya   xa
yb    xb
 
 
dya 
dyb 


Коэффициент "d" отвечает за изменение масштаба по оси
относительно оси “X”.
“Y” и отображение
d = -1
m  a  d  0; c = b = 0 – тогда изменяем масштаб, если m < 0 то отображение
относительно обоих осей.
a  d 1
b0
c0
 xa
 xa ya 
1
b


 xb yb  
  xb



 0 1 



3*
xa * b  ya 
xb * b  yb 

xi b
3
1*
2*
2
1
Сдвиг по координате “Y” на величину пропорциональную “x”
a  d 1
Сдвиг по координате “X” на величину пропорциональную “y”
b0
c0
Поворот относительно начала координат:
α – угол поворота
 xa
x
 b
 xc
ya
yb
yc

 *  cos 
  sin 
 
sin  
cos  
Поворот на угол α против часовой стрелки, масштаб изменяться не будет.
С помощью матричного преобразования нельзя просто перенести параллельно
объект, также поворот объекта вокруг произвольной точки в области. Для этого
переходим в другую координатную систему, используем обобщенные координаты. –
Когда объект “n”-ой степени описывается с помощью “n+1” степени, т.е. двумерный
объект описывается с помощью трех координат.
 xa
x
 b
 xc
 xa
x
 b
 xc
y a 1 a b 0
y b 1 *  c d 0
y c 1  l m s 
y a 1 1 0 0  x a  l
y b 1 * 0 1 0   xb  l
y c 1  l m s   
y a  m 1
y b  m 1

 
Параллельный перенос по плоскости без изменения формы.
 xa

= xb

 
lm0
Если
s0
ya
yb

s
s 
 
Перешли в плоскость s
x*
;
s
y*
y ** 
s
x ** 
s- масштабирование одновременно по обеим осям
s > 1 – масштаб уменьшается
0 < s < 1 – масштаб увеличивается
s < 0 – изменение масштаба и отображение относительно начала координат.
Поворот относительно точки "O": надо перенести начало координат в точку "0"
(можно двигать либо объект, либо начало координат)
0
y0
x0
 xa
x
 b
 xc
xi
xj
ya 1  1
yb 1 *  0
yc 1  x0
0
1
 y0
сдвиг
координат
0  cos 
0 *  sin 
1  0
sin 
cos 
0
поворот
0  1
0 *  0
1  x0
0
1
 y0
0
0
1
возвращение
начала
координат
Либо перемножаем последовательно, либо сначала три последних матрицы
перемножаем и потом умножаем на первую.
Поворот относительно прямой:
y
p2
x
y*
x**
y**
α
x*
p1
1.
2.
3.
4.
5.
перенести начало координат в точку р1 (x*,y*)
поворачиваем на угол α (x**,y**)
отображаем относительно оси х**
поворачиваем на угол - α
переносим обратно начало координат
1-2 это подготовительные операции
3 - основная операция
03. Преобразование отрезков прямых и плоских фигур на плоскости.
Изменение их масштаба, поворот, сдвиг, отображение относительно
осей координат и произвольной прямой.
Изменение геометрических атрибутов можно свести к операции умножения матриц.
y
а
b
с
х
   xa  
  y a   
 x * a  y *c x *b  y * d 
 xa ya

a
a
a
 a

a
b


x y


x
*
a

y
*
c
x
*
b

y
*
d


b
b
b
b
b
b



 c d



 xc yc

....................... .......................


матрица 
матрица


*
описания
объекта
*
преобразования
Для каждого типа преобразования есть своя матрица преобразования.
Есть коэффициент "a" отличный от 0: a  0
d=1
c=b=0
 xa
 xb


ya  axa
yb   axb
 
 
ya 
yb  изменение масштаба по оси X


а>0
a < 0: знак координаты меняется – картинка переходит в отрицательную область;
а = -1: получаем отображение относительно оси “Y”
коэффициент "a" отвечает за изменения масштаба по оси “X” и отображения
относительно оси “Y”
a 1
d 0
bc0
 xa
 xb


ya   xa
yb    xb
 
 
dya 
dyb 


Коэффициент "d" отвечает за изменение масштаба по оси
относительно оси “X”.
“Y” и отображение
d = -1
m  a  d  0; c = b = 0 – тогда изменяем масштаб, если m < 0 то отображение
относительно обоих осей.
a  d 1
b0
c0
 xa
 xa ya 
1
b


 xb yb  
 x

 0 1  b



3*
xi b
3
1*
2*
2
1
xa * b  ya 
xb * b  yb 

Сдвиг по координате “Y” на величину пропорциональную “x”
a  d 1
Сдвиг по координате “X” на величину пропорциональную “y”
b0
c0
Поворот относительно начала координат:
α – угол поворота
 xa
x
 b
 xc
ya
yb
yc

 *  cos 
  sin 
 
sin  
cos  
Поворот на угол α против часовой стрелки, масштаб изменяться не будет.
С помощью матричного преобразования нельзя просто перенести параллельно
объект, также поворот объекта вокруг
произвольной точки в области. Для этого
переходим в другую координатную систему,
используем обобщенные координаты. – Когда
объект “n”-ой степени описывается с помощью
“n+1” степени, т.е. двумерный объект
описывается с помощью трех координат.
 xa
x
 b
 xc
 xa
x
 b
 xc
y a 1 a b 0
y b 1 *  c d 0
y c 1  l m s 
y a 1 1 0 0  x a  l
y b 1 * 0 1 0   xb  l
y c 1  l m s   
y a  m 1
y b  m 1

 
Параллельный перенос по плоскости без изменения формы.
lm0
Если
s0
 xa

= xb

 
ya
yb

s
s 
 
Перешли в плоскость s
x*
;
s
y*
y ** 
s
x ** 
s- масштабирование одновременно по обеим осям
s > 1 – масштаб уменьшается
0 < s < 1 – масштаб увеличивается
s < 0 – изменение масштаба и отображение относительно начала координат.
Поворот относительно точки "O": надо перенести начало координат в точку "0"
(можно двигать либо объект, либо начало координат)
0
y0
x0
 xa
x
 b
 xc
xi
xj
ya 1  1
yb 1 *  0
yc 1  x0
0
1
 y0
0  cos 
0 *  sin 
1  0
сдвиг
координат
sin 
cos 
0
поворот
0  1
0 *  0
1  x0
0
1
 y0
0
0
1
возвращение
начала
координат
Либо перемножаем последовательно, либо сначала три последних матрицы
перемножаем и потом умножаем на первую.
Поворот относительно прямой:
y
p2
x
y*
x**
y**
α
p1
x*
6. перенести начало координат в точку р1 (x*,y*)
7. поворачиваем на угол α (x**,y**)
8. отображаем относительно оси х**
9. поворачиваем на угол - α
10. переносим обратно начало координат
1-2 это подготовительные операции
3 - основная операция
04. Двумерное смещение (перенос) плоских фигур без искажения их
формы. Понятие об однородных координатах.
С помощью матричного преобразования нельзя просто перенести параллельно
объект, также нельзя повернуть объект вокруг произвольной точки в области. Для
этого переходим в другую координатную систему, используем обобщенные
координаты. – Когда объект “n”-ой степени описывается с помощью “n+1” степени,
т.е. двумерный объект описывается с помощью трех координат.
 xa
x
 b
 xc
 xa
x
 b
 xc
y a 1 a b 0
y b 1 *  c d 0
y c 1  l m s 
ya 1 1 0 0  xa  l
yb 1 * 0 1 0   xb  l
yc 1  l m 1  
ya  m 1
yb  m 1

 
Параллельный перенос по плоскости без изменения формы при s = 1.
05. Поворот плоской фигуры вокруг произвольной точки плоскости.
Поворот относительно точки "O": надо перенести начало координат в точку "0"
(можно двигать либо объект, либо начало координат)
0
y0
x0
 xa
x
 b
 xc
xi
xj
ya 1  1
yb 1 *  0
yc 1  x0
0
1
 y0
сдвиг
координат
0  cos 
0 *  sin 
1  0
sin 
cos 
0
поворот
0  1
0 *  0
1  x0
0
1
 y0
0
0
1
возвращение
начала
координат
Либо перемножаем последовательно, либо сначала три последних матрицы
перемножаем и потом умножаем на первую.
06. Матрица преобразования трехмерных объектов и назначение ее
элементов.
Матрица преобразования для объемных объектов
a b c o 


 
x
y
z
1


d
e
f
p
 1

1
1




 x 2 y 2 z 2 1 *  g h k r 


 
.......... .........


 

 .......... .........  
l m n s 


3 x 3 3 x 1


   четыре


1 x 3 1 x1 
подматрицы
3x3
a, е, k – изменение масштаба по осям и отображение относительно плоскостей или
начала координат.
Остальные – отвечают за поворот объектов вокруг осей, отдельно – за сдвиг.
1x3
l, m, n – параллельный перенос объектов тела соответственно вдоль оси x, y, z.
1x1
s – за изменение масштаба всей фигуры и отображение фигуры относительно начала
координат.
3x1
отвечает за преобразование тела в перспективе.
Примеры:
1 0 0 0 


0 e 0 0 
0 0 1 0 


0 0 0 1
 a 0 0 0


0 1 0 0 
0 0 1 0 


0 0 0 1 
1 0 0 0 
 a 0 0 0 


 0 1 0 0
0 a 0 0  


0 0 a 0   a 0 0 1 0 

 

0 0 0 1 0 0 0 1 
 a
Изменение
масштаба
вдоль оси
‘x’ в ‘a’-раз
Изменение Изменение
масштаба масштаба
вдоль оси вдоль оси
‘y’ в ‘е’-раз ‘z’ в ‘k’-раз
1 0 0 0 


0
1
0
0


0 0 k 0 



0 0 0 1 

Изменение
масштаба всей
фигуры
1 0 0 0 


0 1 0 0 
0 0 1 0 


l 0 0 1
Параллельный
перенос
объекта
вдоль оси x
Для поворота тела вокруг оси z на угол α:
y
Правосторонняя система координат.
Поворот против часовой стрелки.
x
z
Поворот против часовой стрелки, если
смотреть из конца оси в начало
координат.
α
 cos 
 sin 
Tz  
 0

 0
sin 
cos 
0
0
0
0
1
0
Поворот фигуры
вокруг оси ‘z’
0
0
0

1
0
1
0 cos 
Tx  
0  sin 

0
0
0
sin 
cos 
0
Поворот фигуры
вокруг оси ‘х’
0
0
0

1
cos 
 0
Ty  
 sin 

 0
0  sin 
1
0
0 cos 
0
0
0
0
0

1
Поворот фигуры
вокруг оси ‘y’
При переходе от ‘z’ к ‘х’ (‘х’ к ‘у’) вся таблица смещается на один элемент вправо и
вниз не выходя за границы матрицы 3х3.
Повернуть фигуру вокруг оси P1P2 на угол σ (сигма)
y
x  Px2  Px1
2
1
y  Py2  Py1
P2
3
4
1
z  Pz2  Pz1
Ось повернуть так, что бы x прошла 2
через точку (Δx, Δy)
y* (y**)
P2
y*
x
α
P1
z
γ
о*
P1
z**
x*
x**
z*
∆x, ∆y
x*
γ
z*
P1P2 оказалась в плоскости x** 0* у**
Проекция оси P1P2 на плоскость z* о* x*
Далее, оси y** совмещаем с P2,
либо x** совмещаем с P2
После поворота получилось:
y*( y**)
x***
Поворот фигуры вокруг оси ‘z’ на угол ‘α’
3
y* (y**)
P2
P2
y***
α
P1
z**
z**
( z***)
x*
o
 1
объект 

* 0

  0

 
 xP1
0
1
0
 yP1
0
0
1
 z P1
перенос начала
координат
в точку Р1
0
1
0 cos 
*
0  sin 

0
0
0
sin 
cos 
1
основная операция
x*
P1
z*
Теперь поворот вокруг прямой P1P2
т.е. оси x*** на угол сигма
x**
z*
4
0 cos  
0  0
*
0  sin  
 
1  0
0  sin  
1
0
0 cos  
0
0
поворот фигуры
вокруг оси ‘y’
0
0
* T * T * Tсмещения  xP ,  yP ,  zP 
1
1
1
0
отрабатываем обратно все

1 подготовительные операции
0  cos 
0  sin 
*
0  0
 
1  0
sin 
cos 
0
0
0
0
1
0
0
0
*
0

1
поворот фигуры
вокруг оси ‘z’
Параметры o, p, r – перспективные преобразования объекта вдоль соответствующих
осей.
H 
1
1

r 1  rz1 x1 * 
x1
1  rx1
Дали, что бы вернуться в нужную систему координат надо все поделить на z1r+1
 x1
1
y1
z1
1



...................  * 0
................... 
0




0
................... 

0
1
0
0
0
0
1
0
 x1
0
y1
z1
z1r  1


0

  ...................
...................

r



1
..........
.........




y1
z1
P1(x1,y1,z1)
x1
y
y1*
0
x1*
x
Н – это точка наблюдения (наблюдатель),
находится
на расстоянии z обратно
пропорционально коэффициенту r
Н
z
x
y
z
x1*  1 y1*  1 z1*  1
z1r 1 z1r 1 z1r 1
1
x1 *
H
r


1
x1
H  z1
 z1
r
Параллельные прямые будут сходиться в бесконечности.
(x2,y2,∞)
x1,y1
P2(x1,y1,z1)
Z1
P1(x1,y1,z1)
(x1,y1,0)
Н
z
Если z=0, то
x1*  x1
 не преобразуется
y1*  y1
 не преобразуется
z1*  z1  0
Если z=∞, то
 не преобразуется
x2 *  0
y2 *  0
z2 * 
z1
1
1


z1r  1 r  1 r
z1
//
1
0
z1
Точка схождения симметрична точке наблюдения.
o, p, r – это перспективные преобразования объекта вдоль соответствующих осей.
r – это относительно оси z
Это одноточечное преобразование
r
Н(xн1,yн1,zн))
Перенести так, чтобы z прошла через наблюдателя.
Здесь r – это модуль:
r1  x12  y12  z12
Можно перенос с поворотом:
1
объект 


 * 0


0





0
0
1
0
0
0
0
0
0
0
0

0

1
07.
Представление
трехмерных объектов
на плоскости.
Виды аксонометрической проекции. Матрица
преобразования для получения ортогональной проекции объемного
тела на плоскости. Построение видов сверху, спереди, слева, сзади,
снизу, справа.
Отображение вокруг произвольной плоскости в пространстве
- определить угол наклона
- повернуть (что бы совпало с одной из линий)
- потом, что бы совпало со всей плоскостью, т.е. еще раз поворачиваем
- отобразить
- отказаться от первых трех подготовительных операций.
Проекция трехмерного объекта на плоскость XOY (т.е. должны обнулить все точки z)
r1  x  y
2
1
2
1
Далее, определить какие точки видны, а какие затенены.
 cos 
 sin 
Tz  
 0

 0
sin 
cos 
0
0
0
0
1
0
Поворот фигуры
вокруг оси ‘z’
0
0
0

1
0
1
0 cos 
Tx  
0  sin 

0
0
0
sin 
cos 
0
Поворот фигуры
вокруг оси ‘х’
0
0
0

1
cos 
 0
Ty  
 sin 

 0
0  sin 
1
0
0 cos 
0
0
Поворот фигуры
вокруг оси ‘y’
0
0
0

1
Для проекции сверху
Повернуть вокруг оси x на 90 градусов, тогда верх
окажется спереди и, после этого, матрицу
проецирования.
1 0
объект 

 * 0 0

 0  1

 
0 0
0
1
0
0
0 1
0 0
*
0  0
 
1  0
Поворот на 90°
cos90°=0
sin90°=1
0
1
0
0
0
0
0
0
0
0
0

1
Матрица
проецирования
Чтобы получить все проекции:
Для главного вида сразу определить охватывающий прямоугольник.
xmax, ymax
xmin, ymin
И, если следующий вид наложится, его надо сместить.
Для всех поворотов (поворот, спроецировать)
08. Диметрическая проекция. Математические преобразования для
получения элементов матрицы-преобразователя для построения этой
проекции.
Изометрические и диаметрические проекции на плоскости ХОУ формируют
изображение объемных тел, вид которых создает иллюзию объемности.
Смысл: тело вначале поворачивают вокруг оси у на некоторый угол, затем
поворачивают вокруг оси х на некоторый угол и потом проецируют.
1у*
1350
45
1х*
х
0
1z*
z
1х *  1у*  2 * 1z *
Общий вид для изометрической и диаметрической проекций.
1х
1у
1z
1 0 0 0 
1 0 0 1


0 1 0 1  Т  Т  0 1 0 0 

 

0 0 0 0 
поворот
0 0 11 поворот


вокруг
у
вокруг
х
  
0 0 01 
объект
cos 
 0
Т  Т   
 sin 

 0
sin   sin 
cos 
 sin   cos 
0
 cos 
 sin 
Tz  
 0

 0
0 0
0 0
1 0

0 1
sin 
cos 
0
0
Поворот фигуры
вокруг оси ‘z’
1
0
Tx  
0

0
проекцияна
ось ХОУ
 sin   cos 
sin 
cos   cos 
0
0
cos 
 sin 
0
0
sin 
cos 
0
Поворот фигуры
вокруг оси ‘х’
0
0
0

1
0
0
0

1
cos 
 0
Ty  
 sin 

 0
0
1
0
0
 sin 
0
cos 
0
0
0
0

1
Поворот фигуры
вокруг оси ‘y’
Углы поворота вокруг осей:
=20,7050
=22,2080
0,925820
 0
Т  Т   
0,377964

 0
- 0,353553 0
0,353553 0 
0,866025 0 

0
1
0,133631
0,935414
- 0,327329
0
Если обнулить третий столбец, то мы получим координаты точек спроецированные
на осях х,у,z (т.е. на плоскости визуализации).
Пример. Описание куба.
3
2
4
1
7
6
5
1т. 0111
2т. 0101
3т. 1101
4т. 1111
5т. 0011
6т. 0001
7т. 1001
8т. 1011
8
09. Изометрическая проекция и ее матричное представление,
используемое в машинной графике.
Изометрические и диаметрические проекции на плоскости ХОУ формируют
изображение объемных тел, вид которых создает иллюзию объемности.
Смысл: тело вначале поворачивают вокруг оси у на некоторый угол, затем
поворачивают вокруг оси х на некоторый угол и потом проецируют.
y
1у*
1200
Z
1z *
1x *
1х *  1у*  1z*
x
Общий вид для изометрической и диаметрической проекций.
1х
1у
1z
1 0 0 0 
1 0 0 1


0 1 0 1  Т  Т  0 1 0 0 

 

0 0 0 0 
поворот
поворот
0 0 11 вокруг у вокруг х 

  
0 0 01 

  
объект
проекцияна
ось ХОУ
cos 
 0
Т  Т   
 sin 

 0
 cos 
 sin 
Tz  
 0

 0
sin 
cos 
0
0
sin   sin 
cos 
 sin   cos 
0
 sin   cos 
sin 
cos   cos 
0
1
0
Tx  
0

0
0
sin 
cos 
0
0 0
0 0
1 0

0 1
Поворот фигуры
вокруг оси ‘z’
0
cos 
 sin 
0
0
0
0

1
0
0
0

1
cos 
 0
Ty  
 sin 

 0
Поворот фигуры
вокруг оси ‘х’
0
1
0
0
 sin 
0
cos 
0
0
0
0

1
Поворот фигуры
вокруг оси ‘y’
Углы поворота вокруг осей:
=35,264390
=450
0,707107
 0
Т  Т   
0,707107

 0
0,408248
0,816497
- 0,408248
0
- 0,577353 0
0,577345 0 
0,577353 0 

0
1
Если обнулить третий столбец, то мы получим координаты точек спроецированные
на осях х,у,z (т.е. на плоскости визуализации).
Пример. Описание куба.
3
2
4
1
7
6
5
8
1т. 0111
2т. 0101
3т. 1101
4т. 1111
5т. 0011
6т. 0001
7т. 1001
8т. 1011
10. Перспективные преобразования и их геометрическая
интерпретация на примере преобразования точек и прямых,
параллельных оси Z.
a b c o 


 
 x1 y 1 z 1 1   d e f p 


 
 x 2 y 2 z 2 1 *  g h k r 


 
.......... .........





 .......... .........  l m n s 


Параметры o, p, r – перспективные преобразования объекта вдоль соответствующих
осей.
x1
x1* 
z1r  1
y1
y1* 
z1r  1
z1
z1* 
z1r  1
Дали,
что бы вернуться
в нужную
систему
координат надо
все поделить на z1r+1




0
0
0
1
x
y1
z1
1
 1


...................  * 0
................... 
0




0
................... 

1
0
0
0
1
0
y1
x
y1
z1
z1r  1
 1

0

  ...................



r
...................



1


...................

z1
P1(x1,y1,z1)
x1
y
y1*
0
x1*
x
Н – это точка наблюдения (наблюдатель),
находится
на расстоянии z обратно
пропорционально коэффициенту r
Н
z
1
r
x1 *
H


x1
H  z1 1  z
1
r
H
1
1

r 1  rz1 x1 * 
x1
1  rx1
Параллельные прямые будут сходиться в бесконечности.
(x2,y2,∞)
x1,y1
P2(x1,y1,z1)
Z1
P1(x1,y1,z1)
(x1,y1,0)
Н
z
Если z=0, то
x1*  x1
 не преобразуется
y1*  y1
 не преобразуется
z1*  z1  0  не преобразуется
Если z=∞, то x2 *  0
y2 *  0
z1
1
1
1
z2 * 


//
0
z1r  1 r  1 r
z1
z1
Точка схождения симметрична точке наблюдения.
o, p, r – это перспективные преобразования объекта вдоль соответствующих осей.
r – это относительно оси z
Это одноточечное преобразование
Н(xн1,yн1,zн))
r
Перенести так, чтобы z прошла через наблюдателя.
r1  x12  y12
Здесь r – это модуль:
Можно перенос с поворотом:
r1  x12  y12  z12
11.
Математическое
представление
прямых
линий и отрезков в машинной графике.
Прямая
Описания вида "y=ax+b" не используются в компьютерной графике
задается координатами двух точек (начальной и конечной)
Используется в основном матричное и параметрическое представление прямой.
P2 ( x2 , y2 , z 2 )
P1 ( x1, y1, z1 )
Матричное представление:
x  x1 y  y1
=0
x2  x1 y2  y1
x  x1 z  z1
=0
x2  x1 z2  z1
Для плоской прямой используется первое уравнение, а для пространственной
используется два этих уравнения.
Они получаются из уравнения
x  x1
y  y1
z  z1


x2  x1 y2  y1 z2  z1
Параметрическое представление
x(t )  x1  ( x2  x1 )  t
y(t )  y1  ( y2  y1 )  t
z (t )  z1  ( z2  z1 )  t
Достоинства:
1. Не требует для точек операции деления и в этом случае не получается
ситуации переполнения данных при делении на ноль, т. е. когда результат
получается близким к бесконечности.
2. Описание прямой не зависит от положения этих точек, в этом случае эти
уравнения позволяют создать тестовые функции:
f ( x, y)  ( x  x1 )( y2  y1 )  ( y  y1 )( x2  x1 ) , используемые для
определения положения этих точек.
a. Если функция f ( x, y)  0 ,то точка P3(x3,y3), подставленная в это
выражение вместо x и y находится на этой прямой.
b. Если f ( x, y ) > 0, то точка находится справа от прямой, идущей от
точки Р1 к точке Р2.
P2
P1
c.
Если f ( x, y ) < 0, то точка находится слева от точек Р1 и Р2
P2
P1
Параметрическое представление. Каждая координата не зависит друг от друга, а
зависит от дополнительного параметра "t"
Особенность:
Если 0 ≤ t ≤1, то описывается отрезок.
Если t < 0, то это участок от "–  " до точки P1 .
Если t > 1, то это участок от точки P2 до "+  "
Параметрическое описание используется для определения точек пересечения двух
прямых. Точки для одной задаются в матричной форме, а для второй
параметрической форме. Или же оба задаются в параметрическом виде, в одном
случае используют “t”, а во втором “  ”. Если эти переменные лежат в диапазоне от
0 до 1, то они пересекаются своими отрезками. Если совпадают в других случаях, то
совпадают на продолжениях.
Если мы приравняем
x3  ( x4  x3 )  x1  ( x2  x1 )t
y3  ( y4  y3 )  y1  ( y2  y1 )t
То получим
( x3  x1 )  ( x4  x3 )  ( x2  x1 )t
( y3  y1 )  ( y4  y3 )  ( y2  y1 )t
( x3  x1 )( y2  y1 )  ( x4  x3 )( y2  y1 ) 
 ( y3  y1 )( x2  x1 )  ( y4  y3 )( x2  x1 )
* ( y2  y1 )
* ( x2  x1 )
и вычесть
( x4  x3 )( y2  y1 )  ( y4  y3 )( x2  x1 )
Если это выполняется, то они параллельны.
x y  x y
Если воспользоваться матричным представлением, то можно записать отрезок,
который будет перпендикулярен данному.
x  x1
y  y1
=0 Так описывается отрезок перпендикулярный заданному отрезку.
-( y 2  y1 )
P2
x2  x1
P3
P1
∆α
Если хотим перпендикулярный отрезок провести через заданную точку Р3, то такая
прямая задается следующим образом:
x  x3
y  y3
=0
-( y 2  y1 )
x2  x1
В первом случае перпендикулярная прямая проходит через точку Р1
Для того, чтобы она проходила через точку Р2:
x  x2 , y  y 2
=0
-( y 2  y1 ), y 2  y1
12. Математическое представление окружностей и эллипсов в машинной графике.
Для описание правильных прямых
Окружность
x2  y2  R2
( x  x0 ) 2  ( y  y0 ) 2  R 2
Описания описанного выше вида не используется в компьютерной графике.
Используется параметрическое описание.
x  R cos
y  R sin 
x  x0  R cos
y  y0  R sin 
Окружность преобразуется в растр.
Выбирается ближайшая точка и подсвечивается.
Каждую последующую точку считают из предыдущей и какогонибудь угла ∆α и получается многоугольник.
xn 1  R cos( n   )  R cos  n cos   R sin  n sin  
 xn cos   yn sin 
R cos  n  xn
R sin  n  xn
cos  
 Постоянные коэффициенты (их постоянно не нужно вычислять).
sin  
Т. е. мы затрачиваем на перевод меньше времени (расчет тригонометрических
функций задача медленная)
yn1  yn cos   xn sin  - Это если центр находится в начале координат.
Если центр не находится в начале координат:
x  x0  R cos  ( x  x0 )  R cos 

y  y0  R sin  ( y  y0 )  R sin 
( xn1  x0 )  R(cos n  
При описании всех правильных прямых (окружность, дуга окружности, эллипс, дуга
эллипса, параболы, гиперболы) стремятся использовать параметрическое задание.
xn 1  a cos( n   )
yn 1  b sin( n   )
Эллипс:
y*
x
y
b
β
x*
Начинаем формировать с нулевого угла. Для этого считаем сначала точку для
обычного эллипса, а потом поворачиваем полученную точку на угол "  ".
Каноническое описание
y2 x2
 2  2 1
a
b
Параметрическое описание гиперболы:
x  b  sec
y  a  tg
sin 2 
1

1
2
cos  cos 2 
 sin 2   1  cos 2  - это тождество.

Для определения энной точки
xn1  b sec( n   )
yn1  atg ( n   )
Используем формулу разложения sec
предыдущей.
3
1
4
2
и tg и получаем зависимость точки от
Считаем точку 1, точки 2-3 получаются отображением.
13. Представление пространственных кривых в машинной графике с помощью
кубических сплайнов. Задание концевых условий и их влияние на ход кривой.
Неправильные кривые.
Они задаются массивами точек. В параметрическом виде.
y
р1
р3
р0
р2
х
z
Методы формирования плавных кривых.
1. Требует прохождения через все заданные точки
2. Определяется этими точками, но через них не проходят
P(t ) - под P понимается координата либо “x”, либо “y”, либо “z”
Можно кривую описать полиномом “n+1” степени
P(t )  A0  A1t  A2t 2  ...  Antnn
“n+1” неизвестное (коэффициенты А)
у нас есть “n+1” точка, т. е. составляем систему из “n+1” уравнения
при t  0
“n+1” уравнение
P0  P(t  o)  A0
при t  t1
P1  P(t1 )  A0  A1t  A2t 2  ...  An t nn
………………………………………..
при t  t n
Pn  P(t n )  A0  A1t n  A2t n2  ...  An t nn
Решив эту систему мы получим все неизвестные А, и кривая будет проходить через
заданные точки.
Кривая имеет "n"непрерывных производных, эта кривая будет плавная, но волнистая.
Система долго решается
Нам нужно, чтобы на внутренних промежутках кривая имела хотя бы один
перегиб, но она может его и не иметь.
Минимально возможная степень кривой – третья
i  i  1 : P(t )  A0  A1t  A2t 2  A3t 3
Имеем четыре неизвестных, а промежуток задаем двумя точками, т. е. мы можем
написать систему из двух уравнений. Нам не хватает двух условий. Дополнительные
условия накладываются на концы кривой и задаются производными.
t  0  Pi ; Pi ' / Pi" / Pi '   Pi '1; Pi"  Pi"1
t  1  Pi 1 ; Pi ' 1 / Pi"1
На первую производную или на вторую производную, либо принимаем за “0” или за
“const”, или на равенство производных.
р1
*
*
**
р0
**
Производные * и * равны. ** и ** также равны.
Т. е. производные справа и слева от точек равны для плавности.
n + 1 +2 = n + 3
n+1 внутренние уравнения
+2 для границ
n+3 по каждой координате
Кубическая аппроксимация.
0≤t≤1
1
P' (t )  A1  2 A2t  3 A3t 2
P1  A0
P2  A0  A1  A2  A3
P1'  A1
P2'  A1  2 A2  3 A3
Для Р1 : t = 0
Для Р2 : t = 1





сначала на кривой находятся точки
строится математическое задание
сравнивается с заданной
сдвигаем точки туда, куда надо
пересчитываем точки
Чем больше точек, тем сложнее описание и дольше считать.
14. Параболическая интерполяция пространственных кривых. Ее особенности по
сравнению с другими методами представления кривых.
Параболическая аппроксимация
p1
p3
p2
p0
Смешанная С(r)
в итоге получили плавную
Предполагает описание тремя параметрами P1 (t )  Pa (at
2
 bt  c)
три неизвестных, кривая должна пройти через три заданных точки
Переходя к следующему участку, формируем новую кривую через три следующие
точки: P2 (q)  Pb (
2
    )
Когда мы стыкуем эти параболы они получаются не гладкие и на участке от P1 до
P2 строят смешанную параболу, полученную из смешения этих двух:
C (r )  P1 (t )  (1  2)  P2 (q)r
0  r 1
Достоинства: Строим последовательно. Формирование описания проще.
В точке Р1 – определяется кривой Р1 которая слева.
В точке Р2 – определяется кривой Р2 которая справа.
Кривые
Кубический сплайн – формируется через три последовательные точки.
Через первые две точки проходит единичная парабола.
Следующие три точки дают смешанную параболу на первых двух точках и мы
получаем перегиб и т. д.
Первая производная будет непрерывная, только на самых концах, там где чистые
параболы.
Р3
Р3
Р2
Р2
Р4
Р1
Р0
Р0
Выбор координатной системы в пространстве:
х*
Р2
х*2
У*
Р1
Рср 
х*0
Р0(х0,у0,z0)
( Р 2  Р0 )
2
Р4
Парабола – это плоская кривая.
Парабола меняется от Х*0 до Х*2.
При:
Х=Х0* проходит через точку Р0
Х=0 проходит через точку Р1
-Х0*=Х=Х2* проходит через т Р2
у  Р(х)  Р1 (ах 2  вх  с)
Следует отметить, что будет неоднозначность параболы, если выберем систему
координат по-другому.
Достоинство параболической аппроксимации в том, что она позволяет формировать
кривую последовательно, т.е. мы можем постепенно ее корректировать и сможем
подогнать ее к требуемой кривой не пересчитывая полностью. А при необходимости
внутренней корректировки будет достаточным отредактировать только три
внутренние точки, в отличии, от кубической аппроксимации, в которой надо было
сразу считать все точки и только потом подгонять.
В кубическом сплайне непрерывных две производных. В параболическом – только
первая
производная
непрерывная.
14. Параболическая интерполяция пространственных кривых. Ее
особенности по сравнению с другими методами представления
кривых.
Параболическая аппроксимация
p1
p0
p3
p2
Смешанная С(r)
в итоге получили плавную
Предполагает описание тремя параметрами P1 (t )  Pa (at
2
 bt  c)
три неизвестных, кривая должна пройти через три заданных точки
Переходя к следующему участку, формируем новую кривую через три следующие
точки: P2 (q)  Pb (
2
    )
Когда мы стыкуем эти параболы они получаются не гладкие и на участке от P1 до
P2 строят смешанную параболу, полученную из смешения этих двух:
C (r )  P1 (t )  (1  2)  P2 (q)r
0  r 1
Достоинства: Строим последовательно. Формирование описания проще.
В точке Р1 – определяется кривой Р1 которая слева.
В точке Р2 – определяется кривой Р2 которая справа.
15. Кривые Безье. Их формирование и особенности.
Эти кривые только определяют ход кривой.
Р1
Р2
Р4
Р1
Р3
Р5
Р0
Р2
Р3
Особенности:
1. Подходит по касательной к внешним ребрам задающего многоугольника, а
остальные точки определяют вид кривой. Позволяют качественно оценить
ход кривой от задающего многоугольника, задаются параметрически.
2. Это кривая n-ой степени, т.е. сколько ребер – такой степени получается
кривая. Можем влиять на степень кривой только изменением количества
точек.
n
Р(t)   Pi  N i,n ( t) ,где Р(t) – полиномиальная функция
i 0
N i, n ( t ) 
Рi – вес каждой точки
Ni, n – весовой коэффициент
i – номер точки
n – количество точек входящих в определяющий
многоугольник.
n!
 t i  (1 - t)n -i , где n!  5 * 4 * 3 * 2 *1, 0!  1
i! (n - i)!
Если множество точек, то строим либо кривую n-ой степени, либо пытаемся
построить кривую не высокой степени (например кубическую), но мы находимся в
противоречии с количеством точек, тогда мы постепенно будем создавать по четыре
точки, но кривая в местах стыка будет неплавная и чтобы этого избежать в
последнее ребро вставляем дополнительную точку Р и ее берем за последнею точку
данного характеристического многоугольника и первой точкой следующего
характеристического многоугольника и тогда она будет плавной кривой третьей
степени и называться составной кривой Безье.
Кривая 3 степени:
Составные кривые Безье:
Р
Р
16. Представление кривых с помощью В-сплайнов. Понятие об
узловом векторе и его компонентах. Особенности В-сплайнового
представления кривых.
Параметрические кривые, у В-сплайновой кривой и кривой Безье общее выражение
похоже
n
Р(t)   Pi  J i,k ( t)
i 0
где J – весовой коэффициент, который вычисляется рекуррентно.
x i  t  x i 1
1
J i ,1 (t )  
t  xi
t  x i 1
0
t - xi
x t
J i, k 1 (t ) 
J i,k ( t)  i  k
J i 1,k (t )
x i  k -1
x i  k  x i 1
Все коэффициенты вычисляются заранее.
К – это порядок В-сплайна (не степень кривой, а на единицу больше).
Если В-сплайновая кривая четвертого уровня – то это кубическая кривая
Х – элементы углового вектора, который принимает целочисленные значения
{Х0, ….,Хi, ….,Хmax} где Хi  Хi+1
xmax=n-k+2, где n – количество сторон, к – порядок
Х={0,….,n-к+2}
t – меняется непрерывно от {0 t<tmax=n-k+2}
Число элементов {Х0 ….Хi ….Хmax} в этом узловом векторе связано с числом n и к,
т.е. длина узлового вектора L=n+1+k
X  { X 0 ,... X i ,... X max }
X i  X i 1
В-сплайн характеризуется порядком “К”
Pi – точки
1
3
(n+1) – точка
можем построить разные В-сплайновые кривые.
Порядок их от 2 до (n+1)
0
2
4 2  K  n 1
1  степень _ кривой  n
18.
Описание
поверхности.
криволинейных
поверхностей.
Линейчатые
Поверхности задаются параметрически (каждая координата задается сама по себе),
т.е. можем задавать неоднозначные поверхности (т.е. для одной координаты вторая
координата может иметь несколько значений):
Х
Q (u, w)  f ( Pi (u, w))
1.Би-линейные поверхности, их задают на определенном участке
У нее есть 4 угловые точки поверхности
w
Р01
Р11 (x11; y11; z11)
0  u 1
0  w 1
Р00
Р10
u
Q (u, w)  P00 (1  u)(1  w)  P01(1  u)w  P10u(1  w)  P11uw
Если u=0; w=0, то попадаем в точку P00  Q (u, w)
Если u=1; w=0, то попадаем в точку P10  Q (u, w)
Если u=1; w=1, то попадаем в точку P11  Q (u, w)
19. Поверхность Безье. Понятие характеристического многогранника.
Для кубического сплайна – две точки ограничения на производную.
Для Безье - четыре точки, либо больше.
B – сплайн: не больше 4-5 точек обычно.
Задаем переход от одного к другому петчу.
кубически – билинейно поверхность.
Для поверхности Безье: для построения сетки ее строим из кривых Безье, т.е
формально задать петч, таким образом чтобы можно было определить i-тую и j-тую
кривую для этого должны задать многогранник из вершин точек.
мин 4*4 вершины характеристического многогранника, т.е. 16 точек
чтобы состыковать два петча, надо чтобы одна кривая Безье плавно переходила в
другую (на одной прямой три точки, одна общая и две крайних).
Для поверхности B - сплайновой точки самые минимальные: 16 точек 4*3, может
быть 4*5, 4*6 – чем больше точек тем труднее рассчитывать.
20. В-сплайновые поверхности.
Для В-сплайновой поверхности, как и для поверхности Безье строятся петчи
Для поверхности B - сплайновой точки самые минимальные: 16 точек 4*3, может
быть 4*5, 4*6 – чем больше точек тем труднее рассчитывать.
21. Алгоритм удаления невидимых линий, используемый при
изображении отдельных выпуклых тел.
Трехмерные отсекатели:
- кубоид
- пирамида усеченная
Когда наблюдатель приближен, то в качестве отсекателя – усеченная пирамида
y
Когда далеко – кубоид
x
z
z
Н - наблюдатель
Формально рассматривается, какие отрезки попадают в отсекатель (трехмерные)
Распространяем алгоритм, использующий битовый код отрезка
Трехмерные объекты:
ЛПНВБД – это 6-и битовый код
Л-левее
П-правее
Н-ниже
В-выше
Б-ближе
Д-дальше
Если конец и начало тождественно = 0, то такой отрезок полностью виден.
Н000000
К000000
Если побитовое произведение ≠ 0, то такой отрезок полностью невиден
*≠0
Если побитовое произведение = 0, то такой отрезок может быть частично виден или
невиден
*=0
22. Алгоритм определения видимости, использующий принцип
сортировки граней по глубине. Способы решения проблем видимости
в динамически меняющихся сценах.
Алгоритм отсечения видимости
Они позволяют выявить то, что видно, а что не видно, т.е. какие объекты в сложной
сцены видны, а какие затеняются.
Это важно:
- при сложных сценах какие видны ребра в выпуклом объекте
- при произвольной форме
- при окраске
Базовые алгоритмы: (формально их можно комбинировать)
Все они делятся на 2 группы:
1) Решают задачу видимости в пространстве объектов, т.е. как расположены
объекты друг относительно друга в пространстве
2) Рассматривают в плоскости визуализации (что видно, а что не видно)
Как правило 1-я труппа используется:
когда объектов не очень много, т.к. это можно сделать быстро (сопоставить
объекты)
2-я группа – когда сложная сцена, время обработки пропорционально количеству
пикселов участвующих в представлении объекта на экране
Рассмотрим алгоритмы определения видимости выпуклого тела:
Если грань видна – то и все ребра видны
Если грань не видна – то и все ребра не видны
Если найти внутреннюю точку выпуклого тела «0» и соединить ее с наблюдателем
прямой линией, то можно четко сказать, что если плоскость совпадает с гранью
выпуклого тела, пересекает эту линию на участке от 0 до Н то такая грань видна
23. Алгоритм выявления видимых частей сложной сцены, основанный
на использовании Z-буфера.
Исходные: Уравнение плоскости и точки
доп. буфер: для каждого пикселя фиксируется значение z координаты для
рассматриваемого мн-ка
с учетом уравнения плоскости: A xi  By i  Cz i  Di  0
для каждой точки определяется: z i
xi yi  const
при этом предварительно в z-буфер заносится значение «0» ( z б i = 0)
Далее берется многоугольник и для каждой точки многоугольника определяется:
A
B
D
zi   i xi  i yi  i 
Ci
Ci 
 Ci
Далее z i сравнивается с z б
Если zi  zб , то zбi  zi и этому пикселю присваивается цвет соответствующий
этому многоугольнику
Если zi  zб – не меняем значение
И так в цикле просматриваем все точки всех многоугольников.
При переходе от одной точки к другой выдерживают yi = const и тогда получаем
z меняется на постоянную величину
zi xi 1, y = zi xi 1, y -
Ai
Ci
Ai
Ci
Используется, когда очень много объектов.
24. Алгоритм
выявления
видимости сложной сцены путем
построчного сканирования изображения.
В основе этого алгоритма лежит алгоритм разложения многоугольника в растр:
Этапы:
1. При определенных значениях Yi определяем количество точек пересечение
с элементами многоугольника.
2. Сортировка точек в порядке возрастания или убывания по координате х.
3. Закраска вдоль этой линии по первой точке включается луч, по второй
точке выключается и так далее. Изначально он включен.
Таким образом осуществляется построчная закраска этого многоугольника.
На первом этапе создается таблица ребер ТР куда заносятся все негоризонтальные
ребра, т.е. следующая информация:
y min ; x min ; y max ; tg 
x
,где tg - угол наклона ребра к оси абсцисс (y).
y
и есть ссылка к какому многоугольнику эти ребра относятся (т.е. указатель
отношения к многоугольнику).
ax+by+cz+d=0 – уравнение плоскости.
25. Алгоритм выявления видимости сложной сцены, использующий
принцип деления окна (алгоритм Варнока). Общая структура
алгоритма.
По этому алгоритму задача: не определить виден объект или нет, а что видно в
окошке, если в окошке виден простой элемент, то он отображается.
Окно экрана:
Разбить это окно на 4 окна и для каждого окна решить видно что-нибудь или не
видно и так далее разбивать.
Т.е. если в окне одна простая фигура, то ее отображаем и дальше это окно уже не
надо делить.
1024
1024
Было 1024.
Разделив 10 раз, получим окно 1х1 пикселей.
Дальше делать просто, а если не можем решить, то в нем сложная фигурка и его
надо подсветить нужным цветом (т.е. тем, у кого больше координата Z).
Параметры окна заносятся в стек (и так для каждого окна) если неизвестно что в
окне, иначе отображается.
И так обрабатывается пока в стек не останется ни одного окна.
26. Совокупность тестов, обеспечивающих выявление взаимного
расположения окна и многоугольника.
(1)
(2)
(3)
(4)
(5)
Если использовать четырех битовый код для всех точек для определения типа
многоугольника:
P1 0000 
P2 0000
  0 то это вариант (2)
P3 0000 
............ 
Если одна Pi точка = 0000, а остальные Рj ≠ 0000 то это вариант (1)
Проверка отношения точек окна к точкам Pi Pj
f ij 
k
Если
xk  xi
x j  xi
f ij
k 1
 f ij
wk
yk  yi
>0 или <0
y j  yi
k k
 0 следовательно это (5) или (4) вариант
цикл к=1..к
Если
f ij
k 1
 f ij
k k
 0 следовательно это вариант (3)
цикл к=1..к
Для определения (5) или (4) вариант используют лучевой тест.
Из любой точки внутри окна (или на границе) проводят в сторону многоугольника
луч и смотрят сколько пересечений со сторонами многоугольника.
Если нечетное: n=2m+1 следовательно вариант (4)
Если четное: n=2m следовательно вариант (5)
27. Алгоритмы определения видимости отрезка в прямоугольном
окне (обычный, использующий границы окна, и с использованием 4-х
разрядного битового кода).
Отсечение необходимо, чтобы из обширной базы данных выделить отдельные
элементы для вывода на дисплей или принтер.
Есть 2-х, 3-х мерные операции отсечения.
2-х мерное отсечение – операции отсечения над отрезками.
Есть окно и множество отрезков, для которых нужно определить какая часть
отрезка попадает в окно:
- виден полностью
- виден частично
- не виден полностью
к
Dк
4 н
к В(хВ,yВ)
к
5
к н 2
С
3
н А(хА,yА)
н
1
1 этап: Выявление полностью видимых отрезков или тривиально невидимых в окне
Например:
АВ – невиден (расположен по одну сторону окна)
СД – это не тривиальная невидимость.
2 этап: У оставшихся надо находить
определять видимую часть.
точки пересечения с границами окна, и
3 этап: Вывод на экран
Простейший алгоритм
Yв
Yн
Хл
Хп
В начале известны размеры окна (параметры окна):
Х левое
Х правое
У верхнее
У нижнее
28. Алгоритм выявления видимости части отрезка на основе его
разбиения средней точкой.
Yв
Рн
Рср’
Yн
Хл
Рср
Хп
Рк
Находим среднюю точку
Анализируются полученных два отрезка (Рн-Рср) и (Рср – Рк).
Рср – Рк – невидим, перенесли точку Рк на место Рср.
Оставшийся отрезок делит пополам Рср’.
Рассматриваем отрезок Рн-Рср’ виден
Рн - запомнили; Рср’-Рк – неизвестно
И так дальше его осуществляют пока мы не выйдем на границу окна, либо пока
длина отрезка не станет равной или меньше одного пикселя.
Как только выходим на границу у нас обе точки видны и мы можем вывести
полученный отрезок.
Если длина дошла до 0, а мы о нем ничего не знаем то он попал на
границу и его надо выводить
Рср
Если изначально дает два неопределенных отрезка, то один
запоминаем и работаем с оставшимся, разбиваем его, а потом
возвращаемся к запомненному отрезку и разбиваем его.
29. Алгоритм отсечения отрезка сторонами произвольно
расположенного выпуклого окна (алгоритм Кируса-Бека).
P2
0  t 1
Pi
i
P(t)
P(t)=P1+(P2-P1)t
nBнi
Bн-внутреннее,
P1
nВНi  нормаль к “i”грани
( p(t )  pi )  nВНi  0 (если это так, то можем найти точку пересечения с границей)
Можем найти t.
Можем определить видимую часть отрезка.
Все точки мы можем поделить на две группы:
- Точки входа в окошко
- Точки выхода из окна
(( p1  pi )  ( p2  p1 )  t )  nВНi  0
Можно разделить эти две составляющие и получить “t”
t
( p1  p i )  n ВНi
W

Q
( p2  p1 )  n ВНi
скалярное произведение векторов
в числителе и знаменателе
Если Q>0 , то точка входа
Если Q<0 , то точка выхода
Если Q=0 , то -либо отрезок выражается в точку
-либо отрезок параллелен рассматриваемой стороне окна
p1 p2 // pi 1 pi
Если W<0 , то точка находится вне окна
Если W≥0, то точка P1 находится в окне.
2
3
1
4
0
вне окна
5
в окне
30. Алгоритм последовательного отсечения
многоугольника сторонами выпуклого окна.
Мн-к
произвольного
окно
Мн-к
Если работаем с выпуклым окном, то рассматриваются стороны окна и смотрится:
все что по стороне окна оставляем, а остальную часть отсекаем и так со всеми
сторонами. Так мы можем сформировать всё, что останется в окошке, т.е.
постепенно отсекается то что лежит вне окна.
2 вар
1 вар
p
p
3 вар
4 вар
p
p
Внутри
I окна
I
s
s
Вне окна
s
вне окна
В выходной массив
заносим «0» точек.
Тут мы должны найти
точку пересечения «I»
и занести в выходной
массив, и конечную
точку тоже заносим в
выходной массив.
s
В выходной массив
заносим
только
конечную точку «р» ,
т.к. стартовая уже
должна
быть
определена.
Заносим только точку
“I” в массив.
Далее меняем стартовую и конечную точку местами.
S->P (S – стартовая точка P - конечная)
4
2
1
Рассматриваем эту сторону
и запоминаем точки 1 и 2.
3
31.
Алгоритм
отсечения
произвольных
многоугольников
невыпуклыми окнами (алгоритм Вейлера-Азертона).
w2
p2
w2
p5
w6
w1
p6
w5
p4
w4
i2
i6
p2
i3
p3
w1
p1
i1
p1
w3
i5
i4
w3
p3
Точки пересечения принадлежат и окну и многоугольнику. Для окна и
многоугольника составляются циклические списки.
p1
p2
p3
w1
w2
w3
В эти циклические списки вставляются точки пересечения окно со сторонами мн-ка.
p1
I1
I2
p2
I3
I4
p3
I5
I6
w1
I6
I1
w2
I2
I3
w3
I4
I5
При этом устанавливаются взаимно односложные двунаправленные связи.
Списки составляют так, что контур многоугольника и контур окна описываются по
часовой стрелке.
Ищется любая точка входа в окно для описания списка многоугольника.
32. Алгоритм выявления охватывающего и внешнего многоугольника
по отношению к окну.
(4)
(5)
Если использовать четырех битовый код для всех точек для определения типа
многоугольника:
Для определения (5) или (4) вариант используют лучевой тест.
Из любой точки внутри окна (или на границе) проводят в сторону многоугольника
луч и смотрят сколько пересечений со сторонами многоугольника.
Если нечетное: n=2m+1 следовательно вариант (4)
Если четное: n=2m следовательно вариант (5)
одна
точка
одна
точка
2 точки
или
0 точек
попали на вершину,
т.е. пересечение с
двумя сторонами
Если попадаем на вершину, то в этом случае необходимо сдвинуть луч и
посмотреть результат, либо посмотреть как эти стороны связаны с вершиной, если
первая и вторая сторона лежат по обе стороны от луча, то такая точка считается за
одну точку пересечения, а если лежат по одну сторону от луча, то такая точка
считается за две или ноль точек.
33. Методы выявления факта выпуклости многоугольника и способы
определения внутренних нормалей к его стороне.
1.Определить, что окно выпуклое.
2.Определить нормаль к стороне.
1.Определить, что окно выпуклое.
P2
P3
P1
P4
P0
P6
P5
P(t)=P0+(P1-P0)t
Если в матричное уравнение прямой подставить значения точек P0…P6,
то значение тестовой функции будет одного знака.
Матричное уравнение:
f(xi,yi)=
xi  x0
x1  x0
yi  y0
y1  y0
, i  2…5. - это тестовая функция
Если
в
эту
тестовую
функцию
постепенно
значения P0…P6 , то эта функция будет иметь один знак.
поставить
x  x1 y  y1
 0 - Матричное представление прямой.
x2  x1 y2  y1
-
2
1
+
Все точки, которые лежат на прямой будут давать 0.
Справа от прямой точки будут давать знак “+”. А слева – “-”.
Выпуклость проверяется по всем сторонам, проверять знак долго, легче
сравнить с “0”.
Если f2+fi<0 – окно не выпуклое.
37. Алгоритм удаления невидимых линий, использующий принцип
плавающего горизонта.
Используется когда есть функциональное описание поверхности: f (x,y,z)=0
Делается срез по координате z, т.е. при z=const.
 g ( x, y) z const  0
 м ожем получить y  g1 ( x)
Далее для этих функций должны построить кривые.
Построение начинается от z  z max т.к. оно наиболее близкое к наблюдателю
 имеем y  g1 ( x) z max и эта функция строится.
Иными словами на экране
yi , j
yi , j
х1
z 1
zi
g1 z max
х хj
При следующем срезе z i  z max  z  y i  g1 ( x) zi
строится новая функция
y i , j  g1 ( x j ) zi
если
1. yi , j zi  yi , j zi1 то эта часть видна
2. yi , j zi  yi , j zi1 не видна.
Необходимо для каждого “ x j ” отслеживать “ y ij max ”.
Для проверки (сравнения) видна точка или не видна.
Точки аппроксимируем отрезками, при этом получаем видимую и обратную
сторону поверхности.
38. Общая структура блока просмотра и варианты, обрабатываемые
блоком решения для алгоритма выявления видимости, в котором
используется принцип деления окна.
Блок анализа
m – количество
многоугольников
начало
начальная установка
Zmin=0 т.е. совпадает с плоскостью визуализации
i=1
i>m
да
конец
нет
взять i-ый многоугольник (наиболее дальний) с Zmax=min
проверка на отношение к предшествующему окну (если
оно было, т.е. не первый раз в цикле)
внутри
пересечение пересечение
стороной вершиной
охватывает
окно
*
проверка на отношение к текущему окну
*
да
Zмн-ка> Zокна
min
Zокна =Zмн-ка
нет
?
в окне больше одного
мн-ка и окна надо
делить
конец
вне
окна
i=i+1
39. Алгоритм Вейлера-Азертона выявления видимости граней.
Он базируется на алгоритме Вейлера-Азейтона.
Он позволяет отсекать произвольные многоугольники произвольным окном.
1 этап:
Предварительная сортировка по zmax ↓ всех многоугольников
2 этап:
он связан с отсечением многоугольников на плоскости визуализации
берем самый удаленный многоугольник (т.е. тот который ближе к наблюдателю)
i
и используем его в качестве отсекателя.
z max
При этом формируется два списка многоугольников: внутренний список и
внешний список.
y
1
2
проекции
на XOZ
0
z
x
1
1’
1’’
2
I вариант
II вариант
один многоугольник
пересекает другой
2’
III вариант
2’’
Если на первом этапе: после предварительной сортировки по zmax ↓ всех
многоугольников получился следующий порядок многоугольников: 1, 2, то на
втором этапе:
21
2н(1)
1
2
отсекатель
внутренний
внешний
список
список
12
1
1
1н(2)
21
2н
40. Алгоритм, использующий принцип трассировки лучей.
Н
Экран разбит на пиксели.
Находят точки пересечения луча со всеми объектами сцены (т.е. находят z для
пиксельного элемента) для объектов i, j, k и т.д.
Далее их сортируют по z↑: zi , zk, zj , у того, где z максимум этим цветом и
подкрашивают точку на экране.
Если лучи параллельны, то проходим по всем пикселям и формируем картинку.
75-95% времени алгоритма сводится к определению точек пересечения (т.е. z).
Для ускорения стремятся упростить задачу поиска точке пересечения.
Не ищут точки пересечения, а сначала объект заменяют на сферичискую или
кубовидную оболочку.
Кубовидная:
ymax
ymin
хmin хmax
хороша тем, что четко определены: хmin , хmax , ymin , ymax.
Следовательно зная координаты луч (хi , хi) можем сразу сказать лежит
ли «х» в пределах хmin - хmax и «y» в пределах ymin - ymax или нет.
Если нет, то переходим к рассмотрению следующего объекта.
Сферическая:
(x,y) - центр
если хi , yi: ( xi  xц )
2
2
 ( yi  yц )2  Rоболочки
то попадает в оболочку, тогда имеет смысл искать точки пересечения,
иначе переходим к следующему объекту.
41. Основные составляющие простой модели освещения. Формирование
реалистических изображений
Построение реалистических изображений определяется физическими и
психологическими проблемами. Учесть все это восприятие не всегда возможно
обеспечить.
Чем сложнее изображение – тем сложнее алгоритм и больше времени требуется.
Чаще используются упрощенные модели.
Самая главная составляющая: учет света (интенсивности света).
Свет может:
- поглощаться
- пропускаться
- отражаться
Модель поглощения зависит от того, какой спектр белого света поглощается (если
белый спектр поглощается полностью – то объект черный, а если не полностью – то
цветной).
1.Диффузионная составляющая света.
составляющая поглощения.
используется Ламбертовая модель поглощения, в основе лежит закон косинуса.
точечный
источник
света * Iт
e
нормаль
α kdIт
d
kd – коэффициент поглощения
e – вектор направления к источнику света
Интенсивность поглощающего света излучается во все стороны одинаково.
I d  kd IT cos 
при   0
; cos   1 ; I d  kd IT
В отраженном свете эта поверхность кажется не очень яркой, все остальные
объекты, куда свет не падает, кажутся темными.
Для оживления картинки необходимо учесть источники рассеянного света
падающего на остальные объекты.
42. Способы определения вектора отражения для модели освещения.
n
r
p0 Iт
*
e
d
β
α
*Н
p1
Вектор отражения r :
l и r лежат в одной плоскости.
l определяет просто, т.к. координаты начала и конца мы знаем
- Если один точечный источник, то ось «z» направляем от точки
отражения к точечному источнику, тогда это можно представить в
следующем виде:
y
y
p0
e
α
z
ny
x
α
nx
n
nx n y

rx ry
(*)
rx2  ry2  rz2  1
(*)
nx2  ny2  nz2  1
(*)
cos 2  2 cos 2  1
rz  r cos 2
;
r 1
nz  cos 
rz  2nz2  1
r
ry
r
p1
(*)
rx
x
Скачать