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
Cài đặt thuật toán bresenham vẽ đường tròn, ellip và thuật toán tô màu tràn

Đ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

Đồ Á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... 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 Nguyễn Văn Thắng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo Đồ Á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ừ... đầ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 Nguyễn Văn Thắng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo Đồ Á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... 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 Nguyễn Văn Thắng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo Đồ Á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 -... 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 Nguyễn Văn Thắng Giảng viên hướng dẫn : PGS.TS Ngô Quốc Tạo Đồ Á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,... 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... 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 Nguyễn Văn Thắng Giảng viên hướng dẫn : . 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. 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. 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) •

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