Chương
Chương
2
2
C
C
á
á
c thu
c thu
ậ
ậ
t to
t to
á
á
n đ
n đ
ồ
ồ
ho
ho
ạ
ạ
c
c
ơ s
ơ s
ở
ở
Giảng viên: Ths.Vũ Minh Yến
Tổ HTTT- Khoa CNTT
N
N
ộ
ộ
i dung
i dung
2.1. C
2.1. C
á
á
c thu
c thu
ậ
ậ
t to
t to
á
á
n v
n v
ẽ
ẽ
đo
đo
ạ
ạ
n th
n th
ẳ
ẳ
ng
ng
2.2. C
2.2. C
á
á
c thu
c thu
ậ
ậ
t to
t to
á
á
n v
n v
ẽ
ẽ
đư
đư
ờ
ờ
ng tròn
ng tròn
2.3. C
2.3. C
á
á
c thu
c thu
ậ
ậ
t to
t to
á
á
n v
n v
ẽ
ẽ
elip
elip
2.4. C
2.4. C
á
á
c thu
c thu
ậ
ậ
t to
t to
á
á
n clipping
n clipping
2.5. C
2.5. C
á
á
c thu
c thu
ậ
ậ
t to
t to
á
á
n tô m
n tô m
à
à
u
u
2.1. C
2.1. C
á
á
c thu
c thu
ậ
ậ
t to
t to
á
á
n v
n v
ẽ
ẽ
đo
đo
ạ
ạ
n th
n th
ẳ
ẳ
ng
ng
Bài toán:
Input: Cho đoạn thẳng AB: A(x
A
; y
A
), B(x
B
; y
B
).
Output: Vẽ đoạn thẳng AB trên màn hình.
Giải quyết bài toán
Thuật toán làm tròn số
Thuật toán Bresenham
Thu
Thu
ậ
ậ
t to
t to
á
á
n l
n l
à
à
m tròn s
m tròn s
ố
ố
Phương trình đường thẳng AB (x
A
≠ x
B
):
Đặt
Khi đó phương trình đường thẳng AB:
AA
AB
AB
yxx
xx
yy
y +−
−
−
= )(
AB
AB
xx
yy
m
−
−
=
(
)
AA
yxxmy
+
−
=
Thu
Thu
ậ
ậ
t to
t to
á
á
n l
n l
à
à
m tròn s
m tròn s
ố
ố
Chia thành 4 trường hợp:
TH1: AB song song với Oy
TH2: AB song song với Ox
TH3: |m|≤1
TH4: |m|>1
m=1
m=
-
1
(1)
y
O
x
(4)
(3)
(3)
(2)
(4)
Thu
Thu
ậ
ậ
t to
t to
á
á
n l
n l
à
à
m tròn s
m tròn s
ố
ố
TH1: x
A
=x
B
(giả sử y
A
< y
B
)
Bước 1: x=x
A
; y=y
A
;
Bước 2: Vẽ điểm (x; y);
Bước 3: y=y+1;
Bước 4: Nếu y<=y
B
thì: Bước 2;
Bước 5: Kết thúc.
A
y
O
x
B
x
A
=x
B
y
A
y
B
Thu
Thu
ậ
ậ
t to
t to
á
á
n l
n l
à
à
m tròn s
m tròn s
ố
ố
TH2
TH2: y
A
=y
B
(Tương tự TH1)
(Giả sử x
A
< x
B
)
Bước 1: x=x
A
; y=y
A
;
Bước 2: Vẽ điểm (x; y);
Bước 3: x=x+1;
Bước 4: Nếu x<=xB thì: Bước 2;
Bước 5: Kết thúc.
A
y
O
B
x
A
y
A
=y
B
x
B
Thu
Thu
ậ
ậ
t to
t to
á
á
n l
n l
à
à
m tròn s
m tròn s
ố
ố
TH3
TH3: |m| ≤ 1
Bước 1: Nếu x
A
> x
B
thì: Hoán
đổi vị trí A,B
(Đảm bảo x
A
< x
B
)
Bước 2: x=x
A
; y=y
A
;
Bước 3: Vẽ điểm (x; y);
Bước 4: x=x+1;
y=Round(m(x-x
A
)+y
A
);
Bước 5: Nếu x≤ x
B
thì: Bước 3;
Bước 6: Kết thúc;
m=1
m=
-
1
y
O
x
A
B
x
A
x
B
Thu
Thu
ậ
ậ
t to
t to
á
á
n l
n l
à
à
m tròn s
m tròn s
ố
ố
TH4
TH4: |m| > 1 tương tự TH3
khi đổi vai trò x, y.
Bước 1: Nếu y
A
> y
B
thì: Hoán
đổi vị trí A,B
(Đảm bảo y
A
< y
B
)
Bước 2: x=x
A
; y=y
A
;
Bước 3: Vẽ điểm (x; y);
Bước 4: y=y+1;
x=Round(1/m(y-y
A
)+x
A
);
Bước 5: Nếu y≤ y
B
thì: Bước 2;
Bước 6: Kết thúc;
m=1
m=
-
1
y
O
x
A
B
y
A
y
B
Thu
Thu
ậ
ậ
t to
t to
á
á
n Breseham
n Breseham
TH1 x
A
=x
B
, TH2: y
A
=y
B
:
giống phương pháp
làm tròn số.
Còn lại: chia làm 4
trường hợp
TH3: 0 < m ≤ 1
TH4: -1 ≤ m <0
TH5: m > 1
TH6: m < -1
m=1
(3)
(4)
(5)
(6)
O
x
y
Thu
Thu
ậ
ậ
t to
t to
á
á
n Breseham
n Breseham
TH3
TH3:
0 < m
0 < m
≤
≤≤
≤
≤
≤≤
≤
1
1
y
x
O(0,0)
d
1
d
2
y
i
y
y
i+1
i+1
= ?
= ?
x
i
x
i+1
=x
i
+1
Thu
Thu
ậ
ậ
t to
t to
á
á
n Breseham
n Breseham
Cơ s
Cơ s
ở
ở
to
to
á
á
n h
n h
ọ
ọ
c xây d
c xây d
ự
ự
ng thu
ng thu
ậ
ậ
t to
t to
á
á
n:
n:
Giả sử ta có điểm thứ i: (x
i
; y
i
)
Xác định điểm thứ i+1: (x
i+1
; y
i+1
)=?
Ta c
Ta c
ó
ó: 0< m ≤ 1
⇒ Nếu ∆x=1⇒ ∆y≤1, trong đó ∆x=x
i+1
-x
i
; ∆y=y
i+1
-y
i
Như vậy:
x
i+1
= x
i
+1
y
i+1
= y
i
nếu d1 ≤ d2
y
i+1
= y
i
+1 nếu d1>d2
α
αα
α ≤
≤≤
≤ 45
0
Thu
Thu
ậ
ậ
t to
t to
á
á
n Breseham
n Breseham
Xét d1= y(x
i+1
) - y
i
⇔ d1=m(x
i+1
-x
A
)+y
A
-y
i
=m(x
i
+1-x
A
)+y
A
-y
i
=
mx
mx
i
i
-
-
y
y
i
i
+m(1
+m(1
-
-
x
x
A
A
)+y
)+y
A
A
Xét d2= y
i
+1 - y(x
i+1
)
= y
i
+1- m(x
i+1
-x
A
)-y
A
=
=
-
-
mx
mx
i
i
+y
+y
i
i
-
-
m(1
m(1
-
-
x
x
A
A
)
)
-
-
y
y
A
A
+1
+1
Xét P
i
=dx(d1-d2)
= dx(2mx
i
-2y
i
+2m(1-x
A
)+2y
A
-1)
= 2dy.x
i
-2dx.y
i
+ 2dy(1-x
A
)+2dx.y
A
-dx
Thu
Thu
ậ
ậ
t to
t to
á
á
n Breseham
n Breseham
Tương tự ta có
P
i+1
= 2dy.x
i+1
-2dx.y
i+1
+ 2dy(1-x
A
)+2dy.y
A
-dx
Xét ∆P=P
i+1
-P
i
=2dy(x
i+1
-x
i
) – 2dx(y
i+1
-y
i
)
=2dy-2dx(y
i+1
-y
i
)
Giả sử P
i
≥0
⇔ d1-d2
≥
0 ⇔ d1
≥
d2 ⇔ y
i+1
=y
i
+1
⇒
∆
∆∆
∆
∆
∆∆
∆
P=2dy
P=2dy
-
-
2dx=const1
2dx=const1
Giả sử P
i
<0
⇔ d1-d2<0 ⇔ d1<d2 ⇔ y
i+1
=y
i
⇒
∆
∆∆
∆
∆
∆∆
∆
P=2dy=const2
P=2dy=const2
Thu
Thu
ậ
ậ
t to
t to
á
á
n Breseham
n Breseham
Xét P
1
= 2dy.x
1
-2dx.y
1
+ 2dy(1-x
A
)+2dx.y
A
-dx
= 2dy.x
A
-2dx.y
A
+2dy-2dy.x
A
+2dx.y
A
-dx
=
2dy
2dy
-
-
dx
dx=const
Thu
Thu
ậ
ậ
t to
t to
á
á
n Bresenham
n Bresenham
Thu
Thu
ậ
ậ
t to
t to
á
á
n:
n:
Bước 1: Nếu x
A
>x
B
thì: Hoán đổi A, B
Bước 2: dx=x
B
-x
A
; dy=y
B
-y
A
;
const1=2dy-2dx; const2=2dy;
p=2dy-dx; x=x
A
; y=y
A
;
Bước 3: Vẽ điểm (x,y)
Bước 4: x=x+1;
Bước 5: Nếu p>0 thì: y=y+1; p=p+const1;
còn lại: p=p+const2;
Bước 6: Nếu x ≤ x
B
thì: Bước 3;
Bước 7: Kết thúc
Thu
Thu
ậ
ậ
t to
t to
á
á
n Breseham
n Breseham
TH4:
TH4:
-
-
1
1
≤
≤≤
≤
≤
≤≤
≤
m <0
m <0
Sinh viên tự xây dựng
thuật toán tương tự TH3:
const1=2dy+2dx;
const2=2dy; p1=2dy+dx;
Nếu p>0 thì: p=p+const2;
Còn lại: y=y-1; p=p+const1;
Thu
Thu
ậ
ậ
t to
t to
á
á
n Breseham
n Breseham
TH5: m
TH5: m
> 1
> 1
Đổi vai trò x, y cho nhau
ta có TH3.
TH6: m <
TH6: m <
-
-
1
1
Đổi vai trò x, y cho nhau
ta có TH4.
(5) (6)
y
O
x
2.2. C
2.2. C
á
á
c thu
c thu
ậ
ậ
t to
t to
á
á
n v
n v
ẽ
ẽ
đ
đ
ư
ư
ờ
ờ
ng tròn
ng tròn
Xét đường tròn tâm O(0;0),
bán kính r.
Phương trình đại số:
x
2
+y
2
=r
2
Phương trình lượng giác:
Với
Xét đường tròn tâm A(x
A
; y
A
),
bán kính r:
(A;r) là ảnh của (O;r) qua phép
tịnh tiến
Ta có:
=
=
α
α
sin
cos
ry
rx
[
]
π
α
2;0
∈
O x
y
x
y
M
α
r
OA
+=
+=
A
A
yyy
xxx
1
1
x
y
O
A
M(x;y)
M
1
(x
1
;y
1
)
x
A
y
A
2.2. C
2.2. C
á
á
c thu
c thu
ậ
ậ
t to
t to
á
á
n v
n v
ẽ
ẽ
đ
đ
ư
ư
ờ
ờ
ng tròn
ng tròn
Tính chất đối xứng:
Xét điểm M
1
(x,y)∈(O;r) , khi đó:
M2(y,x)
M3(y,-x)
M4(x,-y)
M5(-x,-y)
M6(-y,-x)
M7(-y,x)
M8(-x,y)
M
1
M
2
M
3
M
4
M
5
M
6
M
7
M
8
O
y
x
2.2. C
2.2. C
á
á
c thu
c thu
ậ
ậ
t to
t to
á
á
n v
n v
ẽ
ẽ
đ
đ
ư
ư
ờ
ờ
ng tròn
ng tròn
B
B
à
à
i to
i to
á
á
n:
n:
Input: Cho tâm O(0,0), bán kính r
Output: Vẽ đường tròn tâm O, bán kính r.
Gi
Gi
ả
ả
i quy
i quy
ế
ế
t b
t b
à
à
i to
i to
á
á
n:
n:
Thuật toán làm tròn số
Thuật toán xấp xỉ
Thuật toán Bresenham
Thu
Thu
ậ
ậ
t to
t to
á
á
n l
n l
à
à
m tròn s
m tròn s
ố
ố
Theo phương tr
Theo phương tr
ì
ì
nh đ
nh đ
ạ
ạ
i s
i s
ố
ố
:
:
Cung AB:
Xét trên cung AB: nếu ∆x=1 thì
|∆y|≤1 nên lấy cơ sở theo x
Thu
Thu
ậ
ậ
t to
t to
á
á
n:
n:
Bước 1: x=0; y=r;
Bước 2: Vẽ 8 điểm:
M
1
(x,y), M
2
(y;x),M
3
(y;-x), M
4
(x;-y),
M
5
(-x;-y), M
6
(-y;-x), M
7
(-y;x), M
8
(-x;y)
Bước 3: x=x+1; y= round( )
Bước 4: Nếu x ≤ y thì: Bước 2;
Bước 5: Kết thúc.
B
O
y
x
A
[
]
2/;0,
22
rxxry ∈−=
22
xr −
Thu
Thu
ậ
ậ
t to
t to
á
á
n l
n l
à
à
m tròn s
m tròn s
ố
ố
Theo phương tr
Theo phương tr
ì
ì
nh lư
nh lư
ợ
ợ
ng gi
ng gi
á
á
c
c:
Bước 1: alpha=0; step=1/r;
x=r; y=0;
Bước 2: Vẽ tám điểm:
Bước 3: alpha=alpha+step;
x=r.cos(alpha); y=r.sin(alpha);
Bước 4: Nếu x>=y: Bước 2;
Bước 5: Kết thúc.
O x
y
x
y
M
α
r
Thu
Thu
ậ
ậ
t to
t to
á
á
n x
n x
ấ
ấ
p x
p x
ỉ
ỉ
Ta có phương trình (O;r):
Xét đạo hàm theo đối số α:
=
=
α
α
sin
cos
ry
rx
[
]
π
α
2;0
∈
==
−=−=
xry
yrx
α
α
cos'
sin'
Thu
Thu
ậ
ậ
t to
t to
á
á
n x
n x
ấ
ấ
p x
p x
ỉ
ỉ
Xét đạo hàm tại điểm thứ i:
⇔
Xét đạo hàm tại điểm thứ i+1:
⇔
Thu
Thu
ậ
ậ
t to
t to
á
á
n:
n:
B
ướ
c 1: stepα=1/r;
x=r; y=0;
B
ướ
c 2: V
ẽ
8
đ
i
ể
m
B
ướ
c 3: x=x-y.stepα;
y=x.stepα + y;
B
ướ
c 4:
N
ế
u x≥y thì: B
ướ
c 2;
B
ướ
c 5: K
ế
t thúc;
1
1
1
1
0
'
1
lim
+
+
+
+
→
+
≈
−
≈
−
−
=
−
i
ii
ii
ii
step
i
x
step
yy
yy
y
α
αα
α
iii
ystepxy +≈
++
α
.
11
i
ii
ii
ii
step
i
y
step
xx
xx
x
−≈
−
≈
−
−
=
+
+
+
→
+
α
αα
α
1
1
1
0
'
lim
α
stepyxx
iii
.
1
−
≈
+