Tải bản đầy đủ (.doc) (16 trang)

Cài đặt thuật toán bresenham vẽ đường tròn, ellip và thuật toán tô màu tràn

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 (492.8 KB, 16 trang )

Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
LỜI MỞ ĐẦU
Đồ họa máy tính được ra đời bởi sự kết hợp của 2 lĩnh vực thông tin và
truyền hình. Đầu tiên kỹ thuật đồ họa được phát triển bởi các nhóm kỹ sư sử
dụng máy tính lớn. Trong giai đoạn đầu của sự phát triển người ta phải tốn nhiều
tiền cho việc trang bị các thiết bị phần cứng. Ngày nay, nhờ vào sự tiến bộ của vi
xử lý, giá thành của máy tính càng lúc càng phù hợp với túi tiền của người sử
dụng trong khi các kỹ thuật ứng dụng đồ họa của nó ngày càng cao hơn nên có
nhiều người quan tâm nghiên cứu đến lĩnh vực này. Chúng ta có thể vẽ ra những
hình ảnh không chỉ là ảnh tĩnh mà còn có thể biến đổi thành những hình ảnh sinh
động qua các phép quay, tịnh tiến Do vậy, đồ họa máy tính trở thành một lĩnh
vực lý thú và có nhiều ứng dụng trong thực tế

Với mong muốn cho các mọi người hiểu một phần nào về môn ĐHMT này,
nhóm chúng em đã “ Cài đặt thuật toán Bresenham vẽ đường tròn, ellip và
thuật toán tô màu tràn”
Với sự giúp đỡ rất nhiệt tình của thầy PGS.TS Ngô Quốc Tạo chúng em đã
hoàn thành đề tài này. Tuy nhiên chương trình này không tránh khỏi những hạn
chế và thiếu xót. Vì vậy nhóm thực hiện chúng em rất mong được sự giúp đỡ,
đóng góp của thầy cô và bạn bè để chương trình được hoàn thiện và phong phú
hơn.
Chúng em xin chân thành cảm ơn!
1
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
2
S/v thực hiện:
Cao Văn Cường


Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
Phát Biểu Bài Toán:
- Cài đặt thuật toán Bresenham cho:
Đường tròn tâm (x
c
,y
c
) bán kính R: (x-x
c
)
2
+ (y-y
c
)
2

= R
2

Đường elip tâm (0,0) bán kính dài là a, rộng là b:
(x
2
/ a
2
) + (y
2

/ b

2
) = 1
- Cài đặt thuật toán tô màu tràn:
Thuật Giải:
- Cài đặt thuật toán Bresenham cho đường tròn.
Xét đường tròn tâm (x
c
,y
c
) bán kính R: (x-x
c
)
2
+ (y-y
c
)
2

= R
2
- Đường tròn có tính đối xứng nên ta chỉ cần vẽ 1/8 cung tròn và lấy đối
xứng.
Hình 1 : Vẽ hình trò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.

3
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
• 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 này, chúng ta có x
i+1
=x
i
+1 và y
i+1
=y
i
hay y
i+1
=y
i
-1.


• Phương trình đường tròn tâm (x
c
,y
c
) bán kính R: (x-x
c
)
2
+ (y-y
c
)
2

= R
2

• Đặt d
1
= (y
i
)
2
– y
2
và d
2
= y
2
- (y
i

-1)
2
,
• Đặt P
i
= d
1
– d
2
do đó việc chọn tọa độ của y
i+1
phụ thuộc vào dấu của P
i
:
Hình 2 : xác định và vẽ các tọa độ
• d
1
= (y
i
)
2
– y
2
= (y
i
)
2
- (R
2
– (x

i
+ 1)
2
)
• d
2
= y
2
- (y
i
-1)
2
= (R
2
– (x
i
+ 1)
2
) - (y
i
-1)
2
• Xét p
i
= (d
1
- d
2
) = (y
i

)
2
+ (y
i
-1)
2
- 2 (R
2
– (x
i
+ 1)
2
)
• Tính p
i+1
– p
i
= 4x
i
+ 6 +2((y
i
-1)
2
- (y
i
)
2
)-2(y
i+1
-y

i
)
• Từ đây, ta suy ra cách tính p
i+1
theo p
i
:
– p
i+1
= p
i
+ 4x
i
+ 6+2((y
i
-1)
2
- (y
i
)
2
)-2(y
i+1
-y
i
)
• Xác định dấu của p
i
thì ta xác định được y
i+1


– Nếu p
i
<0 thì y
i+1
=y
i
khi đó p
i+1
= p
i
+ 4x
i
+ 6
– Nếu P
i
>= 0 thì y
i+1
=y
i
-1 nên p
i+1
= p
i
+ 4(x
i
–y
i
) + 10
• Giá trị p đầu tiên được tính tại (x

1
, y
1
) = (0,R) là p
1
= 3-2R.
4
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
Hình 3: Sơ đồ thuật toán
+ Chương trình thuật toán Bresenham:
• Bresenham_Circle(int xc, int yc, int R, int color)
• {
• int x, y, p;
• x = 0;
• y = R;
• p = 3 - 2 * R;
• while (x <= y)
5
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
• {
• putpixel(xc + x, yc + y, color);
• putpixel(xc - x, yc + y, color);

• putpixel(xc + x, yc - y, color);
• putpixel(xc - x, yc - y, color);
• putpixel(xc + y, yc + x, color);
• putpixel(xc - y, yc + x, color);
• putpixel(xc + y, yc - x, color);
• putpixel(xc - y, yc - x, color);
• if (p < 0)
• p = p + 4 * x + 6;
• else
• {
• p = p + 4 * (x-y) + 10;
• y ;
• }
• x++;
• }
• }
- Tóm lại thuật toán Bresenham vẽ đường tròn:
• 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 dấu của p
i
với p
i
= (d

1
– d
2
)
• Tính p
i+1
theo p
i
theo 2 trường hợp p
i
< 0 và p
i
>= 0.
• Tính p
1
với (x
1
, y
1
) = (0,R) là: p
1
= 3-2R
- Thuật toán Bresenham vẽ đường elip:
+ Cài đặt thuật toán Bresenham cho đường Elip:
6
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn

Xét Đường elip tâm (0,0) bán kính dài là a, rộng là b:
x
2
/a
2
+y
2
/b
2
=1

Đường Elip có tính đối xứng nên ta chỉ cần vẽ ¼ cung Elip và lấy đối xứng
trục
Trong đó chia thành 2 vùng :
* Vùng 1:
- Biến quyết định p.
- Nếu p < 0 : Chẵn E, x tăng 1, y không thay đổi
- Nếu p >= 0 : Chẵn SE, x tăng 1, y giảm 1
* Vùng 2: ta chỉ thay đổi vai trò của x và y
- Nếu p < 0: Chẵn SE, x tăng 1, y giảm 1
- Nếu p >= 0: Chẵn S, x không tăng, y giảm 1
Hình 4 : ¼ cung Elip
- Thuật Toán Bresenham:
• Xét Đường elip tâm (0,0) bán kính dài là a, rộng là b:
x
2
/ a
2
+ y
2


/ b
2
= 1

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

phụ thuộc vào dấu của P
i
:
7
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
Hình 5 : xác định và vẽ các tọa độ
• Xét p
i
= (d
1
- d
2
) =( (y
i
)
2
– y
2
)-(y
2
- (y
i
-1)
2
)
• Tính p

i+1
– p
i
= 2((y
i+1
)
2
- (y
i
)
2
)- 2(y
i+1
-y
i
) + (2b
2
/a
2
)*(2x
i
+3)
• Từ đây, ta suy ra cách tính p
i+1
theo p
i
:
p
i+1
= p

i
+ 2((y
i+1
)
2
- (y
i
)
2
)- 2(y
i+1
-y
i
) + (2b
2
/a
2
)*(2x
i
+3)
• Xác định dấu của p
i
thì ta xác định được y
i+1
và p
i+1

• - Nếu p
i
< 0 thì y

i+1
=y
i
khi đó p
i+1
= p
i
+ (2b
2
/a
2
)*(2x
i
+3)
• - Nếu P
i
>= 0 thì y
i+1
=y
i
-1 nên p
i+1
= p
i
+ (2b
2
/a
2
)*(2x
i

+3) +4(1-y
i
)
• Giá trị p
i
đầu tiên ở vùng 1 (x
1
, y
1
) = (0,b) là p
1
= 2b
2
/a
2
– 2b+1
*Thuật toán Bresenham vẽ vùng 1
p
1
=2b
2
/a
2
–2b+1
T
1
=(2b
2
/a
2

)*(2x
i
+3)
T
2
=(2b
2
/a
2
)*(2x
i
+3)+4(1-y
i
)
Z
1
=(b
2
/a
2
)
A = Z1*(x/y)
8
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
Hình 6 : Sơ đồ thuật toán
+Chương trình thuật toán Bresenham:

• void Bre_Ellipse(int xc,int yc,int a,int b,int color)
• {
• /* ve khi x tang deu va y giam cham */
• int x,y;
• long p;
• long u=(long)a*a;
9
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
• long v=(long)b*b;
• long uv=2*u;
• long vu=2*v;
• x=0;
• y=b;
• p=u-2*u*b+2*v;
• put4pixel(xc,yc,x,y,color);
• while(u*y>v*x)
• { if(p>=0)
• {
• p+=vu*(2*x+3)-uv*2*(y-1);
• y ;
• }
• else
• p+=vu*(2*x+3);
• x++;
• put4pixel(xc,yc,x,y,color);
• }

• /* ve khi y tang deu va x giam cham */
• x=a;
• y=0;
• p=v-2*v*a+2*u;
• put4pixel(xc,yc,x,y,color);
• while(u*y<=v*x)
• {
• if(p>=0)
• {
• p+=uv*(2*y+3)-vu*2*(x-1);
• x ;
• }
10
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
• else
• p+=uv*(2*y+3);
• y++;
• put4pixel(xc,yc,x,y,color);
• }
• }

+Thuật toán tô màu tràn:
Vùng được định nghĩa bởi màu của pixel, chia làm 3 phần:
- Vùng trong (interior)
- Vùng ngoài (exterior)
- Biên vùng liên tục (boundary)

Hình 7 : vùng tô màu
Liên thông 4 và liên thông 8
+ Liên thông 4 : 2 pixel liên thông với nhau nếu chúng kề nhau theo
chiều ngang hay chiều dọc
+ Liên thông 8 : 2 pixel liên thông với nhau nếu chúng kề nhau theo
chiều ngang, hay chiều dọc, hay đường chéo
11
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
Cách thức định nghĩa (pixel-defined region)
- Interior defined
Tất cả các pixel trong vùng có cùng một màu, gọi là inside-color
Các pixel trên biên không có màu này
Có thể có lỗ trong vùng
- Boundary defined
Các pixel thuộc biên có cùng màu – boundary-color
Các pixel trong vùng không có màu này
Nếu một số pixel trong vùng có màu boundary-color thì vùng sẽ chứa lỗ
12
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
Đổi màu của tất cả các interior-pixel thành màu tô – fill color.
Quá trình tô màu bắt đầu từ một điểm (seed pixel) thuộc phía trong vùng
tô và lan truyền khắp vùng tô => Flood-Fill

13
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
+Thuật toán:
- Nếu pixel tại (x,y) thuộc vùng trong – màu của pixel đó là inside-color thì
đổi màu của nó thành fill-color
- Áp dụng quá trình trên cho 4 điểm lân cận nó (4-connected).
- Ngược lại, không làm gì.
+Thuật toán FloodFill:
void FloodFill(int x, int y, int inside_color, int fill_color)
{
14
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
if (getpixel(x,y) == inside_color)
{
putpixel(x,y,fill_color);
FloodFill(x-1,y, inside_color, fill_color);
FloodFill(x+1,y, inside_color, fill_color);
FloodFill(x,y+1, inside_color, fill_color);
FloodFill(x,y-1, inside_color, fill_color);
}
}
15

S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng
Đồ Án Môn Học Đề tài: Thuật Toán Bresenham Và Tô Màu Tràn
Tài liệu tham khảo
[1] Giáo trình DHMT thầy Ngô Quốc Tạo
[2] Giáo Trình Đồ Họa Máy Tính, Auth: Dương Anh Đức
[3] Computer Graphics, Auth: Francis S. Hill, Jr. 1990 (Vol. I & II).
………………………………………………
Trong thời gian ngắn, chúng em vừa tìm hiểu tài liệu , tìm hiểu ngôn ngữ,
nên chắc chắn còn nhiều thiếu sót. Nhưng trong thời gian tới, em sẽ hoàn
thiện kĩ thuật và đưa ra một trương trình hoàn hảo.Em xin chân thành cảm ơn
thầy đã tận tụy hướng dẫn và giúp đỡ em hoàn tất đề tài này.
Em Xin Chân Thành Cám Ơn!
Đ5- CNTT, Epu.Edu.Vn
Hà Nội, Ngày 06 tháng 06 năm 2013.
16
S/v thực hiện:
Cao Văn Cường
Phạm Việt Dũng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo
Nguyễn Văn Thắng

×