Базовые вычислительные и растровые алгоритмы

Содержание

Слайд 2

Область визуализации 2D Xэmin окно Экранная форма f Xэmax Yэmax Yэmin Ymin Ymax Xmin Xmax

Область визуализации 2D

Xэmin

окно

Экранная форма

f

Xэmax

Yэmax

Yэmin

Ymin

Ymax

Xmin

Xmax

Слайд 3

Пример

Пример

Слайд 4

Функция кадрирования

Функция кадрирования

Слайд 5

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Caption:= 'x='+ IntToStr(x)+' y='+IntToStr(y); end; Координаты курсора

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Caption:= 'x='+ IntToStr(x)+' y='+IntToStr(y);
end;

Координаты

курсора
Слайд 6

procedure TForm1.FormResize(Sender: TObject); begin yemin:= round(Form1.ClientHeight/4); yemax:= round((3*Form1.ClientHeight)/4); xemin:= round (Form1.ClientWidth/4); xemax:= round((3*Form1.ClientWidth)/4); end; Экранные координаты

procedure TForm1.FormResize(Sender: TObject);
begin
yemin:= round(Form1.ClientHeight/4);
yemax:= round((3*Form1.ClientHeight)/4);
xemin:= round (Form1.ClientWidth/4);
xemax:= round((3*Form1.ClientWidth)/4);
end;

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

Слайд 7

function SistCoord(а:vertex):vertex; Var fx,fy:real; i,j,de:integer; Begin fx:=(xemax-xemin)/(xmax-xmin); fy:=(yemax-yemin)/(ymax-ymin); de:=round(sqrt(sqr(Form1.ClientWidth)-sqr(Form1.ClientHeight))); for i:=0

function SistCoord(а:vertex):vertex;
Var fx,fy:real; i,j,de:integer;
Begin
fx:=(xemax-xemin)/(xmax-xmin);
fy:=(yemax-yemin)/(ymax-ymin);
de:=round(sqrt(sqr(Form1.ClientWidth)-sqr(Form1.ClientHeight)));
for i:=0 to 3 do


begin
аe[i,0]:=round(xemin+(fx*(а[i,0]-xmin)));
аe[i,1]:=round(yemax-(fy*(а[i,1]-ymin)));
аe[i,2]:= 1;
end;
form1.Canvas.MoveTo(аe[0,0],аe[0,1]);
form1.Canvas.LineTo(аe[1,0],аe[1,1]);
form1.Canvas.LineTo(аe[2,0],аe[2,1]);
form1.Canvas.LineTo(аe[3,0],аe[3,1]);
form1.Canvas.LineTo(аe[0,0],аe[0,1]);
end;

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

Слайд 8

Преобразование координат f

Преобразование координат

f

Слайд 9

Область визуализации Xэmin Экранная форма f Xэmax Yэmax Yэmin Ymin Ymax Xmin Xmax

Область визуализации

Xэmin

Экранная форма

f

Xэmax

Yэmax

Yэmin

Ymin

Ymax

Xmin

Xmax

Слайд 10

алгоритмы, использующие кодирование концов отрезка или всего отрезка (Коэна-Сазерленда); алгоритмы, использующие

алгоритмы, использующие кодирование концов отрезка или всего отрезка (Коэна-Сазерленда);
алгоритмы, использующие параметрическое

представление отсекаемых отрезков и окна отсечения (Лианга-Барского).

Отсечение

Слайд 11

Алгоритм Коэна-Сазерленда

Алгоритм Коэна-Сазерленда

Слайд 12

Алгоритм Коэна-Сазерленда Две конечные точки отрезка получают 4-х разрядные коды, соответствующие

Алгоритм Коэна-Сазерленда

Две конечные точки отрезка получают 4-х разрядные коды, соответствующие

областям, в которые они попали:
1 рр = 1 - точка над верхним краем окна;
2 рр = 1 - точка под нижним краем окна;
3 рр = 1 - точка справа от правого края окна;
4 рр = 1 - точка слева от левого края окна.
Слайд 13

Битовый код 1 4 3 2

Битовый код
1
4
3
2

Слайд 14

А=0000; B=0000; C=0001; D=0000; Битовый код E=0001; F=0010; G=0101; H=0010; I=1000; J=0010; K=1001; L=0001.

А=0000;
B=0000;
C=0001;
D=0000;

Битовый код

E=0001;
F=0010;
G=0101;
H=0010;

I=1000;
J=0010;
K=1001;
L=0001.

Слайд 15

Пусть X - код точки-начала отрезка, Y - код точки-конца отрезка,

Пусть X - код точки-начала отрезка, Y - код точки-конца отрезка,

тогда возможны три случая:
X = Y = 0000. Этот случай означает, что обе точки лежат внутри прямоугольника (т. е. отсечение не требуется).
X and Y ≠ 0. В этом случае точки лежат по одну сторону от какой-либо отсекающей линии (с внешней ее стороны). Следовательно, отрезок полностью лежит вне окна.
Если не выполнены условия 1 или 2, то необходимо находить точки пересечения с некоторыми из отсекающих прямых. Для этого разбивают отрезок найденными точками пересечения и затем применяют тот же анализ кодов концов для полученных новых отрезков.

Алгоритм Коэна-Сазерленда

Слайд 16

X = Y=0: Отрезок AB (0000)and(0000) Алгоритм Коэна-Сазерленда

X = Y=0:
Отрезок AB (0000)and(0000)

Алгоритм Коэна-Сазерленда

Слайд 17

X and Y≠0: Отрезок KL (1001)and(0001) Алгоритм Коэна-Сазерленда

X and Y≠0:
Отрезок KL (1001)and(0001)

Алгоритм Коэна-Сазерленда

Слайд 18

Алгоритм Коэна-Сазерленда

Алгоритм Коэна-Сазерленда

Слайд 19

Задание Используя алгоритм Коэна-Сазерленда, выявить видимые, невидимые и отсекаемые отрезки АВ,

Задание

Используя алгоритм Коэна-Сазерленда, выявить видимые, невидимые и отсекаемые отрезки АВ,

СD, EF, GH, IJ, KL.
Если известны: А(0000), В(0010), С(0001), D(1001), E (0110), F(0010), G(0000), H(0000), I(1000), J(0010), K(1001), L(1010).
Отобразите расположение отрезков относительно окна отсечения.
Слайд 20

Операции с изображением на уровне растра

Операции с изображением на уровне растра

Слайд 21

Операции с изображением на уровне растра

Операции с изображением на уровне растра

Слайд 22

Точки на плоскости называются непосредственными соседями (4-соседями) если у них отличаются

Точки на плоскости называются непосредственными соседями (4-соседями) если у них отличаются

только x-координаты или только y-координаты, причем только на 1.

Непосредственные соседи

Слайд 23

Косвенные соседи Точки на плоскости называются косвенными соседями (8-соседями) если у

Косвенные соседи

Точки на плоскости называются косвенными соседями (8-соседями) если у них

отличаются x-координаты или y-координаты, но не более чем на 1.
Слайд 24

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

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

Слайд 25

Характеристика «прямых» алгоритмов Работа с вещественными числами. Наличие сложных операций (деление,

Характеристика «прямых» алгоритмов

Работа с вещественными числами.
Наличие сложных операций (деление, умножение, тригонометрические

функции).
Возможно накопление ошибки.
Проблема выбора шага приращения.
Слайд 26

Алгоритм Брезенхема Растрирование Алгоритм обладает следующими достоинствами: целочисленная арифметика; простые операции

Алгоритм Брезенхема

Растрирование

Алгоритм обладает следующими достоинствами:
целочисленная арифметика;
простые операции (сложение сдвиг);
малый объем вычислений;
отсутствие

накопления ошибки

x=0 d<0 y=0

x=1 d<0 y=0

x=2 d<0 y=0

x=3 d<0 y=0

x=4 d>0 y=1 d=d-1

x=5 d<0 y=1

x=6 d<0 y=1

X

Y

d

Δ=уузла – уотрезка
d= Δ – 1/2
d= d + Δy/Δx

– 1/2

Слайд 27

Алгоритм Брезенхема Bresenham(x1,y1,x2,y2,Color: integer); Var dx,dy,incr1,incr2,d,x,y,xend: integer; begin dx:= ABS(x2-x1); dy:=

Алгоритм Брезенхема

Bresenham(x1,y1,x2,y2,Color: integer);
Var dx,dy,incr1,incr2,d,x,y,xend: integer;
begin
dx:= ABS(x2-x1); dy:= Abs(y2-y1);
d:=2*dy-dx;

{начальное значение для d}
incr1:=2*dy; {приращение для d<0}
incr2:=2*(dy-dx); {приращение для d>=0}
if x1>x2 then {начинаем с точки с меньшим знач. x}
begin
x:=x2; y:=y2; xend:=x1;
end
else
begin
x:=x1; y:=y1; xend:=x2;
end;

PutPixel(x,y,Color); {первая точка отрезка}
While x begin
x:=x+1;
if d<0 then
d:=d+incr1 {выбираем нижнюю точку}
else
begin
y:=y+1;
d:=d+incr2; {выбираем верхнюю точку, y-возрастает}
end;
PutPixel(x,y,Color);
end;{while}
end;{procedure}

Слайд 28

Текстура m, n — размеры растра кисти по горизонтали и вертикали

Текстура

m, n — размеры растра кисти по горизонтали и вертикали


Слайд 29

Текстура 2.Стохастическая 1. Упорядоченная

Текстура

2.Стохастическая

1. Упорядоченная