Tải bản đầy đủ (.pdf) (5 trang)

Bài giảng đồ họa : Các thuật toán vẽ đường part 3 ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (89.6 KB, 5 trang )

ĐỒ HỌA MÁY TÍNH
Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 11/22
T
T
h
h
u
u
a
a
ä
ä
t
t


t
t
o
o
a
a
ù
ù
n
n


M
M
i


i
d
d
P
P
o
o
i
i
n
n
t
t
• Thuật toán MidPoint đưa ra cách chọn
1+i
y

i
y
hay
1
+
i
y
bằng cách so sánh điểm thực Q
(
)
y
x
i

,
1
+
với điểm MidPoint là trung điểm của S và P. Ta có :
♦ Nếu điểm Q nằm dưới điểm MidPoint, ta chọn S.
♦ Nếu điểm Q nằm trên điểm MidPoint ta chọn P.
• Ta có dạng tổng quát của phương trình đường thẳng :
0
=
+
+
C
By
Ax
với
(
)
21121212
,
,
y
x
y
x
C
x
x
B
y
y

A
−=−−=−=
• Đặt
(
)
C
By
Ax
y
x
F
+
+
=
,
, ta có nhận xét :
( )
(
)
( )
( )





>
=
<
thẳng. đường dưới phía nằm yx, nếu,0

thẳng đường vềthuộc yx, nếu,0
thẳng đường trên phía nằm yx, nếu,0
, yxF
Q(x
i
+1, y)
P
S
x
i
x
i
+1
y
i
y
i
+1
MidPoint
ĐỒ HỌA MÁY TÍNH
Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 12/22
• Lúc này việc chọn các điểm S, P ở trên được đưa về
việc xét dấu của
( )







++==
2
1
,12MidPoint2
iii
yxFFp
.
♦ Nếu
0
<
i
p
, điểm MidPoint nằm phía trên đoạn thẳng.
Lúc này điểm thực Q nằm dưới điểm MidPoint nên ta
chọn S, tức là
ii
y
y
=
+1
.
♦ Ngược lại, nếu
0

i
p
, điểm MidPoint nằm phía dưới
đoạn thẳng. Lúc này điểm thực Q nằm trên điểm
MidPoint nên ta chọn P, tức là
1

1
+
=
+ ii
y
y
.
• Mặt khác :






++−






++=−
+++
2
1
,12
2
1
,12
111 iiiiii

yxFyxFpp
( ) ( )






+






+++−






+






+++=−⇔

+++
CyBxACyBxApp
iiiiii
2
1
12
2
1
12
111
(
)
(
)
iiiiii
y
y
Dx
Dy
y
y
B
A
p
p


=

+

=


+++ 111
2
2
2
2
• Như vậy :

Dy
p
p
ii
2
1
+
=
+
, nếu
0
<
i
p
do ta chọn
ii
y
y
=
+1

.

Dx
Dy
p
p
ii
2
2
1
−+=
+
, nếu
0

i
p
do ta chọn
1
1
+=
+ ii
y
y
.
• Ta tính giá trò
0
p

ứng với điểm ban đầu

(
)
00
,
y
x
, với
nhận xét rằng
(
)
00
,
y
x
là điểm thuộc về đoạn thẳng,
tức là có :
0
00
=++
C
By
Ax
( )






+







+++=






++= CyBxAyxFp
2
1
12
2
1
,12
00000
(
)
Dx
Dy
B
A
B
A
C

By
Ax
p
−=+=++++=⇒
2
2
2
2
000
ĐỒ HỌA MÁY TÍNH
Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 13/22
C
C
a
a
â
â
u
u


h
h
o
o
û
û
i
i



k
k
i
i
e
e
å
å
m
m


t
t
r
r
a
a
• Xét thuật toán Bresenham, với cách đặt d
1
và d
2
như
trên, có khi nào d
1
hay d
2
âm hay không ? Cho ví dụ
minh họa.

• Tại sao phải so sánh giá trò p
i
với 0 trong các thuật
toán MidPoint và Bresenham, bản chất của việc so
sánh này là gì ?
• Tại sao phải nhân F(MidPoint) với 2 khi gán cho p
i
theo công thức p
i
=2*F(MidPoint) ?
ĐỒ HỌA MÁY TÍNH
Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 14/22
• Cài đặt thuật toán cho trường hợp 0 ≤ m ≤ 1, Dx<0.
Ta sử dụng thuật toán với trường hợp 0 ≤ m ≤ 1,
Dx>0 đã cài đặt cộng thêm một số thay đổi sau :
♦ Thay biểu thức x=x+1 bằng x=x-1 và y=y+1 bằng y=y-1 vì
trong trường hợp này x và y đều giảm dần.
♦ Nhận xét rằng khi p<0 ta gán p=p+Const1, như vậy để
hướng đến sự cân bằng Const1 phải là một giá trò dương.
Tương tự như vậy, khi p≥0 ta gán p=p+Const2, Const2
phải là giá trò âm.
♦ Từ nhận xét trên, trong các công thức ta sẽ thay Dx
bằng abs(Dx), Dy bằng abs(Dy).
• Mở rộng thuật toán trên để vẽ đoạn thẳng trong
trường hợp m bất kì.
♦ Trường hợp đặc biệt m=∞ : Đoạn thẳng song song trục
tung nên rất đơn giản khi vẽ.
♦ Trường hợp –1 ≤ m ≤ 1 : Sử dụng các công thức của thuật
toán vẽ trong trường hợp 0≤ m ≤ 1, Dx>0 và thay đổi một
số điểm sau :

v Nếu Dx<0 thì bước nhảy của x sẽ thay bằng –1.
Tương tự nếu Dy<0, bước nhảy của y cũng sẽ là –1.
v Thay Dx bằng abs(Dx), Dy=abs(Dy) trong tất cả các
công thức có chứa Dx, Dy.
♦ Trường hợp m ≤ -1 hay m ≥ 1 :
v Thay đổi vai trò của x và y, nghóa là thay x bằng y, y
bằng x, Dx bằng Dy, Dy bằng Dx trong tất cả các
công thức.
v Thực hiện nguyên tắc về bước nhảy, thay đổi công
thức Dx, Dy như trong trường hợp –1 ≤ m ≤ 1
ĐỒ HỌA MÁY TÍNH
Dương Anh Đức, Lê Đình Duy Các thuật toán vẽ đường 15/22
V
V
e
e
õ
õ


đ
đ
ư
ư
ơ
ơ
ø
ø
n
n

g
g


t
t
r
r
o
o
ø
ø
n
n


b
b
a
a
è
è
n
n
g
g


t
t

h
h
u
u
a
a
ä
ä
t
t


t
t
o
o
a
a
ù
ù
n
n


M
M
i
i
d
d

P
P
o
o
i
i
n
n
t
t
• Do tính đối xứng của đường tròn (C) nên ta chỉ cần
vẽ cung (C
1/8
) là cung 1/8 đường tròn, sau đó lấy đối
xứng. Cung (C
1/8
) được mô tả như sau (cung của phần
tô xám trong hình vẽ) :







≤≤
≤≤
RyR
Rx
2

2
2
2
0
• Như vậy nếu có (x, y) ∈ (C
1/8
) thì các điểm : (y, x), (y,-
x), (x,-y), (-x,-y), (-y,-x), (-y,x), (-x,y) sẽ thuộc (C).
2
R
(x,y)(-x,y)
(y,x)
(-y,x)
(x,-y)(-x,-y)
(-y,-x) (y,-x)

×