1. Trang chủ
  2. » Công Nghệ Thông Tin

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

16 2,8K 16

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 827 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.. Ngày na

Trang 1

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!

Trang 3

Phát Biểu Bài Toán:

- Cài đặt thuật toán Bresenham cho:

Đường tròn tâm (xc,yc) bán kính R: (x-xc)2 + (y-yc)2= R2

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

(x2 / a2 ) + (y2/ b2 ) = 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 (xc,yc) bán kính R: (x-xc)2 + (y-yc)2 = R2

- Đườ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à (xi,yi) Các điểm này có tọa độ nguyên và được hiển thị trên màn hình

Trang 4

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

• Trong trường hợp này, chúng ta có xi+1=xi+1 và yi+1=yi hay yi+1=yi-1

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

• Đặt d1= (yi)2 – y2 và d2= y2 - (yi-1)2,

• Đặt Pi = d1 – d2 do đó việc chọn tọa độ của yi+1 phụ thuộc vào dấu của Pi :

Hình 2 : xác định và vẽ các tọa độ

• d1= (yi)2 – y2 = (yi)2 - (R2 – (xi + 1)2 )

• d2= y2 - (yi-1)2 = (R2 – (xi + 1)2 ) - (yi-1)2

• Xét pi = (d1 - d2) = (yi)2 + (yi-1)2 - 2 (R2 – (xi + 1)2 )

• Tính pi+1 – pi = 4xi + 6 +2((yi-1)2 - (yi)2 )-2(yi+1 -yi)

• Từ đây, ta suy ra cách tính pi+1 theo pi:

– pi+1= pi + 4xi + 6+2((yi-1)2 - (yi)2 )-2(yi+1 -yi)

• Xác định dấu của pi thì ta xác định được yi+1

– Nếu pi<0 thì yi+1=yi khi đó pi+1 = pi + 4xi + 6

– Nếu Pi >= 0 thì yi+1=yi-1 nên pi+1 = pi + 4(xi –yi) + 10

• Giá trị p đầu tiên được tính tại (x1, y1) = (0,R) là p1 = 3-2R

Trang 5

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)

Trang 6

• {

• 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 d1 và d2 sao cho d1 là độ lệch từ y đến điểm hiện hành yi

• Xác định dấu của pi với pi = (d1 – d2)

• Tính pi+1 theo pi theo 2 trường hợp pi < 0 và pi >= 0

• Tính p1 với (x1, y1) = (0,R) là: p1 = 3-2R

- Thuật toán Bresenham vẽ đường elip:

+ Cài đặt thuật toán Bresenham cho đường Elip:

Trang 7

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

x2/a2+y2/b2=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:

x2 / a2 + y2/ b2 = 1

• Đặt d1= (yi)2 – y2 và d2= y2 - (yi-1)2,

• Đặt Pi = d1 – d2 do đó việc chọn tọa độ của yi+1 phụ thuộc vào dấu của Pi :

Trang 8

Hình 5 : xác định và vẽ các tọa độ

• Xét pi = (d1 - d2) =( (yi)2 – y2 )-(y2 - (yi-1)2 )

• Tính pi+1 – pi = 2((yi+1 )2 - (yi)2 )- 2(yi+1 -yi) + (2b2 /a2 )*(2xi +3)

• Từ đây, ta suy ra cách tính pi+1 theo pi:

pi+1= pi + 2((yi+1 )2 - (yi)2 )- 2(yi+1 -yi) + (2b2 /a2 )*(2xi +3)

• Xác định dấu của pi thì ta xác định được yi+1 và pi+1

• - Nếu pi < 0 thì yi+1=yi khi đó pi+1 = pi + (2b2 /a2 )*(2xi +3)

• - Nếu Pi >= 0 thì yi+1=yi-1 nên pi+1 = pi + (2b2 /a2 )*(2xi +3) +4(1-yi)

• Giá trị pi đầu tiên ở vùng 1 (x1, y1) = (0,b) là p1 = 2b2 /a2 – 2b+1

*Thuật toán Bresenham vẽ vùng 1

p1=2b2/a2–2b+1

T1=(2b2/a2)*(2xi+3)

T2=(2b2/a2)*(2xi+3)+4(1-yi)

Z1=(b2/a2)

A = Z1*(x/y)

Trang 9

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 */

Trang 10

• long v=(long)b*b;

• while(u*y>v*x)

• { if(p>=0)

• }

• /* ve khi y tang deu va x giam cham */

• while(u*y<=v*x)

• {

Trang 11

• p+=uv*(2*y+3);

• }

• }

+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

Trang 12

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ỗ

Trang 13

Đổ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

Trang 14

+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)

{

Trang 15

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);

} }

Trang 16

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

Ngày đăng: 19/05/2015, 18:49

HÌNH ẢNH LIÊN QUAN

Hình 1 : Vẽ hình tròn. - Cài đặt thuật toán bresenham vẽ đường tròn, ellip và thuật toán tô màu tràn
Hình 1 Vẽ hình tròn (Trang 3)
Hình 2 : xác định và vẽ các tọa độ - Cài đặt thuật toán bresenham vẽ đường tròn, ellip và thuật toán tô màu tràn
Hình 2 xác định và vẽ các tọa độ (Trang 4)
Hình 3: Sơ đồ thuật toán - Cài đặt thuật toán bresenham vẽ đường tròn, ellip và thuật toán tô màu tràn
Hình 3 Sơ đồ thuật toán (Trang 5)
Hỡnh 4 : ẳ cung Elip - Cài đặt thuật toán bresenham vẽ đường tròn, ellip và thuật toán tô màu tràn
nh 4 : ẳ cung Elip (Trang 7)
Hình 5 : xác định và vẽ các tọa độ - Cài đặt thuật toán bresenham vẽ đường tròn, ellip và thuật toán tô màu tràn
Hình 5 xác định và vẽ các tọa độ (Trang 8)
Hình 6 : Sơ đồ thuật toán - Cài đặt thuật toán bresenham vẽ đường tròn, ellip và thuật toán tô màu tràn
Hình 6 Sơ đồ thuật toán (Trang 9)
Hình 7 : vùng tô màu - Cài đặt thuật toán bresenham vẽ đường tròn, ellip và thuật toán tô màu tràn
Hình 7 vùng tô màu (Trang 11)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w