ВУЗ:
Составители:
Основы компьютерной графики для программистов 37
____________________________________________________________________________________________________________________
http://www.ksu.ru/persons/9134.ru.html
отрезков прямых было найдено Брезенхемом. В его алгоритме вообще не используются
операции с вещественными числами, в том числе операции умножения и деления.
Для вывода формул алгоритма Брезенхема рассмотрим рис. 30.
Пусть начало отрезка имеет координаты
(
)
1,1 yx , а конец
()
2,2 yx . Обозначим
()
12 xxdx −= ,
()
12 yydy −= . Не нарушая общности, будем считать, что начало
отрезка совпадает с началом координат, и прямая имеет вид
x
dy
dx
y =
, где
[]
1,0∈
dy
dx
.
Считаем что начальная точка находится слева. Пусть на
(
)
1
−
i -м шаге текущей точкой
отрезка является
()
qrP
i
,
1
=
−
. Выбор следующей точки
i
S
или
i
T
зависит от знака
разности
()
ts − . Если
()
0
<
− ts , то
(
)
qrTP
ii
,1
+
=
=
и тогда 1
1
+
=
+ ii
xx ,
ii
yy =
+1
, если же
()
0≥− ts , то
(
)
1,1
+
+
=
=
qrSP
ii
и тогда 1
1
+
=
+ ii
xx ,
1
1
+=
+ ii
yy .
()
qr
dx
dy
s −+= 1
,
()
11 +−+= r
dx
dy
qt
,⇒
()
1212 −−+=− qr
dx
dy
ts
⇒
()
(
)
dxdydxqdyrtsdx
−
+
⋅
−
⋅
=
−
22 .
Поскольку знак
()
tsdx − совпадает со знаком разности
(
)
ts
−
, то будем проверять
знак выражения
()
tsdxd
i
−
= . Так как
1−
=
i
xr и
1−
=
i
yq , то
()
11
22
−+
−
−
+=
iiii
yydxdydd .
Пусть на предыдущем шаге
0
<
i
d , тогда
(
)
0
1
=
−
−ii
yy и dydd
ii
2
1
+=
+
. Если же
на предыдущем шаге
0≥
i
d , то
(
)
1
1
=
−
−ii
yy и
(
)
dxdydd
ii
−
+
=
+
2
1
.
Осталось узнать, как вычислить
1
d . Так как при 1
=
i :
()
(
)
0,0,
00
=
yx , dxdyd
−
=
⇒ 2
1
.
Рис. 30. Рисование отрезков прямых по методу Брезенхема.
Основы компьютерной графики для программистов 37 ____________________________________________________________________________________________________________________ отрезков прямых было найдено Брезенхемом. В его алгоритме вообще не используются операции с вещественными числами, в том числе операции умножения и деления. Для вывода формул алгоритма Брезенхема рассмотрим рис. 30. Рис. 30. Рисование отрезков прямых по методу Брезенхема. Пусть начало отрезка имеет координаты (x1, y1) , а конец (x2, y 2 ) . Обозначим dx = ( x 2 − x1) , dy = ( y 2 − y1) . Не нарушая общности, будем считать, что начало dx dx отрезка совпадает с началом координат, и прямая имеет вид y = x , где ∈ [0,1]. dy dy Считаем что начальная точка находится слева. Пусть на (i − 1) -м шаге текущей точкой отрезка является Pi −1 = (r , q ) . Выбор следующей точки S i или Ti зависит от знака разности (s − t ) . Если (s − t ) < 0 , то Pi = Ti = (r + 1, q ) и тогда x i +1 = x i + 1, y i +1 = y i , если же (s − t ) ≥ 0 , то Pi = S i = (r + 1, q + 1) и тогда xi +1 = xi + 1 , y i +1 = y i + 1 . dy s= (r + 1) − q , t = q + 1 − dy (r + 1) , ⇒ dx dx dy s−t =2 (r + 1) − 2q − 1 ⇒ dx dx(s − t ) = 2(r ⋅ dy − q ⋅ dx ) + 2dy − dx . Поскольку знак dx(s − t ) совпадает со знаком разности (s − t ) , то будем проверять знак выражения d i = dx(s − t ) . Так как r = x i −1 и q = y i −1 , то d i +1 = d i + 2dy − 2dx( y i − y i −1 ) . Пусть на предыдущем шаге d i < 0 , тогда ( y i − y i −1 ) = 0 и d i +1 = d i + 2dy . Если же на предыдущем шаге d i ≥ 0 , то ( y i − y i −1 ) = 1 и d i +1 = d i + 2(dy − dx ) . Осталось узнать, как вычислить d1 . Так как при i = 1 : (x0 , y 0 ) = (0,0 ), ⇒ d1 = 2dy − dx . http://www.ksu.ru/persons/9134.ru.html
Страницы
- « первая
- ‹ предыдущая
- …
- 35
- 36
- 37
- 38
- 39
- …
- следующая ›
- последняя »