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

Chương 2: Các thuật toán đồ họa cơ sở-Ths.Vũ Minh Yến 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 (218.01 KB, 56 trang )

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


+

×