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

Tài liệu Chương 1_ Cơ sở đồ họa (ky thuat do hoa) pdf

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 (2.9 MB, 56 trang )


Chương 1
CÁC GiẢI THUẬT SINH THỰC THỂ
CƠ SỞ
Giảng viên: Nguyễn Viết Cường
NỘI DUNG

Các đối tượng đồ họa cơ sở

Hệ tọa độ thực và hệ tọa độ thiết bị

Điểm và đoạn thẳng

Các giải thuật xây dựng các thực thể cơ sở

Giải thuật vẽ đường thẳng thông thường

Thuật toán DDA (Digital Differential Analizer)

Giải thuật Bresenham

Giải thuật trung điểm-Midpoint

Giải thuật sinh đường tròn

Giải thuật sinh đường tròn Midpoint

Giải thuật sinh đường ellipse

Giải thuật sinh ký tự


Giải thuật sinh đa giác (Polygon)
HỆ TỌA ĐỘ THẾ GiỚI THỰC VÀ THIẾT BỊ

Hệ toạ độ thế giới thực (WCS: World Coordinate
System)
Hệ toạ độ được dùng mô tả các đối tượng trong thế
giới thực. Một trong hệ toạ độ thực được dùng nhiều nhất
là hệ toạ độ Descartes. Bất kì điểm nào trong mặt phẳng
được mô tả bằng cặp toạ độ (x,y) trong đó x,y∈ R. Gốc toạ
độ là điểm O có toạ độ (0,0), Ox,Oy lần lượt là trục hoành
và trục tung và x,y là hoành độ và tung độ.
Các toạ độ thế giới thực cho phép người sử dụng bất kì
một thứ nguyên (dimension) qui ước: foot, cm, nm, km,
inch....tuỳ ý.
HỆ TỌA ĐỘ THẾ GiỚI THỰC VÀ THIẾT BỊ

Hệ toạ độ thiết bị (DCS: Device Coordinate
System)
Hệ toạ độ thiết bị là hệ toạ độ được dùng bởi một thiết
bị xuất cụ thể nào đó như máy in, màn hình...
Các điểm được biểu diễn bởi cặp toạ độ (x,y), nhưng
x,y ∈ N. Điểm trong toạ độ thực được định nghĩa liên tục,
còn trong toạ độ thiết bị thì rời rạc do tính chất của tập các
số tự nhiên. Các toạ độ (x,y) có giới hạn trong một khoảng
nào đó.
HCMUS - 2009
HCMUS - 2009
Bài giảng Đồ họa máy tính – Đặng Nguyễn Đức Tiến - Vũ Quốc Hoàng - Lê Phong
Bài giảng Đồ họa máy tính – Đặng Nguyễn Đức Tiến - Vũ Quốc Hoàng - Lê Phong
5

5
P
wc
(x, y)
P
wc
(x, y)
x
max
y
max
x
y
O O
HỆ TỌA ĐỘ THẾ GiỚI THỰC VÀ THIẾT BỊ
HCMUS - 2009
HCMUS - 2009
Bài giảng Đồ họa máy tính – Đặng Nguyễn Đức Tiến - Vũ Quốc Hoàng - Lê Phong
Bài giảng Đồ họa máy tính – Đặng Nguyễn Đức Tiến - Vũ Quốc Hoàng - Lê Phong
6
6
x
y
O
c
r
O
Quy ước bàn tay phải
Quy ước bàn tay trái
HỆ TỌA ĐỘ THẾ GiỚI THỰC VÀ THIẾT BỊ

HỆ TỌA ĐỘ THẾ GiỚI THỰC VÀ THIẾT BỊ
12/15/13 8
Mµn h×nh ®å ho¹ trong Turbo C

O(0,0)
x x
getmaxxx()
y
getmaxy()

y
P(x,y)
ĐIỂM VÀ ĐOẠN THẲNG

Điểm

Trong hệ toạ độ hai chiều (x,y), ngoài ra nó còn có tính chất màu
sắc.

Đoạn thẳng
+ Biểu diễn tường minh: y = f(x)

Một đoạn thẳng được xác định nếu biết 2 điểm thuộc nó. Phương
trình đoạn thẳng đi qua 2 điểm P (x
1
,y
1
) và Q(x
2
,y

2
) như sau:
(y-y
1
)/( x-x
1
) = ( y
2
-y
1
)/( x
2
-x
1
)
 (y-y
1
)(x
2
-x
1
)=(x-x
1
)(y
2
-y
1
)
 (x
2

-x
1
)y=(y
2
-y
1
)x + y
1
(x
2
-x
1
) - x
1
(y
2
-y
1
)
 y = ((y
2
-y
1
)/(x
2
-x
1
))x + y
1
- ((y

2
-y
1
)/(x
2
-x
1
))x
1
 y = mx + b
Trong đó: m = (y
2
-y
1
)/(x
2
-x
1
) độ dốc hay hệ số góc của đường b =
y
1
- kx
1
Đoạn chắn trên trục y
∆y = m ∆ x (tức là khi x thay đổi thì y thay đổi theo)
ĐIỂM VÀ ĐOẠN THẲNG
+ Biểu diễn không tường minh: ax+by+c=0

Ta có
(y2-y1)x - (x2-x1)y + (x2-x1)y1 - (y2-y1)x1 = 0

 (y2-y1)x - (x2-x1)y + x2y1 - x1y2 = 0
hay rx + sy + t = 0
 s = -(x2-x1 )
 r = (y2-y1) và t = x2y1 - x1y2
+ Biểu diễn thông qua tham số:

x(u) = (1- u )x1 + u x2

y (u)= (1- u )y1 + u y2
GIẢI THUẬT VẼ ĐOẠN THẲNG THÔNG THƯỜNG

Nguyên lý chung: cho một thành phần toạ độ x hay y biến
đổi theo từng đơn vị và tính độ nguyên còn lại sao cho
gần với toạ độ thực nhất.
Ta có
11
12
12
y)x(x
xx
yy
y −−


=

Cho x thay đổi tìm y, trong bài này cho x
1
thay đổi tiến
tới x

2
ta chọn đơn vị nhỏ nhất của màn hình ∆x=1.
GIẢI THUẬT VẼ ĐOẠN THẲNG THÔNG THƯỜNG

Lưu đồ giải thuật:
Input: x
1
, x
2
,
y
1
, y
2
, color
x =x
1,
y = y
1
x < x
2

y = y + (x-x
1
)*(y
2
-y
1
)/(x
2

-x
1
)
putpixel(x, round(y), color )
x++
K t thúcế
B t đ uắ ầ
Yes
No
THUẬT TOÁN DDA (Digital Differential Analizer)

Xét phương trình y=mx+b

m=∆y/∆x, b = y
1
- kx
1


Giả sử 0<m<=1, ∆x>0
Nhận xét :
x
i+1
= x
i
+1
y
i+1
∈{y
i

, y
i
+1}
THUẬT TOÁN DDA (Digital Differential Analizer)

Việc quyết định chọn y
i+1
là y
i
hay y
i
+1 dựa vào
đường thẳng y=mx+b

Tính toạ độ điểm (x
i
+1,y) thuộc về đoạn thẳng
thực, tiếp đó y
i+1
sẽ trị sau khi làm tròn tung độ y
y=m(x
i
+1)+b=y
i
+m
y
i+1
= round(y)
THUẬT TOÁN DDA (Digital Differential Analizer)


Lưu đồ thuật toán
x = x
1
, y = y
1
m=(y
2
-y
1
)/(x
2
-x
1
)
putpixel(x,round(y),c)
x<x
2
x=x+1; y= y+m
putpixel(x,round(y),c)
End
Begin
No
Yes
THUẬT TOÁN DDA (Digital Differential Analizer)

Tốc độ xử lý nhanh hơn phương pháp vẽ thông
thường do đã khử được phép nhân với số thực

Hạn chế về mặt tốc độ do phải thực hiện phép
cộng số thực và làm tròn


Yêu cầu: về nhà sinh viên tự cài đặt thuật toán
THUẬT TOÁN BRESENHAM

Giả sử đường cong được xấp xỉ
thành các điểm lần lượt là (x
i
,y
i
).
Các điểm này có tọa độ nguyên và
được hiển thị trên màn hình.

Bài toán đặt ra là nếu biết được
tọa độ (x
i
,y
i
) của bước thứ i, thì
điểm ở bước i+1 là (x
i+1
,y
i+1
) sẽ
được xác định như thế nào.

Trong trường hợp hệ số góc
0≤m≤1, chúng ta có x
i+1
=x

i
+1 và
y
i+1
=y
i
hay y
i+1
=y
i
+1
x
i
y
i
y
i
+1
y
i
-1
x
i
+1
THUẬT TOÁN BRESENHAM

Phương trình đường thẳng
qua 2 điểm (x
1
, y

1
) và (x
2
,
y
2
) là y=mx+b với
m=Dy/Dx và b=y
1
- mx
1
.

Đặt d
1
=y-y
i
và d
2
=(y
i
+1)-y,
do đó việc chọn tọa độ của
y
i+1
phụ thuộc vào d
1
và d
2


(hay dấu của d
1
- d
2
):

Nếu d
1
-d
2
<0 thì chọn y
i+1
=y
i

Ngược lại, chọn y
i+1
=y
i
+1
x
i
y
i
y
i
+1
P
x
i+1

=x
i
+1
S
d
2
d
1
(x
i+1
,y=f(x
i+1
))
THUẬT TOÁN BRESENHAM
d
1
- d
2
= (2y – 2y
i
– 1) là một số thực do chứa m
Xét p
i
= Dx (d
1
- d
2
) = Dx (2y - 2y
i
- 1)

= 2Dy x
i
- 2Dx y
i
+ C
với C = 2Dy + (2b - 1)Dx
Do dấu của p
i
và (d
1
-d
2
) giống nhau nên khi xét dấu của p
i

thì ta xác định được y
i+1
Mặc khác:
p
i+1
– p
i
= (2Dy x
i+1
- 2Dx y
i+1
+ C) - (2Dy x
i
- 2Dx y
i

+ C)
= 2Dy – 2Dx(y
i+1
– y
i
)
Từ đây, ta suy ra cách tính p
i+1
theo p
i
:

Nếu p
i
<0 thì y
i+1
=y
i
nên p
i+1
= p
i
+ 2Dy

Ngược lại thì y
i+1
=y
i
+1 nên p
i+1

= p
i
+ 2Dy – 2Dx
Giá trị p đầu tiên được tính tại (x
1
, y
1
) là p
1
= 2Dy x
1
-2Dx y
1
+ C = 2Dy – Dx
Begin
p = 2Dy - Dx;
const1=2Dy; const2=2(Dy-Dx);
x = x1; y = y1;
putpixel(x,y,color);
x <x
2
p <0
p=p+const1;
x=x+1;
putpixel(x,y,color)
p=p+const2;
y = y + 1;
End
KẾT LUẬN - BRESENHAM
- Xác định d

1
và d
2
sao
cho d
1
là độ lệch từ y đến
điểm hiện hành y
i
- Xác định p
i
sao cho p
i

cùng dấu với (d
1
– d
2
) và
mang giá trị nguyên
- Tính p
i+1
theo p
i
theo 2
trường hợp p
i
<0 và p
i
>

0.Chú ý trường hợp p
i
= 0.
- Tính p
1
x
i
y
i
y
i
+1
P
x
i+1
=x
i
+1
S
d
2
d
1
(x
i+1
,y=f(x
i+1
))
GIẢI THUẬT TRUNG ĐIỂM –Mid Point
Xét trung điểm M của đoạn

AB
+ Nếu M ở trên đoạn
thẳng AB thì chọn B còn
+ Nếu M ở dưới đoạn
thẳng AB chọn A
Công thức đơn giản hơn, tạo
được các điểm tương tự như với
Bresenham
d = f(x
i
+ 1, y
i
+ 1/2) là
trung điểm của đoạn AB
GIẢI THUẬT TRUNG ĐIỂM –Mid Point
So sánh hay kiểm tra M sẽ được thay bằng việc xét giá trị
d.
- d > 0 điểm B được chọn khi đó y
i+1
= y
i

- nếu d<0 điểm A được chọn khi đó y
i+1
=y
i
+ 1
Trường hợp d = 0 chúng ta có thể chọn điểm bất kỳ hoặc
A, hoặc B.
Sử dụng phương pháp biểu diễn không tường minh ta có:

f(x,y)= ax +by +c =0 (1)
GIẢI THUẬT TRUNG ĐIỂM –Mid Point
Sử dụng phương pháp biểu diễn tường minh:
dx =x
2
-x
1
dy =y
2
-y
1
y= (dy/dx)x +B
hay f(x,y)=0= xdy - ydx +Bdx (2)
So sánh (1) và (2)
a=dy b=-dx c= Bdx
Có f(x,y)=0 với mọi (x,y) thuộc đường thẳng
GIẢI THUẬT TRUNG ĐIỂM –Mid Point
+ Nếu chọn A (d<0) thì M sẽ tăng theo 2 hướng x,y
d
i+1
=f(x
i
+2,y
i
+3/2) = a(x
i
+2) +b(y
i
+3/2) +c
d

i+1
– d
i
= a+b
Hay d
i+1
= d
i
+ dy - dx
+ Nếu chọn B (d>0) thì M sẽ tăng theo x
d
i+1
=f(x
i
+2,y
i
+1/2) = a(x
i
+2) +b(y
i
+1/2) +c
d
i+1
- d
i
= a
Hay d
i+1
= d
i

+ dy
+ Tính d
1
= ?
d
1
= f(x
1
+1,y
1
+1/2) = a(x
1
+1) +b(y
1
+1/2) +c
= ax
1
+by
1
+c +a +1/2 b = f(x
1
,y
1
) +a +b/2
Có (x
1
,y
1
) là điểm bắt đầu, nằm trên đoạn thẳng nên
f(x

1
,y
1
) = 0
Vậy d
1
= a+ b/2 = dy - dx/2

×