1. Trang chủ
  2. » Giáo Dục - Đào Tạo

xây dựng chương trình tìm kiếm trên bề rộng đồ thị hiển thị ở nhiều dạng như 2D, 3D

16 82 0

Đ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 180,73 KB

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

Nội dung

xây dựng chương trình, tìmkiếm trên bề rộng đồ thị, hiển thị ở nhiều dạng, như 2D, 3D, học phần đồ họa máy tính, báo cáo bài tập lớn

Trang 1

TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM KHOA CÔNG NGHỆ THÔNG TIN

-*** -BÁO CÁO BÀI TẬP LỚN HỌC PHẦN “ĐỒ HỌA MÁY TÍNH”

Đề tài:

XÂY DỰNG CHƯƠNG TRÌNH TÌM KIẾM KIẾM TRÊN BỀ RỘNG ĐỒ

THỊ ĐỒ THỊ HIỂN THỊ Ở NHIỀU DẠNG NHƯ 2D,3D.

Sinh viên thực hiện: Nguyễn Văn Hoan– Mã sv: 68651

Nguyễn Văn Linh – Mã sv: 34567

Hải Phòng, tháng 04 năm 2019

Trang 2

TRƯỜNG ĐẠI HỌC HÀNG HẢI KHOA CÔNG NGHỆ THÔNG TIN

BỘ MÔN KHOA HỌC MÁY TÍNH

-*** -BÀI TẬP LỚN HỌC PHẦN: ĐỒ HỌA MÁY TÍNH

Mã đề tài: 03

1 Tên đề tài

Xây dựng chương trình tìm kiếm theo bề rộng trên đồ thị Đồ thị hiển thị ở nhiều dạng như 2D,3D.

2 Mục đích

Xây dựng chương trình tìm kiếm theo bề rộng trên đồ thị Sử dụng đồ họa máy tính và thư viện OpenGL

3 Công việc cần thực hiện

dụng thư viện openGL

Trang 3

4 Yêu cầu

cáo có thể kết xuất thành tệp định dạng PDF và nộp qua email (không bắt buộc phải in ấn)

5 Tài liệu tham khảo

- Trịnh Thị Vân Anh, Kỹ Thuật Đồ Họa NXB HVCN BCVT, 2006.

- Bài giảng Đồ Họa Máy Tính Khoa CNTT, ĐH HH VN.

Hải Phòng, tháng 04 năm 2019

NGƯỜI HƯỚNG DẪN

Trang 4

M c L c ụ ụ

1 TÌM HIỂU CHƯƠNG TRÌNH 6

1.1 Nền tảng của chương trình 6

1.2 Giới thiệu về chương trình 6

1.3 Cách thêm thư viện openGL trên Visual Studio 6

2 CẤU TRÚC DỮ LIỆU VÀ HÀM TRONG CHƯƠNG TRÌNH 9

2.1 Cấu trúc dữ liệu 9

2.2 Các hàm trong chương trình 9

2.2.1 Hàm vẽ hình tròn 9

2.2.2 Hàm truyền tọa độ để vẽ các hình trong 9

2.2.3 Hàm vẽ đường thẳng 10

2.2.4 Hàm truyền số vào trong hình tròn 11

2.2.5 Hàm thuật toán bfs 12

2.2.6 Hàm Main 15

3 KẾT LUẬN 16

Trang 5

LỜI MỞ ĐẦU

Như chúng ta đã thấy trong những năm gần đây sự phát triển vượt bậc về công nghệ đồ họa đã mang lại cho con người chúng ta vô vàn sự tiện nghi, những trải nghiệm mới mẻ, chân thực

dùng trong việc chuyển đổi qua lại giữa dữ liệu và hình ảnh bằng máy tính Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về ở toán học, các thuật toán cũng như các kĩ thuật để cho phép tạo, hiển thị và điều khiển hình ảnh trên màn hình máy tính Đồ họa máy tính có liên quan ít nhiều đến một số lĩnh vực như đại số, hình học giải tích, hình học họa hình, quang học, và kĩ thuật máy tính,

đặc biệt là chế tạo phần cứng (các loại màn hình, các thiết bị xuất, nhập, các vỉ mạch đồ họa ).

Là sinh viên khoa Công nghệ thông tin trường Đại học Hàng Hải Việt Nam Chúng em cũng được tiếp xúc với môn học đồ họa máy tính Với những kiến thức

em đã được học và được sự hướng dẫn của thầy Nguyễn Hạnh Phúc chúng em đã thực hiện đề tài “ Xây dựng chương trình tìm kiếm theo bề rộng trên đồ thị Đồ thị hiện thị ở nhiều dạng 2D, 3D” Trong quá trình thực hiện nghiên cứu chúng em đã

sử dụng thư viện đồ họa openGL đang được sử dụng rộng rãi hiện nay

Có lẽ rằng chương trình và báo cáo của chúng em chưa được chuyên nghiệp, hoàn chỉnh nhất, còn có những thiếu xót Vì thế em rất mong thầy cô và các bạn có thể góp ý để nhóm em xây dựng đề đạt kết quả tốt nhất có thể

Trang 6

1 TÌM HIỂU CHƯƠNG TRÌNH

1.1Nền tảng của chương trình.

 Chương trình được viết bằng ngôn ngữ lập trình C++

 Chương trình có sử dụng thư viện đồ họa hỗ trợ là OpenGl

1.2Giới thiệu về chương trình.

Chương trình tìm kiếm theo bề rộng của đồ thị

Để thục hiện chương trình chúng ta cần nhập vào số cạnh của đồ thị Các điểm nối với nhau của đồ thị và một điểm bắt đầu để duyệt đồ thị

Trong chương trình có sử dụng thư viện openGl vì thế để chạy chương trình mà không phát sinh lỗi thì chúng ta nên thêm thư viện openGL vào IDE mà bạn đnag lập trình

1.3Cách thêm thư viện openGL trên Visual Studio.

I Cài đặt Visual Studio Nếu chưa cài đặt Visual Studio trên máy tính chúng ta thực hiện 2 bước sau

1 Tải tập tin cài đặt Visual Studio C++ từ

http://www.microsoft.com/express/Downloads/

2 Thực thi tập tin cài đặt và làm theo hướng dẫn để cài đặt Visual Studio C++

II Cài đặt thư viện GLUT

12ncmty5g6mgr7t

2 Giải nén tập tin glut-3.7.6-bin-32and64.zip ra thư mục glut-3.7.6-bin

3 Trong thư mục glut-3.7.6-bin:

Với phiên bản Windows 32bit (viết ứng dụng 32 bit)

Trang 7

 Sao chép tập tin glut.h và glut.def vào thư mục C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\gl

SDKs\Windows\v7.0A\Lib

Với phiên bản Windows 64bit (viết ứng dụng 32 bit và 64 bit)

Files(x86)\Microsoft SDKs\Windows\v7.0A \Include\gl

Files(x86)\Microsoft SDKs\Windows\v7.0A\Lib

Files(x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64

C:\windows\SysWOW64

III Cài đặt GLEW (Nên cài đặt)

Giải nén tập tin glew-1.10.0-win32.zip vào thư mục có tên glew

Với phiên bản Windows 32bit

Files\Microsoft SDKs\Windows\v7.0A\Include\gl

C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib

C:\windows\system32

Với phiên bản Windows 64bit

Trang 8

 Sao chép tất cả tập tin trong thư mục include/GL vào thư mục C:\Program Files(x86)\Microsoft SDKs\Windows\v7.0A \Include\gl

C:\Program Files(x86)\Microsoft SDKs\Windows \v7.0A\Lib

Sao chép tập tin glew32.dll trong thư mục bin/Release/x64/ vào thư mục

C:\windows\SysWOW64

IV Tạo Visual Studio C++ project với OpenGL

- Mở chương trình Visual Studio C++

- Nhấn vào mục Create new project trong Visual Studio

- Lựa chọn Win32 Console Application, nhập tên của project và nhấn nút OK

- Trong cửa sổ wizard hiện ra sau đó, nhấn vào mục Application Settings và chọn mục Empty Project, sau đó nhấn nút Finish

- Lựa chọn Add New Item từ Project menu, sau đó chọn loại tập tin cpp, nhập tên tập tin và nhấn OK

- Nội dung trong tập tin mã nguồn vừa thêm như phần V dưới đây

- Nhấn chuột phải vào Project và chọn Properties

- Ở cửa sổ vừa hiện ra, ở trên cùng, đổi Configuration thành All

Configuraitons

- Khi đó ở phía bên phải sẽ hiện ra danh mục, trong đó có mục Addititonal Dependencies, thêm ";glut32.lib" vào sau mục này, nếu có sử dụng glew, cũng thêm cả ";glew32.lib" vào sau đó

- Nhấn nút OK và chọn Build Solution từ Build menu

- Thực thi chương trình bằng cách nhấn tổ hợp phím Ctrl+F5

- Nếu cài đặt đúng chính xác tất cả các bước, chương trình khi thực thi sẽ có kết quả như sau

Trang 9

2 CẤU TRÚC DỮ LIỆU VÀ HÀM TRONG CHƯƠNG TRÌNH

2.1Cấu trúc dữ liệu.

 Bước 1: khi chạy chương trình

 Bước 2: Nhập vào số cạnh của đồ thị

 Bước 3: Nhập vào một điểm bắt đầu để duyệt đồ thị

 Bước 4: kết quả sẽ hiển thị cách mà thuật toán bfs duyệt đồ thị của bạn

2.2Các hàm trong chương trình.

2.2.1 Hàm v  hình tròn.

void DrawCircle(float cx, float cy, float r

{

for (int ii = 0; ii <1000; ii++)

{

float theta = 2.0f * 3.1415926f * float(ii) / float(1000);

float x = r * cosf(theta);//calculate the x component float y = r * sinf(theta);//calculate the y component

glVertex2f(x + cx, y + cy);//output vertex

}

glEnd();

}

Chức năng của hàm là : vẽ hình tròn tương ứng với các điểm trong đồ thị Tham số truyền vào hàm bao gồm tọa độ tâm hình tròn và bán kính

2.2.2 Hàm truy n t a đ  đ  v  các hình trong ề ọ ộ ể ẽ

Trang 10

void TruyenDiem() // Truyền tọa độ vào để vẽ hình tròn

{

DrawCircle(400, 400, 20);

DrawCircle(400, 300, 20);

}

Do chúng ta đã xây dựng được một hàm vẽ hình tròn Để sử dụng hàm này chúng

ta xây dựng một hàm TruyenDiem() để có thể vẽ ra các hình tròn tại vị trí khác nhau Thông tin truyền vào hàm bao gồm tọa độ tâm (X,Y) và bán kính của hình tròn

Kết quả ta có :

2.2.3 Hàm v  đ ng th ng.ẽ ườ ẳ

{

glVertex2i(400, 400 - 20);

glVertex2i(400, 300 + 20);

glVertex2i(400, 300 - 20);

glVertex2i(400, 200 + 20);

glEnd();

glFlush();

Trang 11

Để nối được các hình tròn lại với nhau chúng ta cần một hàm vẽ đường thẳng để làm việc đó Xây dựng một hàm vẽ đường thẳng Trong hàm này sẽ sử dụng

glVertex2i(400, 300 + 20); trong đó chúng ta truyền vào vị trí của 2 điểm cần nối Như vậy chúng ta sẽ nối được 2 hình tròn lại với nhau

Kết quả

2.2.4 Hàm truy n s  vào trong hình tròn.ề ố

void drawString(void * font, const char *s, floatx, float y) // truyền giá trị vào trong hình tròn

{

unsignedint i;

glRasterPos2f(x, y);

for (i = 0; i < strlen(s); i++)

Trang 12

Xây dựng hàm drawString với 4 giá trị truyền vào hàm Đối với đối số đầu tiên

mà chúng ta muốn chuyền vào Đối số thứ 3 , 4 là tọa độ mà chuỗi chuyền vào sẽ đứng

Kết quả ta được

2.2.5 Hàm thu t toán bfs.

Thuật toán bfs là gì:

Trong lý thuyết đồ thị, tìm kiếm theo chiều rộng (BFS) là một thuaật toán tìm

đỉnh của đồ thị; (b) thêm các đỉnh kề với đỉnh vừa cho vào danh sách có thể hướng tới tiếp theo Có thể sử dụng thuật toán tìm kiếm theo chiều rộng cho hai mục đích: tìm kiếm đường đi từ một đỉnh gốc cho trước tới một đỉnh đích, và tìm kiếm đường

đi từ đỉnh gốc tới tất cả các đỉnh khác Trong đồ thị không có trọng số, thuật toán

Trang 13

tìm kiếm theo chiều rộng luôn tìm ra đường đi ngắn nhất có thể Thuật toán BFS bắt đầu từ đỉnh gốc và lần lượt nhìn các đỉnh kề với đỉnh gốc Sau đó, với mỗi đỉnh trong số đó, thuật toán lại lần lượt nhìn trước các đỉnh kề với nó mà chưa được quan sát trước đó và lặp lại

Mô tả thuật toán

Queue ban đầu rỗng

while (not empty())

{

for (v = 1; v <= n; v++)

{

} }

Bước 1 : Lấy điểm đầu tiên cần duyệt đẩy vào Queue đánh dấu đỉnh đó là đã được đọc

Bước 2 : Duyệt tất cả các điểm kề với điểm thứ nhất

Bước 3 : Duyệt các điểm kề với điểm thứ nhất Tìm các điểm kề với điểm đang dược duyệt

Chương trình

#include <bits/stdc++.h>

using namespace std;

Trang 14

int a[101][101];

queue <int> q;

int n,m,Free[101], u,v,s;

void BFS(int s)

{

q.push(s);

Free[s]=0;

while (!q.empty())

{

int u = q.front();

q.pop();

cout << u << endl;

for (int v=1; v<=n; v++)

if (Free[v] && a[u][v]==1) {

Free[v] = 0;

q.push(v);

}

}

}

int main()

{

cin >> n >> m>> s;

for (int i=1; i<=n; i++)

for (int j=1; j<=n; j++)

a[i][j]=0;

for (int i=1; i<=m; i++)

{

cin >> u>> v;

a[u][v]=1;

a[v][u]=1;

}

for (int i=1; i<=n; i++)

Free[i]=1;

BFS(s);

return 0;

}

Kết quả ta thu được.

Trang 15

2.2.6 Hàm Main 

Chức năng của hàm main là gọi các hàm có trong trương trình và đây là nơi mà chương trình sẽ khỏi chạy đầu tiên

Trang 16

3 KẾT LUẬN

Qua việc thực hiện nghiên cứu đề tài “xây dựng chương tình thuật toán tìm kiếm theo bề rộng của đồ thị Đồ thị hiển thị ở nhiều dạng 2D, 3D” Nhóm chúng em đã được biết thêm rất nhiều về môn đồ họa máy tính Đặc biệt hiểu rõ hơn về thuật toán bfs Bên cạnh đó, việc làm nghiên cứu giúp chúng em đoàn kết hơn, rèn luyện cho chúng e kỹ năng làm viễ nhóm

Trong quá trình thực hiện đề tài có rất nhiều ý tưởng hay, độc đáo Nhưng do kiến thức của chúng em hạn hẹp và thời gian không cho phép nên chúng em chưa thể thực hiện được những ý tưởng đó Tuy nhiên chúng em đã cố gắng để xây dựng một chương trình hoàn trỉnh nhất, đẹp nhất Trong quá trình xây dựng chương trình nhóm chúng em khó tránh khỏi những sai sót Vì vậy em rất mong rằng thầy và các bạn cùng góp ý với nhóm em để có thể hòa thành sản phẩm một cách hoàn trỉnh nhất

Chúng em xin cảm ơn thầy Nguyễn Hạnh Phúc đã tận tình giảng dạy chúng em trong môn Đồ họa máy tính Giúp đỡ chúng em trong quá trình nghiên cứu đề tài Chia sẻ những tài liệu hay về thư viện OpenGl cũng như các kĩ năng nập trình Một lần nữa chúng em xin chân thành cảm ơn !

Ngày đăng: 28/09/2019, 11:33

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