k5_khmt1_nhÓm 7_ĐỀ tÀi 6_bÁocÁo

46
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN Đề Tài: Cài Đặt Các Thuật Toán Tô Màu Đã Học Và Thuật Toán Tô Màu Dòng Quét Cho Một N Giác Bất Kỳ Giảng viên h ư ớng dẫn: Ths. Vũ Minh Yến Lớp: Khoa Học Máy Tính 1 – K5 Nhóm thực hiện : Nhóm 7 Thành viên trong nhóm :

Upload: luong-thien

Post on 06-Aug-2015

344 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN

Đề Tài:

Cài Đặt Các Thuật Toán Tô Màu Đã Học

Và Thuật Toán Tô Màu Dòng Quét Cho Một N Giác Bất Kỳ

Giảng viên h ư ớng dẫn: Ths. Vũ Minh Yến

Lớp: Khoa Học Máy Tính 1 – K5

Nhóm thực hiện : Nhóm 7

Thành viên trong nhóm :

1. Đặng Đình Hoàng

2. Vũ Hồng Phúc

3. Đỗ Lương Thiện

Page 2: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

Hà Nội, tháng 08 năm 2012

Nhóm 7 – Lớp KHMT1K5 Trang 1

Page 3: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

LỜI NÓI ĐẦU

Đồ Họa Máy Tính là một lĩnh vực của Công Nghệ Thông Tin, ở đó nghiên cứu, xây

dựng và tập hợp các công cụ (mô hình lý thuyết và phần mềm) khác nhau để kiến tạo,

xây dựng, lưu trữ và xử lý các mô hình và hình ảnh của các đối tượng, sự vật, hiện

tượng trong cuộc sống, sản xuất, nghiên cứu.

Đồ Họa Máy Tính góp phần quan trọng làm cho giao tiếp giữa con người và máy

tính trở nên thân thiện hơn. Trong lĩnh vực kỹ thuật máy tính, Đồ Họa Máy Tính càng

ngày càng phát triển mạng mẽ. Từ đồ họa trên máy tính chúng ta có nhiều lĩnh vực có

ứng dụng rất quan trọng của Đồ Họa Máy Tính trong thực tế như: tạo mô hình, hoạt

cảnh (game, giải trí,…), hỗ trợ thiết kế đồ họa, mô phỏng hình ảnh, chuẩn đoán hình

ảnh (trong Y tế), huấn luyện đào tạo ảnh (quân sự, hàng không,…), …

Trong Đồ Họa Máy Tính có nhiều thuật toán tô màu (tô theo đường biên, tô theo

dòng quét,…) cho 1 vùng kín như các đa giác, các đường tròn,… Xong mỗi thuật toán

lại tỏ ra có những ưu việt và hạn chế riêng đối với từng bài toán cụ thể. Và để phục vụ

cho việc tìm hiểu thêm về các thuật toán tô màu trong Đồ Họa Máy Tính, Nhóm 7

chúng em với sự hướng dẫn của Giảng viên – Th.s Vũ Minh Yến – Khoa CNTT –

Trường ĐH Công Nghiệp Hà Nội đã thực hiện đề tài: “Cài đặt các thuật toán tô

màu đã học và thuật toán tô màu dòng quét cho một n giác bất kỳ”.

Chắc chắn báo cáo đề tài và chương trình cài đặt của nhóm chúng em sẽ có những

thiếu xót. Mong thầy cô và các bạn góp ý để đề tài của nhóm chúng em được hoàn

thiện hơn nữa.

Nhóm 7 lớp KHMT1 – K5 chúng em xin chân thành cảm ơn!

Trường ĐH Công Nghiệp Hà Nội, tháng 8 năm 2012.

Nhóm 7 – Lớp KHMT1K5 Trang 2

Page 4: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

MỤC LỤC

Tiêu Đề...................................................................................................................Trang

LỜI NÓI ĐẦU............................................................................................................................1

MỤC LỤC..................................................................................................................................2

PHẦN 1: GIỚI THIỆU CHUNG VỀ ĐỀ TÀI............................................................................3

I. Giới Thiệu Đề Tài...............................................................................................................3

II. Giới Thiệu Ngôn Ngữ Lập Trình Được Sử Dụng Trong Đề Tài (C# - C Sharp)..............3

III. Giới Thiệu Thư Viện GDI+ Trong C#.............................................................................4

PHẦN 2: Ý TƯỞNG XÂY DỰNG CHƯƠNG TRÌNH VÀ CÀI ĐẶT CÁC THUẬT TOÁN.5

I. Ý Tưởng Xây Dựng Chương Trình.....................................................................................5

II. Cài Đặt Các Thuật Toán....................................................................................................6

1. Thuật toán Tô Màu Vết Dầu Loang...............................................................................8

2. Thuật toán Tô Màu Theo Đường Biên...........................................................................9

3. Thuật toán Tô Màu Theo Dòng Quét...........................................................................12

III. Ưu Điểm, Nhược Điểm Và Một Số Hạn Chế Trong Ba Thuật Toán Tô Màu...............14

1. Ưu điểm........................................................................................................................14

2. Nhược điểm và hạn chế................................................................................................14

IV. Một Số Hàm Hỗ Trợ Việc Sử Dụng Chương Trình.......................................................16

1. Hàm chuyển đổi dữ liệu...............................................................................................16

2. Hàm kiểm tra dữ liệu nhập...........................................................................................16

3. Hàm kiểm tra tạo đỉnh..................................................................................................16

4. Hàm kiểm tra vị trí.......................................................................................................17

PHẦN 3: GIAO DIỆN CHƯƠNG TRÌNH VÀ HƯỚNG DẪN SỬ DỤNG...........................18

I. Hướng Dẫn Tạo Đa Giác Bằng Click Chuột Trái (Left Click).........................................18

II. Hướng Dẫn Tạo Đa Giác Bằng Cách Nhập Tọa Độ Cụ Thể...........................................20

III. Một Số Chức Năng Khác Trong Chương Trình.............................................................22

IV. Một Số Vấn Đề Khi Người Dùng Thao Tác Sai............................................................24

KẾT LUẬN...............................................................................................................................27

TÀI LIỆU THAM KHẢO........................................................................................................28

Nhóm 7 – Lớp KHMT1K5 Trang 3

Page 5: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

PHẦN 1: GIỚI THIỆU CHUNG VỀ ĐỀ TÀI

I. Giới Thiệu Đề Tài.

Cùng với sự phát triển của nền kinh tế hiện nay là sự phát triển mạnh mẽ của ngành

công nghệ thông tin. Các ứng dụng của công nghệ thông tin ngày càng nhiều và có mặt

trong hầu hết các lĩnh vực của cuộc sống.

Với đề tài: “Cài đặt các thuật toán tô màu đã học và thuật toán tô màu dòng

quét cho một n giác bất kỳ”, nhóm 7 – lớp KHMT1K5 sẽ trình bày về ba thuật toán

tô màu là: tô màu vết dầu loang, tô màu theo đường biên và tô màu theo dòng quét. Ý

nghĩa của thuật toán tô màu dòng quét trong công nghệ thông tin là không hề nhỏ, đặc

biệt là đối với màn hình máy tính thì nó có ý nghĩa vô cùng quan trọng.

Qua đề tài này nhóm 7 mong sẽ giúp ích được cho mọi người hiểu thêm phần nào

về ba thuật toán tô màu thường dùng, đặc biệt là thuật toán tô màu dòng quét.

II. Giới Thiệu Ngôn Ngữ Lập Trình Được Sử Dụng Trong Đề Tài (C# -

C Sharp).

.NET Framework của Microsoft là một nền tảng lập trình tập hợp các thư viện lập

trình có thể được cài thêm hoặc đã có sẵn trong các hệ điều hành Windows. Nó cung

cấp những giải pháp thiết yếu cho những yêu cầu thông thường của các chương trình

điện toán như lập trình giao diện người dùng, truy cập dữ liệu, kết nối cơ sở dữ liệu,

ứng dụng web, các giải thuật số học và giao tiếp mạng. Ngoài ra, .NET Framework

quản lý việc thực thi các chương trình được viết dựa trên .NET Framework do đó

người dùng cần phải cài .NET Framework để có thể chạy các chương trình được viết

trên nền .NET.

Hiện nay với sự phát triển mạnh mẽ của nền tảng .NET với khả năng tương thích

cao trên nhiều máy tính chạy hệ điều hành Windows do dựa trên cùng một nền

tảng .NET. Mang lại khả năng ứng dụng thực tế cao cho chương trình.

Nhóm 7 lựa chọn ngôn ngữ lập trình C# (cụ thể là lập trình Windows Forms) để

thực hiện đề tài này nhằm tận dụng thế mạnh của nền tảng .NET.

Nhóm 7 – Lớp KHMT1K5 Trang 4

Page 6: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

III. Giới Thiệu Thư Viện GDI+ Trong C#.

GDI+ (Graphics Device Interface – Giao diện thiết bị đồ họa) là thư viện cung cấp

các hàm và các cấu trúc dữ liệu cần thiết để ứng dụng tạo ra những kết xuất dưới dạng

đồ họa (hiển thị lên màn hình, in ấn,…)

.NET cung cấp một Framework mới với các lớp cho phép vẽ 2 chiều và tô vẽ. Các

lớp này có thể tìm thấy trong không gian tên System.Drawing (được chứa trong

assembly System.Drawing.dll), tượng trưng cho GDI+. Đối với đề tài này nhóm 7 sử

dụng thư viện là System.Drawing. Các hàm trong GDI+ cho phép vẽ đường thẳng,

đường cong, hình chữ nhật, hình đa giác, xuất kí tự , hiển thị ảnh bitmap…

Visual C# sử dụng thư viện GDI+ để thực hiện các thao tác liên quan đến đồ họa

như thực hiện việc khởi tạo chế độ vẽ trên picturebox,…

Trình biên dịch được nhóm 7 sử dụng là Microsoft Visual C# trong chương trình

Microsoft Visual Studio 2010, nền tảng .NET được sử dụng là .NET FrameWork 4.0.

Nhóm 7 – Lớp KHMT1K5 Trang 5

Page 7: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

PHẦN 2: Ý TƯỞNG XÂY DỰNG CHƯƠNG TRÌNH VÀ

CÀI ĐẶT CÁC THUẬT TOÁN

I. Ý Tưởng Xây Dựng Chương Trình.

Hình 1: Danh sách các Form

Chương trình sẽ bao gồm 1 Form Chính và 2 Form phụ (form tài liệu tham khảo và

form thông tin chương trình).

FORM CHỨC NĂNG

frm_Chinh

Vẽ hình bằng cách click chuột lên form hoặc nhập tọa độ

đỉnh cụ thể, tô màu bằng 1 trong 3 thuật toán và các thao

tác về tạo hình, đổi màu,…

frm_TaiLieu Danh sách các tài liệu nhóm đã tham khảo.

frm_ThongTinThông tin về đề tài, Giảng viên hướng dẫn, nhóm thực

hiện, …

Nhóm 7 – Lớp KHMT1K5 Trang 6

Page 8: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

using System;using System.Drawing;using System.Windows.Forms;

int[] DinhX = new int[800];//Ma�ng lưu trữ Hoành độ cu�a đỉ�nh đa giácint[] DinhY = new int[800];//Ma�ng lưu trữ Tung độ cu�a đỉ�nh đa giácint SoPt = 0, ktmt = 0;//SoPt: số1 phầ4n tư� - ktmt: kiể�m tra màu tốBitmap bmp = new Bitmap(570, 500);//Khai báo 1 bitmap có size là size cu�a picturebox

Color mv = Color.Black,mt = Color.Yellow, mn = Color.PaleTurquoise;

// mv: màu vẽ - mt: màu tố - mn: màu nể4n

//Hàm so sánh màu. tra� vể4 true nể1u 2 màu truyể4n vào giố1ng nhauprivate bool SsMau(Color mau1, Color mau2){ if ((mau1.A == mau2.A) && (mau1.B == mau2.B) && (mau1.G == mau2.G) && (mau1.R == mau2.R)) { return true; } else { return false; }}//Hàm tố 1 dòng. Tố từ x0 + 1 để1n x1 – 1.private void To1Dong(int x0, int x1, int ys){

Bitmap bm = new Bitmap(pictureBox1.Image);for (int i = x0 + 1; i < x1; i++){

bm.SetPixel(i, ys, mt);}

pictureBox1.Image = bm;

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

II. Cài Đặt Các Thuật Toán.

Khai báo các thư viện, các biến, hàm liên quan đến các hàm tô màu:

o Khai báo thư viện sử dụng:

o Khai báo các biến toàn cục:

o Khai báo các hàm liên quan đến các hàm tô màu:

Nhóm 7 – Lớp KHMT1K5 Trang 7

Page 9: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

//Hàm Tìm giá trị lớn nhầ1t trong ma�ng a có n phầ4n tư�private int Max(int[] a, int n){ int max = a[0]; for (int i = 1; i < n; i++) {

if (a[i] > max) { max = a[i]; } } return max;}

//Hàm Tìm giá trị nho� nhầ1t trong ma�ng a có n phầ4n tư�private int Min(int[] a, int n){ int min = a[0]; for (int i = 1; i < n; i++) { if (a[i] < min) { min = a[i];

} } return min;}

//Hàm sắ1p xể1p tắng dầ4n các giá trị trong ma�ng a có n phầ4n tư�//Sắ1p xể1p nố�i bọtvoid SapXep(int[] a, int n){ int tg; for (int i = 0; i < n - 1; i++) for (int j = i + 1; j < n; j++) if (a[i] > a[j]) { tg = a[i]; a[i] = a[j]; a[j] = tg; }}

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

Nhóm 7 – Lớp KHMT1K5 Trang 8

Page 10: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

1. Thuật toán Tô Màu Vết Dầu Loang.

a. Bài toán đặt ra.

o Dữ liệu đầu vào:

Miền khép kín được xác định bởi màu vẽ: mv

Một điểm M(x, y) thuộc miền cần tô

Cho màu tô: mt

o Dữ liệu đầu ra: Tô miền khép kín trên bằng màu tô.

b. Mô tả ý tưởng thuật toán bằng lời và hình vẽ.

Từ một điểm M(x, y) thuộc miền cần tô, ta so sánh màu của tại điểm đó có giống

màu tô và màu vẽ hay không, nếu khác 2 màu trên thì tô màu tại điểm M(x, y) bằng

màu tô và tiếp tục xét các điểm lân cận M(x, y) bằng cách lần lượt tăng x, y lên 1 đơn

vị và giảm x, y xuống 1 đơn vị và khi gặp màu vẽ mv tại đâu thì sẽ dừng ở điểm đó

còn các điểm khác sẽ tiếp tục phát triển cho đến khi tô kín miền cần tô.

Hình 2: Mô tả thuật toán Tô Màu Vết Dầu Loang

Nhóm 7 – Lớp KHMT1K5 Trang 9

Page 11: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

c. Cài đặt cụ thể thuật toán bằng ngôn ngữ C#.

2. Thuật toán Tô Màu Theo Đường Biên.

a. Bài toán đặt ra.

o Dữ liệu đầu vào:

Miền khép kín được xác định bởi màu vẽ: mv

Một điểm M(x, y) thuộc miền cần tô

Cho màu tô: mt

o Dữ liệu đầu ra: Tô miền khép kín trên bằng màu tô.

b. Mô tả ý tưởng thuật toán bằng lời và hình vẽ.

(Áp dụng với i = ± 1)

i = 1 thì sẽ tô theo chiều từ vị trí có tung độ y xuống dưới.

i = -1 thì sẽ tô theo chiều từ vị trí có tung độ y lên trên.

Nhóm 7 – Lớp KHMT1K5 Trang 10

private void ToMauLoang(int x, int y){ try { Bitmap bm = new Bitmap(pictureBox1.Image); pictureBox1.Image = bm; if (!SsMau(bm.GetPixel(x, y), mt) && (!SsMau(bm.GetPixel(x, y), mv))) { bm.SetPixel(x, y, mt); ToMauLoang(x, y - 1); ToMauLoang(x + 1, y); ToMauLoang(x, y + 1); ToMauLoang(x - 1, y); } } catch (Exception e) { MessageBox.Show("Xa�y ra lố_i trong quá trình tố màu Vể1t Dầ4u loang!\n" + e); }}

Page 12: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

o Bước 1: Tìm biên trái nhất và biên phải nhất.

Đặt x1 = x, x2 = x.

Trong khi màu tại điểm (x1 – 1, y) khác với màu biên thì giảm x1 đi 1 đơn vị.

Trong khi màu tại điểm (x2 + 1, y) khác với màu biên thì tăng x2 lên 1 đơn vị.

o Bước 2: Vẽ đoạn (x1, y) và (x2, y) bằng màu tô.

o Bước 3: Tính điểm phát triển tiếp theo.

Trong khi màu tại điểm (x1, y + i) giống màu biên thì tăng x1 lên 1 đơn vị.

o Bước 4: Nếu x1 ≤ x2.

Đặt x = x1, tăng y lên i đơn vị và quay trở lại bước 1.

o Bước 5: Kết thúc.

Hình 3: Mô tả thuật toán Tô Màu Theo Đường Biên

Nhóm 7 – Lớp KHMT1K5 Trang 11

Page 13: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

c. Cài đặt cụ thể thuật toán bằng ngôn ngữ C#.

Nhóm 7 – Lớp KHMT1K5 Trang 12

private void ToMauBien(int x, int y, int i){ try { Bitmap bm = new Bitmap(pictureBox1.Image); pictureBox1.Image = bm; Graphics g = Graphics.FromImage(bm); Pen pen = new Pen(mt);

//Bước 1 int x1 = x, x2 = x; while (!SsMau(bm.GetPixel(x1 - 1, y), mv)) { x1--; } while (!SsMau(bm.GetPixel(x2 + 1, y), mv)) { x2++; }

//Bước 2 g.DrawLine(pen, x1, y, x2, y);

//Bước 3 while (SsMau(bm.GetPixel(x1, y + i), mv)) { x1++; }

//Bước 4 if (x1 <= x2) { x = x1; y += i; ToMauBien(x, y, i); } } catch (Exception e) { MessageBox.Show("Xa�y ra lố_i trong quá trình tố màu Theo Đường Biển!\n" + e); }}

Page 14: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

3. Thuật toán Tô Màu Theo Dòng Quét.

a. Bài toán đặt ra.

o Dữ liệu đầu vào:

Cho các đỉnh của n giác: A1, A2, …, An

Cho màu tô: mt

o Dữ liệu đầu ra: Tô màu n giác trên bằng màu tô.

b. Mô tả ý tưởng thuật toán bằng lời và hình vẽ.

o Bước 1: Tìm giá trị lớn nhất ymax và giá trị nhỏ nhất ymin của tất cả các tung độ

của các đỉnh đã cho.

o Bước 2: Đặt ys = ymin + 1.

o Bước 3: Ứng với mỗi dòng quét y = ys (ys thay đổi từ ymin đến ymax -1), ta xác

định các giao điểm của dòng quét ys với các cạnh của n giác. Sau đó sắp xếp

hoành độ các giao điểm theo thứ tự tăng dần: x0, x1, x2,…, x2k.

o Bước 4: Nối các giao điểm x2i + 1 và x2i+1 - 1 bằng màu tô mt.

Với i = {0, 1, 2, …, k-1}. Tăng ys lên 1 đơn vị.

o Bước 5: Nếu ys ≤ ymax - 1 thì quay lại bước 3.

o Bước 6: Kết Thúc

Hình 4: Mô tả thuật toán Tô Màu Theo Dòng Quét.

Nhóm 7 – Lớp KHMT1K5 Trang 13

Page 15: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

c. Cài đặt cụ thể thuật toán bằng ngôn ngữ C#.

Nhóm 7 – Lớp KHMT1K5 Trang 14

private void ToMauDongQuet(){ try { for (int ys = Min(DinhY, SoPt) + 1; ys < Max(DinhY, SoPt); ys++) { int[] GiaoDiem = new int[SoPt]; int sogd = 0;

for (int i = 0; i < SoPt - 1; i++) {//trường hợp xét ys nể1u nằm trong đoạn DinhY[i] -> DinhY[i+1] thì có giao điể�m if ((DinhY[i] <= ys && ys < DinhY[i + 1]) || (DinhY[i] > ys && ys >= DinhY[i + 1])) { GiaoDiem[sogd] = DinhX[i] + (int)((ys - DinhY[i]) * ((float)(DinhX[i + 1] - DinhX[i]) / (float)(DinhY[i + 1] - DinhY[i]))); sogd++; } }

//trường hợp xét cạnh có 2 đầ4u mút là đỉ�nh đầ4u tiển và đỉ�nh cuố1i cùng if ((DinhY[0] <= ys && ys < DinhY[SoPt - 1]) || (DinhY[0] > ys && ys >= DinhY[SoPt - 1])) { GiaoDiem[sogd] = DinhX[SoPt - 1] + (int)((ys - DinhY[SoPt - 1]) * ((float)(DinhX[0] - DinhX[SoPt - 1]) / (float)(DinhY[0] - DinhY[SoPt - 1]))); sogd++; }

//Sắ1p xể1p các giao điể�m cu�a dòng quét ys với cạnh n giác tắng dầ4n theo hoành độ SapXep(GiaoDiem, sogd);

//Tố màu dòng quét với các giao điể�m đã có for (int i = 0; i < sogd; i += 2) { To1Dong(GiaoDiem[i], GiaoDiem[i + 1], ys); }

} } catch (Exception e) { MessageBox.Show("Xa�y ra lố_i trong quá trình tố màu Theo Dòng Quét!\n" + e); }

Page 16: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

III. Ưu Điểm, Nhược Điểm Và Một Số Hạn Chế Trong Ba Thuật Toán

Tô Màu.

1. Ưu điểm.

a. Thuật toán Tô Màu Vết Dầu Loang.

o Đơn giản, dễ hiểu, dễ cài đặt.

o Tô được tất cả các đa giác, ngoại trừ đa giác lõm phức. (Trong đa giác có đa

giác lõm đơn và đa giác lõm phức).

b. Thuật toán Tô Màu Theo Đường Biên.

o Đơn giản, dễ hiểu, dễ cài đặt.

o Tô được tất cả các loại đa giác lồi.

o Vì thuật toán đơn giản, không phải gọi đệ quy nhiều lần như thuật toán tô màu

Vết Dầu Loang nên thời gian tô màu nhanh, sử dụng ít tài nguyên của hệ thống

(cụ thể là tài nguyên CPU và bộ nhớ RAM trong máy tính).

c. Thuật toán Tô Màu Theo Dòng Quét.

o Không phải tìm trước 1 điểm nằm trong vùng cần tô như 2 thuật toán trên.

o Tô được tất cả các loại đa giác.

o Thuật toán không phải gọi đệ quy, tính toán đơn giản nên thời gian tô màu

nhanh, sử dụng ít tài nguyên của hệ thống.

2. Nhược điểm và hạn chế.

a. Thuật toán Tô Màu Vết Dầu Loang.

o Không tô được đa giác lõm phức.

o Phải xác định trước được một điểm nằm trong vùng cần tô. Nếu không xác định

đúng điểm nằm trong vùng cần tô thì sẽ không tô được. Và việc xác định được

Nhóm 7 – Lớp KHMT1K5 Trang 15

Page 17: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

điểm nằm trong vùng cần tô bằng mắt thường là rất khó. Cần có biện pháp hỗ trợ

người dùng tìm điểm nằm trong vùng cần tô 1 cách chính xác nhất.

o Thuật toán phải gọi đệ quy nhiều lần nên thời gian tô chậm, sử dụng hết nhiều tài

nguyên hệ thống.

* Chú ý: Trước khi tô màu Vết Dầu Loang thì nên vẽ hình vẽ với kích thước nhỏ để

tránh việc thuật toán chiếm quá nhiều tài nguyên hệ thống dẫn đến tình trạng đơ máy.

b. Thuật toán Tô Màu Theo Đường Biên.

o Không tô được các loại đa giác lõm.

o Phải xác định trước được một điểm nằm trong vùng cần tô. Nếu không xác định

đúng điểm nằm trong vùng cần tô thì sẽ không tô được. Và việc xác định được

điểm nằm trong vùng cần tô bằng mắt thường là rất khó. Cần có biện pháp hỗ trợ

người dùng tìm điểm nằm trong vùng cần tô 1 cách chính xác nhất.

c. Thuật toán Tô Màu Theo Dòng Quét

o Nếu số giao điểm tìm được giữa các cạnh đa giác và dòng quét là lẻ (xảy ra khi

dòng quét đi qua các đỉnh của đa giác. VD: dòng quét ys1, ys3 trong Hình 4.) thì

khi đó dòng quét có thể tô không chính xác

o Việc tìm giao điểm của dòng quét với các cạnh nằm ngang của đa giác (VD:

dòng quét ys2 trong Hình 4.) là một trường hợp đặc biệt. Và với mỗi dòng quét

thì không phải cạnh nào của đa giác cũng cắt dòng quét nên để cải thiện tốc độ

thuật toán cần có 1 cách nào đó để hạn chế số cạnh tìm giao điểm ứng với mỗi

dòng quét.

o Vì khi tính toán tìm giao điểm của dòng quét với các cạnh của đa giác sử dụng

phép tính chia nên việc làm tròn giá trị thu được có phần nào chưa được chính

xác tuyệt đối và hình ảnh được biểu diễn bằng tập hợp của các điểm ảnh (pixel)

nên khi tô màu thì một phần cạnh của đa giác bị màu tô tô đè lên phía trên.

Nhóm 7 – Lớp KHMT1K5 Trang 16

Page 18: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

IV. Một Số Hàm Hỗ Trợ Việc Sử Dụng Chương Trình

1. Hàm chuyển đổi dữ liệu.

Chuyển đổi dữ liệu kiểu TEXT nhập từ textbox sang kiểu INT.

2. Hàm kiểm tra dữ liệu nhập.

Hàm có chức năng kiểm tra dữ liệu nhập từ textbox có phải là số hay không. Nếu là số

trả về giá trị 1, nếu không phải trả về giá trị 0.

3. Hàm kiểm tra tạo đỉnh.

Hàm dùng để kiểm tra đỉnh vừa tạo. Nếu trùng với đỉnh trước đó đã tạo thì return False

Nhóm 7 – Lớp KHMT1K5 Trang 17

private int Doi(String s){ int x; x = int.Parse(s); return x;}

private int KTraDuLieu(String s, String s1){ int kt = 1; try { int x = int.Parse(s); int x1 = int.Parse(s1); } catch (Exception) { kt = 0; } return kt;}

private bool KTraTaoDinh(int x, int y){ if (SoPt > 0) { for (int i = 0; i < SoPt; i++) if ((DinhX[i] == x) && (DinhY[i] == y)) { return true; } return false; } else return false;}

Page 19: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

4. Hàm kiểm tra vị trí.

Hàm dùng để kiểm tra giá trị tọa độ điểm M(x, y) truyền vào dùng để tô màu Vết

Dầu Loang hoặc Tô Màu Biên có nằm trong hình vẽ hay không. Nếu nằm trong hình

trả về giá trị 1, nếu nằm bên ngoài trả về giá trị 0.

Nhóm 7 – Lớp KHMT1K5 Trang 18

private int KTraViTri(int xs, int ys){//Kiể�m tra nhanh vị trí cu�a điể�m so với các đỉ�nh cu�a hình vẽ if ((xs < Min(DinhX, SoPt)) || (xs > Max(DinhX, SoPt)) || (ys < Min(DinhY, SoPt)) || (ys > Max(DinhY, SoPt))) return 0; //kiể�m tra các trường hợp còn lại int sogd = 0, kt = 0; int[] GiaoDiem = new int[SoPt]; //duyệt dòng quét y = ys nể1u có giao điể�m với đa giác và vị trí đó lớn hơn xs thì tắng số1 giao điể�m lển 1 đơn vị for (int i = 0; i < SoPt - 1; i++) { if (((DinhY[i] <= ys) && (ys < DinhY[i + 1])) || ((DinhY[i] > ys) && (ys >= DinhY[i + 1]))) { GiaoDiem[i] = DinhX[i] + (int)((ys - DinhY[i]) * ((float)(DinhX[i + 1] - DinhX[i]) / (float)(DinhY[i + 1] - DinhY[i]))); if (GiaoDiem[i] > xs) sogd++; } }//Kiể�m tra cạnh cuố1i cùng if ((DinhY[0] <= ys && ys < DinhY[SoPt - 1]) || (DinhY[0] > ys && ys >= DinhY[SoPt - 1])) { GiaoDiem[SoPt - 1] = DinhX[SoPt - 1] + (int)((ys - DinhY[SoPt - 1]) * ((float)(DinhX[0] - DinhX[SoPt - 1]) / (float)(DinhY[0] - DinhY[SoPt - 1]))); if (GiaoDiem[SoPt - 1] > xs) sogd++; } if (sogd % 2 == 0) //Nể1u số1 giao điể�m chắ_n tức là điể�m nằm ngoài. { kt = 0; }//Kiể�m tra điể�m có nằm trển cạnh hoặc đỉ�nh cu�a đa giác hay khống else { Bitmap bm = new Bitmap(pictureBox1.Image); if(SsMau(bm.GetPixel(xs, ys), mv)) { kt = 0; } else { kt = 1; } } return kt;

Page 20: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

PHẦN 3: GIAO DIỆN CHƯƠNG TRÌNH VÀ HƯỚNG DẪN

SỬ DỤNG.

I. Hướng Dẫn Tạo Đa Giác Bằng Click Chuột Trái (Left Click).

Hình 5: Cửa sổ chính của chương trình khi mở.

Hình 6: Click chuột trái vào Vùng Tạo Hình Vẽ để vẽ hình.

Nhóm 7 – Lớp KHMT1K5 Trang 19

Click chuột trái

vào “Vùng Tạo

Hình Vẽ” ở chính

giữa để vẽ hình.

Page 21: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

Hình 7: Nếu chọn Tô Màu Loang hoặc Tô Màu Biên thì click chuột phải vào bên trong

hình vẽ và nhấn nút tô màu.

Hình 8: Nếu sử dụng phép tô màu Vết Dầu Loang nên vẽ hình nhỏ để tránh bị

treo máy.

Nhóm 7 – Lớp KHMT1K5 Trang 20

Click chuột phải

vào hình vẽ để

lấy chính xác

tọa độ 1 điểm

nằm trong hình. Sau khi đã có

tọa độ điểm nằm

trong hình vẽ thì

nhấn nút tô

màu.

Sau khi click chuột phải, tọa độ

tại điểm Click sẽ ở trong này.

Riêng tô màu Loang

người dùng nên vẽ

hình nhỏ để tránh bị

treo máy vì thiếu bộ

nhớ.

Page 22: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

Hình 9: Nếu sử dụng phép Tô Màu Dòng Quét thì không phải chọn trước điểm nằm

trong hình vẽ mà nhấn nút tô màu luôn.

II. Hướng Dẫn Tạo Đa Giác Bằng Cách Nhập Tọa Độ Cụ Thể.

Hình 10: Nhấn vào nút Nhập Tọa Độ để sang chế độ tạo đa giác bằng nhập số.

Nhóm 7 – Lớp KHMT1K5 Trang 21

Với tô màu Dòng Quét

thì không cần chọn điểm

nằm trong hình vẽ mà

có thể nhấn nút tô luôn.

Nhấn vào nút Nhập

Tọa Độ để chuyển chế

độ tạo đa giác từ Click

sang nhập tay từng

đỉnh.

Page 23: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

Hình 11: Nhập vào Hoành Độ và Tung Độ để tạo đỉnh đa giác.

Hình 12: Sau khi nhập đủ các đỉnh đa giác theo ý muốn thì tô màu đa giác

bình thường.

Nhóm 7 – Lớp KHMT1K5 Trang 22

Nhập lần lượt Hoành

Độ và Tung Độ của

đỉnh đa giác rồi nhấn

nút “Nhập Tọa Độ”.

Nhập lần lượt Hoành

Độ và Tung Độ của

đỉnh đa giác rồi nhấn

nút “Nhập Tọa Độ”.

Sau khi vẽ hình thì tô màu

như bình thường (riêng

với tô Biên và tô Loang

phải tọa độ điểm nằm

trong hình vẽ trước khi tô

màu).

Page 24: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

III. Một Số Chức Năng Khác Trong Chương Trình.

Hình 13: Chức năng đổi màu vẽ, màu tô, màu nền giúp người dùng có thêm sự

lựa chọn.

Hình 14: Chức năng Vẽ Lại.

Nhóm 7 – Lớp KHMT1K5 Trang 23

Nhập lần lượt Hoành

Độ và Tung Độ của

đỉnh đa giác rồi nhấn

nút “Nhập Tọa Độ”.

Nếu người dùng muốn thay đổi

màu vẽ, màu tô, màu nền có thể

nhấn vào nút đổi màu tương ứng.

Nút chức năng “Vẽ Lại”

dùng khi người dùng

muốn hủy bỏ đa giác

đang vẽ và vẽ lại từ đầu.

Page 25: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

Hình 15: Chức năng Hủy Đỉnh Vừa Tạo.

Hình 16: Form Thông Tin Phần Mềm.

Nhóm 7 – Lớp KHMT1K5 Trang 24

Nhập lần lượt Hoành

Độ và Tung Độ của

đỉnh đa giác rồi nhấn

nút “Nhập Tọa Độ”.

Nhập lần lượt Hoành

Độ và Tung Độ của

đỉnh đa giác rồi nhấn

nút “Nhập Tọa Độ”.

Nút chức năng “Hủy

Đỉnh Vừa Tạo” dùng khi

người dùng muốn hủy 1

đỉnh đa giác vừa tạo

xong

Form Thông Tin

Phần Mềm sau

khi nhấn nút

“Thông Tin Phần

Mềm”.

Page 26: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

Hình 17: Form Tài Liệu Tham Khảo

IV. Một Số Vấn Đề Khi Người Dùng Thao Tác Sai.

Hình 18: Báo lỗi khi người dùng sử dụng chưa vẽ hình nhưng nhấn nút tô màu.

Nhóm 7 – Lớp KHMT1K5 Trang 25

Form Tài Liệu Tham Khảo sau khi

nhấn nút “Tài Liệu Tham Khảo”.

Page 27: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

Hình 19: Báo lỗi khi người dùng tạo 2 đỉnh có cùng tọa độ.

Nhóm 7 – Lớp KHMT1K5 Trang 26

Page 28: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

Hình 20: Báo lỗi khi người dùng đổi Màu Tô trùng với Màu Nền hoặc Màu Vẽ.

Hình 21: Báo lỗi khi người dùng sử dụng phép tô màu Loang(Biên) nhưng giá trị của

điểm nằm trong hình vẽ chưa chính xác.

Nhóm 7 – Lớp KHMT1K5 Trang 27

Page 29: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

Hình 22: Báo lỗi khi người dùng sử dụng nhập vào giá trị tạo đỉnh chưa chính xác.

Nhóm 7 – Lớp KHMT1K5 Trang 28

Page 30: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

KẾT LUẬN

Đề tài của nhóm 7 chúng em có phần nào đó giúp mọi người hiểu rõ hơn về ba thuật

toán tô màu cơ bản trong Đồ Họa Máy Tính và có thể ứng dụng trong học tập.

Qua việc thực hiện đề tài: “Cài đặt các thuật toán tô màu đã học và thuật toán tô

màu dòng quét cho một n giác bất kỳ”, nhóm 7 – Lớp KHMT1K5 chúng em có

thêm nhiều hiểu biết hơn về kiến thức Đồ Họa Máy Tính nói chung và Đồ Họa Máy

Tính trên Visual C# nói riêng . Bên cạnh đó, việc làm đề tài còn giúp chúng em rèn

luyện thêm kỹ năng làm việc theo nhóm cho mỗi người.

Trong quá trình thực hiện đề tài, vì còn giới hạn về kiến thức nên một số hạn chế

của ba thuật toán tô màu nhóm 7 chưa khắc phục được, và đề tài của nhóm 7 khó có

thể tránh khỏi thiếu sót. Nhóm 7 – lớp KHMT1K5 rất mong nhận được ý kiến đóng

góp của tất cả mọi người để đề tài của nhóm có thể hoàn thiện hơn.

Chúng em xin chân thành cảm ơn Cô Vũ Minh Yến – Thạc Sĩ – Giảng Viên Khoa

CNTT trường ĐH Công Nghiệp Hà Nội – đã tận tình chỉ bảo và giúp đỡ chúng em

thực hiện đề tài này.

Một lần nữa chúng em xin chân thành cảm ơn !

Nhóm 7 – Lớp KHMT1K5 Trang 29

Page 31: K5_KHMT1_NHÓM 7_ĐỀ TÀI 6_BÁOCÁO

Báo cáo Bài Tập Lớn môn học Đồ Họa Máy Tính

TÀI LIỆU THAM KHẢO

Slide bài giảng Đồ Họa Máy Tính - Ths. Vũ Minh Yến - Trường ĐH

Công Nghiệp Hà Nội.

Giáo trình Kỹ Thuật Đồ Họa - Lâm Thị Ngọc Châu.

Bài viết: “Xử lý các trường hợp đặc biệt trong bài toán tô màu đa giác

bằng thuật toán Scanline” tại: http://www.schoolnet.vn/modules.php?

name=News&file=article&sid=2489

Và 1 số bài viết tại: http://msdn.microsoft.com/en-us/library/gg145023

Nhóm 7 – Lớp KHMT1K5 Trang 30