Thuật toán vẽ đoạn thẳng 4.. Thuật toán vẽ đường tròn 5.. Thuật toán vẽ đồ thị hàm số bất kỳ 7.. Thuật toán vẽ đồ thị hàm số bất kỳ 7... Xây dựng thuật toán vẽ đoạn thẳng MidPoint..
Trang 1Trương Văn Quốc Nhật
1
CHƯƠNG 1 CƠ BẢN
Nội dung
2
1 Điểm, đoạn thẳng
2 Hệ màu
3 Thuật toán vẽ đoạn thẳng
4 Thuật toán vẽ đường tròn
5 Thuật toán vẽ elíp
6 Thuật toán vẽ đồ thị hàm số bất kỳ
7 Vẽ trong NET, Bài tập
Trang 2Điểm, đoạn thẳng
3
Hệ màu
4
RGB
CMY, CMYK
HSV, HSB
Trang 3Vẽ đoạn thẳng – DDA
(Digital Dif f erential Analyser)
1
1 i
x
b
ax
y
x a y y y
a
yi
1
1, y
x
A
1
1 i
y
y a x x x
a
xi 1
B1 Tính:
1
2 x x x
2
2, y
x B
'
A
'
B
1
2 y y y y x step max , B2 Khởi tạo:
1
1, y y x
x
step
y dy
step
x dx
Vẽ điểm
B3 for i=1step:
dy y
dx
Vẽ điểm round ( x ), round ( y )
y x,
6
d1
d2
i
y
1
i
y
i
P
Q
M
2
d x
pi
1 2 1
2 y xi y1 x x1 y x yi
1
1 1 2 1 2
2
1
1, y
x A
2
2, y
x B
b x
a
yM i 1
1 2 1 1
2
1
y y
y y x x
x x
x
y x x
y y a
1 2
1 2
x
y x y
b 1 1
,
c xy yx
i i i
i
y
1 2 2
2
d
0
i
y p
0
i
x y p
x y
p1 2
?
?
Trang 41
x
x
1
y
y
x y
2
x x
for
Vẽ điểm x , y
1
y
y
0
p
else
x y
y
{
}
{
}
1
x
dx c
2
x x for
Vẽ điểm x , y
1
y y
0
p
else
2
c p y
{
}
{
}
dy
0
i
p Chọn P, pi 1 pi 2 y
0
i
p Chọn Q, pi 1 pi 2 y 2 x
x y
p1 2
Vẽ đoạn thẳng
ttoán Bresenham
Vẽ đoạn thẳng – ttoán MidPoint
8
i
y
1
i
y
i
P
Q
M
c by ax y
x
>0
<0
1 -2
?
?
Trang 5Nội dung
9
1 Điểm, đoạn thẳng
2 Hệ màu
3 Thuật toán vẽ đoạn thẳng
4 Thuật toán vẽ đường tròn
5 Thuật toán vẽ elíp
6 Thuật toán vẽ đồ thị hàm số bất kỳ
7 Vẽ trong NET, Bài tập
Vẽ đường tròn – ttoán MidPoint
10
(0,R)
(0,-R)
(R,0) (-R,0)
2 2 2 ) ,
f
x O
y
0 ) , ( x y f
0 ) , ( x y f
0 ) , ( x y f
:trên :trong :ngoài
AB
Trang 6Thuật toán MidPoint
11
M
(x, y) (x+1, y)
(x+1, y+1)
P
Q
5 0 ,
1 )
f d
0
d
M … chọn Q
0
d
M ở đâu?
cu moi d
d
d
Mmới
s
12
(x,y) (x+1, y)
(x+1,y+1)
P
Q
Mcũ (x,y) (x+1, y)
(x+1,y+1)
P
Q
2 2 2
) 5 1 ( ) 2
dmoi
2 2 2
) 5 0 ( )
1
dcu
2 2 2
) 5 0 ( ) 2
dmoi
2 2 2
) 5 0 ( ) 1
dcu
cu moi d d
d
3
Trang 7Thuật toán MidPoint
13
5 0 ,
1
d
(0,-R) (1,-R)
(1,-R+1)
x=0; y=-R;
d=1 -R;
R
25 1
while (y<x) {
d+=2*x+3;
} else { //chọn Q
d+=2*(x+y)+5;
y++;
}
x++;
}
.25
14
x O
y
1
2 4
5
8
3
(x,y) (-x,y)
(x,-y) (-x,-y)
(y,x)
(y,-x) (-y,x)
(-y,-x)
Trang 8Bresenham
M
(x, y) (x+1, y)
(x+1, y+1)
P
Q
M ngoài chọn P
0
M
f
M … chọn Q
0
M
f
(x, y) (x+1, y)
(x+1, y+1)
P
Q
MidPoint
d1
d2
M
chọn P
0
2
1 d d
chọn Q
0
2
1 d d
2 2 2 ) , ( x y x y R f
Vẽ elíp
16
b
-b
a -a
C(x0, y0)
1 2
2 2 2
b
y a x
x O
y
AB
CD
1 1
0 2 0 2 2
0 2
0
y a
x b b
yy a
xx
0
0, y
x C
Phương trình chính tắt:
Trang 9Vẽ đồ thị hàm số
17
x
y
O 1
Ý tưởng:
Cho x chạy từ x1đến x2, lấy các tọa độ ( x, f(x) ) sau đó nối lại.
Vẽ trong NET
18
Image
Graphics
Pen Brush
•DrawLine
•DrawCircle
•DrawEllipse
•FillEllipse
Trang 10Bài tập 01
19
1. Bắt buộc:
Tìm hiểu các hệ màu (color model) thông dụng: RGB, CMY(K),
HSV, HSB f ile word
Xây dựng thuật toán vẽ đoạn thẳng (MidPoint)
Xây dựng thuật toán vẽ elíp (Bresenham)
Xây dựng thuật toán vẽ elíp (MidPoint, Bresenham)
Cài đặt các thuật toán vẽ đoạn thẳng, vẽ đường tròn, vẽ elíp
(DDA, MidPoint, Bresenham)mỗi thuật toán vẽ là 1 phương
thức, gộp vào 1 file mã nguồn (đuôi là cs)
2. Không bắt buộc:
Tìm hiểu (+cài đặt)thuật toán vẽ đoạn thẳng, vẽ đường tròn,
vẽ elíp khử răng cưa
Tìm hiểu (+cài đặt)thuật toán vẽ đoạn thẳng, vẽ đường tròn,
vẽ elíp có độ rộng >1 pixel
Vẽ đồ thị hàm số bất kỳ