ĐẠI HỌC THÁI NGUYÊN

TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

PHẠM HẢI NINH

CÁC THUẬT TOÁN TÍNH DIỆN TÍCH VÀ

THỂ TÍCH VẬT THỂ KHÔNG GIAN VÀ ỨNG DỤNG

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

THÁI NGUYÊN - 2015

ĐẠI HỌC THÁI NGUYÊN

TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

PHẠM HẢI NINH

CÁC THUẬT TOÁN TÍNH DIỆN TÍCH VÀ

THỂ TÍCH VẬT THỂ KHÔNG GIAN VÀ ỨNG DỤNG

Chuyên ngành: KHOA HỌC MÁY TÍNH

Mã số: 60 48 01 01

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

NGƢỜI HƢỚNG DẪN KHOA HỌC

PGS TSKH NGUYỄN XUÂN HUY

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

THÁI NGUYÊN - 2015

i

LỜI CAM ĐOAN

Tôi xin cam đoan luận văn là công trình nghiên cứu của riêng cá

nhân tôi, kết quả của luận văn hoàn toàn là kết quả của tự bản thân tôi tìm

hiểu, nghiên cứu dƣới sự hƣớng dẫn của giáo viên hƣớng dẫn PGS TSKH

Nguyễn Xuân Huy.

Tôi hoàn toàn chịu trách nhiệm về tính pháp lý quá trình nghiên cứu

khoa học của luận văn này.

Thái Nguyên, tháng 9 năm 2015

Học viên

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Phạm Hải Ninh

ii

LỜI CẢM ƠN

Lời đầu tiên, em xin gửi lời biết ơn sâu sắc đến PGS TSKH Nguyễn

Xuân Huy người đã tận tình hướng dẫn, chỉ bảo, giúp đỡ em trong suốt

quá trình làm luận văn.

Em cũng xin gửi lời cảm ơn đến các thầy cô giáo trường Đại học

Công nghệ thông tin và Truyền thông - Đại học Thái Nguyên, các thầy cô

Viện Công nghệ thông tin đã truyền đạt những kiến thức và giúp đỡ em

trong suốt quá trình học của mình.

Học viên xin gửi lời cảm ơn tới Ban giám hiệu trường THPT Hồng

Bàng - Hải Phòng đã tạo điều kiện thuận lợi cho học viên tham gia khóa

học và quá trình hoàn thành luận văn.

Và học viên cũng xin gửi lời cảm ơn tới các đồng nghiệp, gia đình và

bạn bè những người đã ủng hộ, động viên tạo mọi điều kiện giúp đỡ để học

viên có được kết quả như ngày hôm nay.

Thái Nguyên, tháng 9 năm 2015

Học viên

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Phạm Hải Ninh

iii

MỤC LỤC

Trang

LỜI CAM ĐOAN ....................................................................................... i

LỜI CẢM ƠN ............................................................................................ ii

MỤC LỤC ................................................................................................ iii

DANH MỤC CÁC KÍ HIỆU, CHỮ CÁI VIẾT TẮT ................................. v

DANH MỤC CÁC HÌNH ......................................................................... vi

MỞ ĐẦU ................................................................................................... 1

Chƣơng 1: CÁC KHÁI NIỆM CƠ SỞ ....................................................... 2

1.1. Tổng quan về đề tài . ........................................................................ 2

1.1.1. Giới thiệu đề tài. ....................................................................... 2

1.1.2. Nội dung của đề tài, các vấn đề cần giải quyết. ........................ 2

1.1.3. Phƣơng pháp nghiên cứu. ......................................................... 3

1.1.4. Phạm vi ứng dụng. ................................................................... 3

1.1.5. Kết quả đạt đƣợc. ..................................................................... 3

1.1.6. Bố cục của luận văn.................................................................. 4

1.2. Khái niệm cơ sở . ............................................................................. 5

1.2.1. Khái quát cách tính diện tích các hình cơ bản. .......................... 5

1.2.2. Khái quát cách tính thể tích các hình cơ bản. .......................... 10

Chƣơng 2: MỘT SỐ THUẬT TOÁN TÍNH DIỆN TÍCH VÀ THỂ TÍCH

VẬT THỂ KHÔNG GIAN ...................................................................... 14

2.1. Thuâ ̣t toán tính diện tích của đa giác theo tọa độ đỉnh . .................. 14

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

2.2. Thuật toán tìm diện tích hình chữ nhật tối đại. .............................. 25

iv

2.3. Thuật toán tính thể tích vùng nƣớc đo ̣ng . ...................................... 33

Chƣơng 3: ỨNG DỤNG VÀ THỬ NGHIỆM .......................................... 45

3.1. Cơ sở lý thuyết và lựa chọn bài toán ứng dụng . ............................ 45

3.2. Bài toán: Dự án xây dựng sân bay. ................................................ 49

3.2.1. Phát biểu bài toán. .................................................................. 49

3.2.2. Mô tả dƣ̃ liê ̣u. ......................................................................... 49

3.2.3. Thiết kế các bƣớ c thƣ̣c hiê ̣n. ................................................... 50

3.3. Bài toán: Tính thể tích chứa nƣớc cho một lòng hồ . ...................... 54

3.3.1. Phát biểu bài toán. .................................................................. 54

3.2.2. Mô tả dữ liệu. ......................................................................... 55

3.3.3. Thiết kế các bƣớ c thƣ̣c hiê ̣n. ................................................... 56

3.4. Cài đặt chƣơng trình ...................................................................... 58

3.4.1. Chƣơng trình tính diê ̣n đa giác theo to ̣a đô ̣ đỉnh . .................... 58 3.4.2. Chƣơng trình tìm diện tích hình chữ nhật tối đại . ................... 59 3.4.3. Chƣơng trình tính thể tích vùng nƣớc đo ̣ng . ........................... 61

KẾT LUẬN ............................................................................................. 64

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

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

PHỤ LỤC ................................................................................................ 66

v

DANH MỤC CÁC KÍ HIỆU, CHỮ CÁI VIẾT TẮT

Cơ sở dữ liệu CSDL:

Geographic Information System GIS:

(Hệ thống thông tin địa lý )

Hình chữ nhật HCN :

INP: Input (Dƣ̃ liê ̣u vào)

Nhà xuất bản NXB:

OUT: Output (Dƣ̃ liê ̣u ra)

S:

V:

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Diê ̣n tích bề mă ̣t Thể tích (Dung tích) của vật thể Ví dụ VD:

vi

DANH MỤC CÁC HÌNH

Trang

Hình 1.1: Công thƣ́ c tính diê ̣n tích củ a mô ̣t số hình đă ̣c biê ̣t ...................... 7 Hình 1.2: Diện tích S của hình phẳng giới hạn bởi đồ thị các hàm số

liên tục trên đoạn [a, b] và hai đƣờng thẳng x = a, x = b .. 8

Hình 1.3: Công thƣ́ c tính thể tí ch củ a mô ̣t số khối hình đă ̣c biê ̣t .............. 12 Hình 1.4: Thể tích vật thể tròn xoay giớ i hạn bởi đồ thị hàm số y = f(x) ,

trục hoành và hai đƣờng thẳng x = a, x = b ............................................ 13

Hình 2.1: Hình chữ nhâ ̣t ABCD trong mă ̣t phẳng to ̣a đô ̣ Oxy .................. 16

Hình 2.2: Ngũ giác lõm ABCDE trong mặt phẳng tọa độ Oxy ................. 17

Hình 2.3: Ngũ giác lồi ABCDE trong mặt phẳng tọa độ Oxy ................... 18

Hình 2.4: Hình thang ABCD trong mặt phẳng tọa độ Oxy ....................... 19

Hình 2.5: Đa giác lồi, lõm trong mặt phẳng tọa độ Oxy ........................... 20

Hình 2.6: VD1 - Ma trâ ̣n chƣ́ a các kí tƣ̣ 0 và 1 ......................................... 25 Hình 2.7: VD2 - Ma trâ ̣n chƣ́ a các kí tƣ̣ 0 và 1 ......................................... 26 Hình 2.8: VD3 - Ma trâ ̣n chƣ́ a các kí tƣ̣ 0 và 1 ......................................... 27 Hình 2.9: VD1 - Ma trâ ̣n và cô ̣t thể hiện độ cao của các cột vuông cạnh 1

đơn vi ̣. ...................................................................................................... 34

Hình 2.10: VD2 - Ma trâ ̣n và cô ̣t thể hiê ̣n đô ̣ cao củ a các cô ̣t vuông ca ̣nh 1

đơn vi ̣. ...................................................................................................... 35

Hình 2.11: VD3 - Ma trâ ̣n và cô ̣t thể hiê ̣n đô ̣ cao củ a các cô ̣t vuông ca ̣nh 1

đơn vi ̣. ...................................................................................................... 35

Hình 3.1: Ma trận không gian của một file ảnh raster có cấu trúc pixel .... 46

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Hình 3.2: Các đối tƣợng không gian đƣợc mã hoá trong mô hình Raster . 47

vii

Hình 3.3: Các điểm ả nh đƣợc mã hoá trong mô hình Raster nhƣ mô ̣t ma

trâ ̣n số nguyên .......................................................................................... 49

Hình 3.4: Vùng địa hình khảo sát xây dựng sân bay ................................. 50

Hình 3.5: Ma trâ ̣n số nguyên thể hiê ̣n theo đô ̣ cao vù ng đi ̣a hình ............. 51 Hình 3.6: Vùng địa hình có một hồ chứa nƣớc ......................................... 56

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Hình 3.7: Ma trâ ̣n số nguyên theo đô ̣ cao vù ng có hồ ............................... 57

1

MỞ ĐẦU

Lịch sử của Toán học gắn liền với sự phát triển của loài ngƣời,

những khái niệm đƣợc hình thành hầu hết xuất phát từ đời sống thực tiễn,

từ nhu cầu tìm tòi và khám phá của con ngƣời. Một ví dụ kinh điển cho sự

ra đời ngành hình học thời Ai Cập cổ đại đấy là việc chia ruộng cho ngƣời

dân. Nếu không có sự ra đời các khác niệm chiều dài, chiều rộng, diện tích,

thể tích, và số đo góc, có lẽ những ngƣời Ai Cập khó có thể phân chia

ruộng một cách công bằng.

Thời xƣa khi con ngƣời chƣa có sự hỗ trợ của máy móc nên bản thân

các bài toán phát sinh chỉ là các bài đơn giản, số lƣợng tính toán là cỡ nhỏ,

việc tính diện tích và thể tích chỉ áp dụng đối với các hình đặc biệt. Với các

hình phức tạp ngƣời ta tính bằng phƣơng pháp gần đúng hoặc chia ra thành

các hình nhỏ. Vì vậy các công cụ toán để sử dụng cũng là những công thức

vô cùng đơn giản và sơ khai nhƣ phép cộng, phép chia, hay khai căn một

cách gần đúng.

Ngày nay, cùng với sự hỗ trợ của máy tính, các bài toán con ngƣời

có thể đặt ra là vô cùng trừu tƣợng và phức tạp, với số lƣợng phép tính lớn,

vƣợt xa ra khỏi khả năng tự nhiên của một con ngƣời. Vì vậy các công cụ

tính toán và các khái niệm mới cũng hết sức trừu tƣợng.

Trong khuôn khổ của mình, luận văn sẽ trình bày về một số thuật

toán tính diện tích và thể tích nhằm tính toán diện tích bề mặt cho các vật ,

cho các đi ̣a hình trong thƣ̣c tế . Đồng thời đề cập về ứng dụng của các thuật toán trên để từ đó cài đặt chƣơng trình thử nghiệm làm rõ hơn một số nội

dung về tính toán trừu tƣợng hoặc xử lí những khối lƣợng tính toán phức

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

tạp mà con ngƣời cần tính toán.

2

Chƣơng 1: CÁC KHÁI NIỆM CƠ SỞ

1.1. Tổ ng quan về đề tài

1.1.1. Giới thiệu đề tài

Việc tính diện tích và tính thể tích luôn đƣợc con ngƣời quan tâm và

ứng dụng trong thực tế. Để xác định, tính toán về mặt định lƣợng trên bề

mặt hay dung tích chúng ta cần phải dựa vào số đo là diện tích và thể tích.

Trong các lĩnh vực nhƣ xây dựng, thủy lợi, khai khoáng, ... con ngƣời cũng

cần phải dựa vào các con số tính toán nhiều chính là diện tích và thể tích

vật thể. Trong thƣ̣c tế nhƣ̃ng bài toán về tính diê ̣n tích và thể tích có thể có nhiều cách tính và phƣơng pháp tính khác nhau . Vớ i đề tài luận văn ”Các thuật toán tính diện tích và thể tích vật thể không gian và ứng dụng” nhằm

tìm hiểu các cách tiếp cận về cách tính diện tích và thể tích của các hình,

các vật thể đặc biệt. Đồng thời phân tích bài toán , hình thành ý tƣởng và xây dựng thuật toán về cách tính diện của một đa giác khi biết tọa độ đỉnh ,

tìm diện tích phẳng là hình chữ nhật tối đại và tính thể tích vùng nƣớc

đo ̣ng. Từ đó đề tài cũng nêu và giải quyết một số ứng dụng có trong thực tế

mà áp dụng từ các thuật toán đã trình bày.

1.1.2. Nội dung của đề tài, các vấn đề cần giải quyết

- Giới thiệu tổng quan việc tính diện tích, thể tích vật thể không gian.

- Tìm hiểu các thuật toán liên quan tính diện tích, thể tích vật thể

không gian.

- Cài đặt thử nghiệm các thuật toán đã xây dựng.

- Ứng dụng và xây dựng chƣơng trình bài toán ứng dụng trong một

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

số lĩnh vực có trong thực tế.

3

1.1.3. Phƣơng pháp nghiên cứu

- Phƣơng pháp nghiên cứu lý thuyết: Tìm hiểu, tổng hợp tài liệu,

phân tích, đánh giá các phƣơng pháp.

- Phƣơng pháp đối sánh .

- Phƣơng pháp trao đổi khoa học, lấy ý kiến chuyên gia.

- Phƣơng pháp thực nghiệm: xây dựng chƣơng trình cụ thể để thử

nghiệm, phân tích, đánh giá kết quả đạt đƣợc.

1.1.4. Phạm vi ứng dụng

Phạm vi nghiên cứu của đề tài đƣợc giới hạn trong việc xây dựng

các phƣơng pháp thực hiện, chú trọng vào mô hình tính toán, thuật toán và

chƣơng trình máy tính. Tính toán thực nghiệm cho một khu vực địa lý cụ

thể.

Ứng dụng tính diện tích phẳng tối đa cho phép trên một địa hình và

thể tích chứa nƣớc của một lòng hồ.

1.1.5. Kết quả đạt đƣợc

Tổng hợp mô ̣t số cách tiếp câ ̣n để tính diện tích, thể tích các hình,

khối hình học và các vật thể cơ bản.

Phân tích bài toán , hình thành ý tƣởng và xây dựng thuật toán cũng

nhƣ chƣơng trình cho các thuâ ̣t toán sau : Thuâ ̣t toán tính diện tích đa giác theo to ̣a đô ̣ đỉnh, thuật toán tìm diện tích hình chữ nhật tối đại và thuật toán tính thể tích vùng nƣớc đo ̣ng.

Thiết lập tƣơng quan giữa các thuật toán vào thực tế để tính toán

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

những khối lƣợng công việc tƣởng nhƣ trừu tƣợng, khó tính toán.

4

Nâng cao kĩ năng về phân tích dữ liệu thực tế với chƣơng trình chạy

thực nghiệm.

1.1.6. Bố cục của luận văn

Chƣơng 1: CÁC KHÁI NIỆM CƠ SỞ

Bố cục của luận văn bao gồm 3 chƣơng:

Chƣơng này học viên trình bày tổng quan về đề tài và tóm tắt các

cách tiếp cận để tính diện tích đối với các hình đặc biệt, tính thể tích đối

Chƣơng 2: MỘT SỐ THUẬT TOÁN TÍNH DIỆN TÍCH VÀ THỂ

với các khối hình đặc biệt.

TÍCH VẬT THỂ KHÔNG GIAN

Chƣơng này học viên trình bày các thuật toán sau: Thuâ ̣t toán tính diện tích đa giác theo to ̣a đô ̣ đỉnh, thuật toán tìm diện tích hình chữ nhật tối

Chƣơng 3: ỨNG DỤNG VÀ THỬ NGHIỆM

đại và thuật toán tính thể tích vùng nƣớc đo ̣ng.

thuật toán đƣợc trình bày ở Dựa vào cơ sở lý thuyết GIS và các

chƣơng 2, trong chƣơng này học viên trình bày cụ thể hơn về bài toán ứng

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

dụng trong thực tế trên mô ̣t vù ng đi ̣a hình .

5

1.2. Khái niệm cơ sở

1.2.1. Khái quát cách tính diện tích các hình cơ bản

Diện tích là độ đo dùng để đo độ lớn bề mặt của vật thể . Diện tích bề

mặt của một đối tƣợng là toàn bộ những gì ta có thể nhìn thấy của đối

tƣợng. Diện tích có đơn vị đo là bình phƣơng của khoảng cách (khoảng

cách mũ 2). Trong hệ đo lƣờng quốc tế, nếu đơn vị đo của khoảng cách là cm thì đơn vị đo của diện tích là cm2, nếu đơn vị đo của khoảng cách là km thì đơn vị đo của diện tích là km2, nếu đơn vị đo của khoảng cách là m thì đơn vị đo của diện tích là m2 [6].

Việc tính diện tích các khối hình chúng ta có thể có những cách tiếp

cận, những cách tính khác nhau. Đối với các hình đặc biệt ta thƣờng dựa

vào độ dài các thông số cơ bản của hình, có cách tính nhanh và dễ nhớ. Ví

nhƣ đoạn thơ sau có thể mô tả nhanh về công thức tính diện tích với một số

hình đặc biệt:

Muốn tính diện tích hình thang

Đáy lớn, đáy nhỏ ta mang cộng vào

Rồi đem nhân với đƣờng cao

Chia đôi kết quả thế nào cũng ra.

Chữ nhật ta đã học qua

Dài nhân với rộng thế là ra ngay

Hình vuông quả thật là hay

Cạnh nhân với cạnh ra ngay tức thì

Tam giác thì có khó chi

Cao nhân với đáy ta thì chia đôi

Hình tròn tính cũng dễ thôi

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Bán kính bán kính nhân pi là thành

6

Khối hộp làm cũng thật nhanh

Muốn tìm diện tích xung quanh khó gì

Sau đây là tổng quan về tính diện tích của các hình đặc biệt thông

Hình tam giác (Cách 1)

Hình tam giác (Cách 2)

Hình thoi

Hình tứ giác

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

qua các yếu tố hình học cơ bản và công thức tính [6], [7]:

Hình thang

Hình tròn

Hình 1.1: Công thứ c tính diê ̣n tích của một số hình đặc biê ̣t

7

Từ những công thức với các hình đặc biệt trên khi muốn tính diện tích

của các hình có hình thù phức tạp ngƣời ta có thể chia hình đó thành những

hình đặc biệt nhỏ khác nhau. Công việc tính diện tích lúc này trở nên đơn

giản hơn là tổng diện tích của các hình nhỏ đặc biệt, tuy nhiên không phải

hình nào cũng có thể chia về các hình đặc biệt và việc chia có thể cho ta kết

quả gần đúng chƣa kể chúng ta phải sử dụng tƣơng đối nhiều phép đo.

Trong toán học ngƣời ta ứng dụng tích phân để tính diện tích của các

hình, việc tính diện tích theo cách này chúng ta phải biết hoặc xác định

đƣợc hàm số giới hạn hình cần tính [5].

Ví dụ 1: Diện tích hình phẳng giới hạn bởi một đƣờng cong.

Nếu hàm số y = f(x) liên tục trên đoạn [a, b] thì diện tích S của hình

phẳng giới hạn bởi đồ thị hàm số y = f(x), trục hoành và hai đƣờng thẳng

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

x = a, x = b là:

8

Ví dụ 2: Diện tích hình phẳng giới hạn bởi hai đƣờng cong và hai

đƣờng thẳng x = a, x = b.

Diện tích S của hình phẳng giới hạn bởi đồ thị các hàm số

liên tục trên đoạn [a, b] và hai đƣờng thẳng x = a, x = b, ta

Hình 1.2: Diện tích S của hình phẳng giới hạn bởi đồ thị các hàm số

liên tục trên đoạn [a, b] và hai đường thẳng x = a, x = b

có công thức sau:

Trong công thức trên ta chia thành các trƣờ ng hơ ̣p cu ̣ thể (Hình1.2):

Trƣờng hợp 1: Ta có công thức khai triển của S

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

nếu

9

Trƣờng hợp 2: Ta có công thức khai triển của S

nếu

Trƣờng hợp 3: Ta có công thức khai triển của S

(trong đó c là hoành độ giao điểm của hai đồ thị hai hàm số

)

Có một cách tiếp cận khác về cách tính diện tích với một đa giác khi

đa giác đó đƣợc đặt trong hệ tọa độ Oxy và biết tọa độ (x,y) n đỉnh của đa

giác trong hệ tọa độ Oxy theo tuần tự (x1,y1), (x2,y2), …, (xn,yn). Bài toán

tính diện tích cho đa giác có tọa độ của các đỉnh đã biết trƣớc và các đỉnh

đƣợc sắp xếp theo thứ tự cùng chiều quay của kim đồng hồ hoặc ngƣợc

chiều quay của kim đồng hồ trên mặt phẳng tọa độ đƣợc tính theo công

thức tổng quát nhƣ sau [9]:

(Nguồn: http://en.wikipedia.org/wiki/Shoelace_formula)

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Công thức trên viết lại tƣơng đƣơng với công thức sau:

10

Để cụ thể tính ta triển khai tính diện tích thành các bƣớc sau:

Bƣớc 1: Tính T1

T1 = x1y2 + x2y3 + ... + xn-1yn + xny1

Bƣớc 2: Tính T2

T2 = x2y1 + x3y2 + ... + xnyn-1 + x1yn

Bƣớc 3: Tính S

S = |T1-T2|/2

1.2.2. Khái quát cách tính thể tích các hình cơ bản

Thể tích hay dung tích của một vật là lƣợng không gian mà vật ấy

chiếm. Thể tích có đơn vị đo là lập phƣơng của khoảng cách (khoảng cách

mũ 3). Trong hệ đo lƣờng quốc tế, nếu đơn vị đo của khoảng cách là cm thì đơn vị đo của thể tích là cm3, nếu đơn vị đo của khoảng cách là km thì đơn vị đo của thể tích là km3, nếu đơn vị đo của khoảng cách là m thì đơn vị đo của thể tích là m3 [6].

Đối với các khối hình cơ bản trong toán học chúng ta có công thức

tính thể tích theo những thông số cơ bản của hình nhƣ bảng tóm tắt sau [6],

V = Sh

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

[7]:

Thể tích hình trụ

Thể tích hình lăng trụ đều

V = Sh Thể tích hình lăng trụ tam giác

Thể tích hình tứ diện

Thể tích hình chóp cầu

Thể tích hình cầu

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

11

Thể tích hình nón

Thể tích hình nón cụt

Thể tích hình chóp đều

Thể tích hình chóp cụt đều

Hình 1.3: Công thứ c tính thể tích của một số khối hình đặc biê ̣t

12

Trong toán học ngƣời ta cũng có thể ứng dụng tích phân để tính thể

tích. Ví dụ việc tính thể tích vật thể tròn xoay: Hình phẳng giới hạn bởi đồ

thị hàm số y = f(x), trục hoành và hai đƣờng thẳng x = a, x = b, trong đó

(a < b). Quay hình phẳng (Hình 1.4) quanh trục hoành ta đƣợc một vật thể

tròn xoay [5].

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Thể tích của vật thể này đƣợc tính theo công thức:

Hình 1.4: Thể tích vật thể tròn xoay giớ i hạn bởi đồ thị hàm số y = f(x), trục hoành và hai đường thẳng x = a, x = b

13

 Kết luâ ̣n chƣơng 1:

Trong chƣơng này học viên trình bày tổng quan về đề tài, khái quát

tóm tắt các cách tiếp cận và tổng hợp công thức để tính diện tích đối với

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

các hình đặc biệt, tính thể tích đối với các khối hình đặc biệt.

14

Chƣơng 2: MỘT SỐ THUẬT TOÁN TÍNH DIỆN TÍCH VÀ THỂ

TÍCH VẬT THỂ KHÔNG GIAN

Chƣơng này học viên trình bày ba thuật toán sau : Thuâ ̣t toán tính

diện tích đa giác theo to ̣a đô ̣ đỉnh , thuật toán tìm diện tích hình chữ nhật tối đại và thuật toán tính thể tích vùng nƣớc đo ̣ng . Mỗi bài toán thuâ ̣t toán ho ̣c viên phân tích , lấy ví du ̣ để làm rõ yêu cầu củ a bài toán , qua đó hình thành ý tƣởng giải thuật và xây dựng thuật toán .

2.1. Thuâ ̣t toán tính diện tích của đa giác theo tọa độ đỉnh

 Bài toán

Cho đa giác N đỉnh theo tuần tự A1 A2 A3 ... AN trong mặt phẳng tọa độ

Oxy, với các đỉnh Ai(xi,yi) có to ̣a độ nguyên và các đỉnh đƣợc sắp xếp theo

thứ tự cùng chiều quay của kim đồng hồ hoặc ngƣợc chiều quay của kim

đồng hồ trên mặt phẳng tọa độ. Hãy tính diện tích đa giác trên.

 Phân tích bài toá n

Nhƣ đã trình bày trong mục 1.2.1 về cách tính diện tích với những đa

giác khác nhau khi đa giác đó nằm trong hệ tọa độ Oxy. Nếu ta biết tọa độ

(x,y) n đỉnh của đa giác trong hệ tọa độ Oxy theo tuần tự (x1,y1), (x2,y2),

…, (xn,yn). Bài toán tính diện tích cho đa giác có tọa độ của các đỉnh đã

biết trƣớc và các đỉnh đƣợc sắp xếp theo thứ tự cùng chiều quay của kim

đồng hồ hoặc ngƣợc chiều quay của kim đồng hồ trên mặt phẳng tọa độ.

Khi đó chúng ta tính theo công thức tổng quát nhƣ sau [9]:

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

(Nguồn: http://en.wikipedia.org/wiki/Shoelace_formula)

15

Công thức trên đƣợc viết lại tƣơng đƣơng với công thức sau:

Với cách tiếp cận theo hƣớng tin học, ta đang xây dựng mọi thứ dựa

trên điểm và tọa độ của điểm. Để cụ thể việc tính diện tích đa giác theo

công thức trên ta triển khai thành các bƣớc sau:

Bƣớc 1: Tính T1

T1 = x1y2 + x2y3 + ... + xn-1yn + xny1

Bƣớc 2: Tính T2

T2 = x2y1 + x3y2 + ... + xnyn-1 + x1yn

Bƣớc 3: Tính S

S = |T1-T2|/2

Sau đây ta xét một số ví dụ minh họa:

Ví dụ 1: Tứ giác ABCD là hình chữ nhật với tọa độ các đỉnh nhƣ sau

(Hình 2.1): A(4,4), B(12,4), C(12,8), D(4,8)

Áp dụng các bƣớc trên ta lần lƣợt tính đƣợc

T1 = xAyB + xByC + xCyD + xDyA

=4 x 4 + 12 x 8 + 12 x 8 + 4 x 4

= 16 + 96 + 96 + 16 = 224

T2 = xByA + xCyB + xDyC + xAyD

= 12 x 4 + 12 x 4 + 4 x 8 + 4 x 8

= 48 + 48 + 32 + 32 = 160

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

S = |T1-T2|/2 = |224-160|/2 = 64/2 = 32

D

16

y

12

10

D C 8

6

4 A B

2

Hình 2.1: Hình chữ nhật ABCD trong mặt phẳng tọa độ Oxy

0 4 x 10 14 12 8 6 2 16

Cũng dễ dàng nhận thấy vùng diện tích trên chính là vùng diện tích của

hình chữ nhật có cạnh dài là 8 đơn vị và cạnh nhỏ là 4 đơn vị, nhƣ vậy diện

tích của hình chữ nhật là 8 x 4 = 32 ứng với diện tích của 32 ô vuông nhận

đƣợc.

Ví dụ 2: Có ngũ giác ABCDE, đỉnh C lõm với tọa độ các đỉnh nhƣ sau

(Hình 2.2): A(4,4), B(12,4),C(10,6), D(12,8), E(4,8)

Từ các cặp tọa độ trên áp dụng công thức và các bƣớc ta lần lƣợt tính

T1, T2 và S nhƣ sau:

T1 = xAyB + xByC + xCyD + xDyE + xEyA

= 4 x 4 + 12 x 6 + 10 x 8 + 12 x 8 + 4 x 4

= 16 + 72 + 80 + 96 + 16 = 280

T2 = xByA + xCyB + xDyC + xEyD + xAyE

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

= 12 x 4 + 10 x 4 + 12 x 6 + 8 x 4 + 4 x 4

17

= 48 + 40 + 72 + 32 + 32 = 224

S = |T1-T2|/2 = |280-224|/2 = 56/2 = 28

y

12

10

D E 8

6 C

4 A B

2

Hình 2.2: Ngũ giác lõm ABCDE trong mặt phẳng tọa độ Oxy

x 0 4 2 6 8 10 12 14 16

Ở ví dụ 2 công thức đƣợc tính với đa giác lõm, dễ nhận thấy diện tích

của đa giác này bằng diện tích của hình chữ nhật trong ví dụ 1 trừ đi 4 đơn

vị ô vuông theo hình minh họa và bằng 28 đơn vị ô vuông.

Ví dụ 3: Với ngũ giác ABCDE, đỉnh C lồi có tọa độ các đỉnh nhƣ sau

(Hình 2.3):

A(4,4), B(12,4), C(14,6), D(12,8), E(4,8)

Với ví dụ này công thức đƣợc áp dụng là đa giác lồi. Áp dụng công

thức và các bƣớc ta tính đƣợc :

T1 = xAyB + xByC + xCyD + xDyE + xEyA

= 4 x 4 + 12 x 6 + 14 x 8 + 12 x 8 + 4 x 4

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

= 16 + 72 + 112 + 96 + 16 = 312

18

T2 = xByA + xCyB + xDyC + xEyD + xAyE

= 12 x 4 + 14 x 4 + 12 x 6 + 4 x 8 + 8 x 4

= 48 + 56 + 72 + 32 + 32 = 240

= |T1-T2|/2 = |312-240|/2 = 72/2 = 36 S

y

12

10 D E 8

C 6

4 A B

2

Hình 2.3: Ngũ giác lồi ABCDE trong mặt phẳng tọa độ Oxy

x 0 4 2 6 8 10 12 14 16

Dễ nhận thấy diện tích của đa giác này bằng diện tích của hình chữ

nhật trong ví dụ 1 cộng thêm 4 đơn vị ô vuông theo hình minh họa và bằng

36 đơn vị ô vuông.

Ví dụ 4: Tứ giác ABCD là một hình thang với tọa độ các đỉnh nhƣ sau

(Hình 2.4): A(4,4), B (12,4), C (11,8), D (7,8)

Áp dụng các bƣớc trên ta có:

T1 = xAyB + xByC + xCyD + xDyA

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

= 4 x 4 + 12 x 8 + 11 x 8 + 8 x 4

19

= 16 + 96 + 88 + 28 = 228

T2 = xByA+ xCyB+ xDyC+ xAyD

= 12 x 4 + 11 x 4 + 7 x 8 + 4 x 8

= 48 + 44 + 56 + 32 = 180

S = |T1-T2|/2 = |228-180|/2 = 48/2 = 24

y

12

10

D C 8

6

4 A B

2

Hình 2.4: Hình thang ABCD trong mặt phẳng tọa độ Oxy

x 0 4 2 6 8 10 12 14 16

Ở ví dụ này chính bài toán tính diện hình thang có đáy nhỏ là 4 đơn vị,

đáy lớn là 8 đơn vị và chiều cao là 4 đơn vị áp dụng công thức có kết quả

sau:

S = ((4+8) * 4)/2 = 48/2 = 24

Nhƣ vậy kết quả tính đƣợc cũng khớp với cách tính ở trên.

Ví dụ 5: Xét một đa giác vừa có tính chất lồi, vừa có tính chất lõm với

tọa độ các đỉnh nhƣ sau (Hình 2.5):

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

A(4,4), B(12,4), C(10,6), D(12,8), E(8,8), F(6,10), G(4,8)

20

Áp dụng công thức và các bƣớc ta tính đƣợc:

T1 = xAyB + xByC + xCyD + xDyE + xEyF + xFyG + xGyA

= 4 x 4 + 12 x 6 + 10 x 8 + 12 x 8 + 8 x 10 + 6 x 8 + 4 x 4

= 16 + 72 + 80 + 96 + 80 + 48 + 16 = 408

T2 = xByA + xCyB + xDyC + xEyD + xFyE + xGyF + xAyG

= 12 x 4 + 10 x 4 + 12 x 6 + 8 x 8 + 6 x 8 + 4 x 10 + 4 x 8

= 48 + 40 + 72 + 64 + 48 + 40 + 32 = 344

S = |T1-T2|/2 = |408 - 344|/2 = 64/2 = 32

y

12

F 10

E G D 8

6 C

4 B A

2

x 0 4 2 6 8 10 12 14 16

Hình 2.5: Đa giá c lồi, lõm trong mặt phẳng tọa độ Oxy

Ở hình trên nếu lấy phần lồi bù cho phần lõm thì ta thu đƣợc diện tích

của hình chính là diện tích của hình chữ nhật có chiều dài là 8 đơn vị và

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

chiều rộng là 4 đơn vị nhƣ vậy S = 8 x 4 = 32 đơn vị ô vuông khớ p vớ i kết quả tính ở trên.

21

Qua một số ví dụ nhằm thể hiện về cách tính diện tích của đa giác theo

công tổng quát đã nêu ở trên. Với những đa giác có nhiều đỉnh, tọa độ các

đỉnh không đơn giản chỉ là các số chẵn thì việc tính toán không đơn giản

chỉ là nhìn nhận qua hình và tính toán đơn giản nhƣ minh họa mà đòi hỏi

việc tính toán ở nhiều phép tính toán hoặc tính toán với số lƣợng lớn, lúc

đó đòi hỏi rất cần từ công cụ là máy tính với việc lập trình bằng một

chƣơng trình cụ thể mà Input chính là tọa độ của các đỉnh của đa giác trong

mặt phẳng tọa độ Oxy còn Output là diện tích của đa giác đó.

Ta đƣa bài toán trên vớ i dƣ̃ liê ̣u vào và ra nhƣ sau :

- Input: Cho trong tê ̣p DAGIAC.INP gồm ít nhất 2 dòng

+ Dòng 1: Chứa số nguyên dƣơng N tƣơng ứng với N đỉnh của đa giác

+ Dòng 2 và các dòng tiếp theo: Chứa 2 x N số nguyên tƣơng ứng với

x1y1 x2y2 ... xNyN là toạ độ các đỉnh của đa giác. Mỗi số ghi cách nhau một

dấu cách.

- Output: Ghi kết quả là diện tích đa giác ra file DAGIAC.OUT

Ví dụ:

DAGIAC.INP DAGIAC.OUT

4 32

4 4 12 4 12 8 4 8

 Ý tưở ng thuật toá n [2], [3], [4], [8].

Để giải bài toán trên theo dƣ̃ liê ̣u vào nhƣ ví du ̣ ta l ƣu toạ độ các đỉnh đa giác vào các mảng: Vì mỗi đỉnh có 2 giá trị ứng với 2 tọa độ x,y nên để

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

đọc dữ liệu từ tệp DAGIAC.INP các cặp tọa độ ta dùng 2 mảng một chiều.

22

Mảng thứ nhất (Mảng X) lƣu các tọa độ xi, i = 1 .. N

Mảng thứ hai (Mảng Y) lƣu các tọa độ yi, i = 1 .. N

Sau đó tính diện tích đa giác theo các bƣớ c:

Bƣớc 1: Tính T1

T1 = x1y2 + x2y3 + ... + xN-1yN + xNy1

Ban đầu gán T1 = xNy1 chính là T1 = X[N] * Y[1]

Sử dụng vòng lặp cho i chạy từ 1 đến N-1 tính

T1=T1+ x1y2 + x2y3 +.... + xN-1yN tƣơng đƣơng với công thức trong

vòng lặp nhƣ sau : T1 = T1 + X[i] * Y[i+1]

Bƣớc 2: Tính T2

T2 = x2y1 + x3y2 + ... + xNyN-1 + x1yN

Ban đầu gán T2 = x1yN chính là T2 = X[1] * Y[N]

Sử dụng vòng lặp cho i chạy từ 1 đến N-1 tính

T2 = T2 + x2y1 + x3y2 + ... + xNyN-1 tƣơng đƣơng với công thức trong

vòng lặp nhƣ sau : T2=T2+ X[i+1] * Y[i]

Bƣớc 3: Tính S

S = |T1-T2|/2

Nội dung tính T1 và T2 ở trên là sử dụng hai vòng lặp For riêng biệt

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

tuy nhiên cả hai vòng lặp tách biệt có biến đếm i chạy từ 1 đến N-1 vì vậy

23

khi mô tả thuật toán và trong lập trình ta có thể dùng gộp bằng một vòng lặp For.

 Thuật toán

Algorithm DT_ DAGIAC

Chức năng: Tính diện tích đa giác theo to ̣a đô ̣ đỉnh. Input: Số nguyên dƣơng N tƣơng ứng với N đỉnh của đa giác và 2 x N

số nguyên tƣơng ứng với x1y1 x2y2 ... xNyN là toạ độ các đỉnh của đa giác.

Output: Diện tích (S) của đa giác.

Method

1. Đo ̣c dữ liệu tƣ̀ tê ̣p DAGIAC.INP

1.1 Đọc giá trị số nguyên dòng 1 vào biến N

1.2 Lƣu tọa độ các đỉnh đa giác vào các mảng: Vì mỗi đỉnh có 2 giá

trị ứng với 2 tọa độ x,y nên để đọc dữ liệu từ tệp DAGIAC.INP

các cặp tọa độ ta dùng 2 mảng một chiều.

Mảng thứ nhất (Mảng X) lƣu các tọa độ xi, i = 1 .. N

Mảng thứ hai (Mảng Y) lƣu các tọa độ yi, i = 1 .. N

2. Khởi tri ̣ cho T1, T2:

T1:=x[n]*y[1];

T2:=y[n]*x[1];

3. Tính T1 và T2:

For i:=1 to n-1 do

begin

T1:= T1+x[i]*y[i+1];

T2:= T2+y[i]*x[i+1];

end;

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

4. Tính S:

24

S:=ABS(T1-T2)/2;

5. Ghi kết quả S ra tệp DAGIAC.OUT

Nhập: Số lượng điểm N; Tọa độ X[1..N]; Tọa độ Y[1..N];

T1:=x[n]*y[1];

T2:=y[n]*x[1];

i:=1;

T

i > N-1

F

T1:= T1+x[i]*y[i+1];

T2:= T2+y[i]*x[i+1];

S:=ABS(T1-T2)/2;

i: = i + 1;

Đưa ra kết quả S

Các bƣớc thuật toán trên có thể đƣợc mô tả bằng sơ đồ sau:

 Độ phức tạp tính toán

Trong tệp DAGIAC.INP chứa 2 x N phần tử, khi xử lí tính toán

đƣợc dựa trên 2 mảng X, Y mỗi mảng gồm N phần tử. Thuật toán có tối đa

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

N phép duyệt khi cho i chạy từ 1 tới N-1 nhƣ vậy có tối đa N phép duyệt.

25

Vâ ̣y độ phức tạp tính toán là O(n).

2.2. Thuật toán tìm diện tích hình chữ nhật tối đại

 Bài toán

Cho một ma trận biểu diễn bằng một mảng hai chiều kích thƣớc N x M

ô và chỉ chứa các kí tự 0 và 1. Tìm hình chữ nhật chứa toàn kí tự 1 và có

diện tích lớn nhất (gọi là hình chữ nhật tối đại) [2].

 Phân tích bài toán

Tƣ̀ yêu cầu củ a bài toán ta xét mô ̣t số ví dụ sau:

Ví dụ 1: Cho ma trâ ̣n 7 x 8 (Hình 2.6)

Hình 2.6: VD1 - Ma trận chứa các kí tự 0 và 1

0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0

1 có

Vớ i ma trâ ̣n t rên ta tìm đƣơ ̣c hình chƣ̃ nhâ ̣t tối đa ̣i chƣ́ a các kí tƣ̣ diện tích là 10 ô vuông và có toạ độ đỉnh trên - trái là (Cô ̣t 2, dòng 4) và đỉnh dƣớ i – phải là (cô ̣t 6, dòng 5)

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0

26

0 0 1 0 0 1 1 0

Ví dụ 2:

Dƣ̣a vào ma trâ ̣n trên ta thay đổi giá tri ̣ 1 bằng giá tri ̣ 0 tại cột 4, dòng 4

(Hình 2.7).

Hình 2.7: VD2 - Ma trận chứa các kí tự 0 và 1

0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0

Lúc này ma trâ ̣n trên ta tìm đƣơ ̣c hình chƣ̃ nhâ ̣t tối đa ̣i chƣ́ a các kí tƣ̣ 1 có diện tích là 8 ô vuông và có toạ độ đỉnh trên - trái là (Cô ̣t 2, dòng 2) và đỉnh dƣớ i – phải là (cô ̣t 3, dòng 5)

0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0

Ví dụ 3:

Tƣ̀ ma trâ ̣n củ a ví du ̣ 2 ta thay đổi giá tri ̣ 1 bằng giá tri ̣ 0 tại cột 3, dòng

4 (Hình 2.8)

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0

27

Hình 2.8: VD3 - Ma trận chứa các kí tự 0 và 1

0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0

1

Khi đó ma trâ ̣n trên ta tìm đƣơ ̣c hình chƣ̃ nhâ ̣t tối đa ̣i chƣ́ a các kí tƣ̣ có diện tích là 7 ô vuông và có toạ độ đỉnh trên - trái là (Cô ̣t 1, dòng 5) và đỉnh dƣớ i – phải là (cô ̣t 7, dòng 5).

0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0

Tƣ̀ yêu cầu củ a bài toán và qua các ví dụ minh ho ̣a ta đƣa bài toán trên

vớ i dƣ̃ liê ̣u vào và ra nhƣ s au :

- Input: Tệp văn bản CNMAX.INP:

+ Dòng đầu tiên chƣ́ a 2 số tự nhiên N và M,

+ N dòng sau, mỗi dòng chƣ́ a M số 0/1.

3 ≤ M ≤ 70

3 ≤ N ≤ 10000

- Output: Tệp văn bản CNMAX.OUT:

+ Dòng đầu tiên: Diện tích của hình chữ nhật tối đại chứa toàn kí tự 1.

+ Dòng thứ hai: Tọa độ cô ̣t và dòng của đỉnh trên - trái.

+ Dòng thứ ba: Toạ độ cô ̣t và dòng của đỉnh dƣớ i - phải. Ví dụ: Với ma trận 7 x 8 chứa dữ liệu nhƣ hình 2.6 thì hình chữ nhật tối

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

đại có diện tích là 10 ô vuông, có toạ độ đỉnh trên - trái là (Cô ̣t 2, dòng 4) và

28

đỉnh dƣớ i – phải là (cô ̣t 6, dòng 5)

CNMAX.INP CNMAX.OUT

10 2 4 6 5

7 8 0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 0

 Ý tưở ng thuật toá n [2], [3], [4], [8]

Để tìm đƣợc hình chữ nhật toàn 1 có diện tích lớn nhất, ta sẽ khởi tạo

các mảng sau:

- Mảng H : H[i,j]: số ô 1 liên tiếp từ ô [i,j] trở lên = chiều rộng lớn

nhất của HCN đáy dƣới qua ô [i,j].

- Mảng L : L[i,j]: số cột toàn 1 liên tiếp có chiều cao lớn hơn hoặc

bằng H[i,j] tính từ cột j sang bên trái.

- Mảng R : R[i,j]: số cột toàn 1 liên tiếp có chiều cao lớn hơn hoặc

bằng H[i,j] tính từ cột j sang bên phải.

Từ đó diện tích hình chữ nhật toàn 1 mà chiều rộng = H[i,j] và đáy

dƣới ở hàng i là H*(L+R-1)

Vậy kết quả bài toán tìm diện tích hình chữ nhật lớ n nhất toàn 1 là

MAX(H*(L+R-1))

* Xét theo ví dụ trên:

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

1 1 1 1 1 1 1

29

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

- Tính mảng H : H[i,j] = 0 nếu A[i,j] = 0

Và = H[i-1,j]+1 nếu A[i,j]=1

0 0 0 0 1 0 0 1 0 1 1 0 2 1 0 2 0 2 2 0 0 2 0 3 0 3 3 1 1 3 0 4 1 4 4 2 2 4 1 0 0 0 5 0 0 0 0 0 0 0 6 0 0 1 1 0

- Tính mảng L : Duyê ̣t tất cả nhƣ̃ng phần tƣ̉ đƣ́ ng trƣớ c ô A [i,j] đang

xét (tính theo chiều từ trái sang phải ), nếu thỏa mãn điều kiê ̣n liên

tiếp = 1 và có độ cao >= H[i,j] thì L[i,j]=L[i,j-1]+1.

1 1 2 1 2 1 2 1 1 2 3 4 1 1 1 2 3 4 1 7 1 2 1 1 1 1 1 1

- Tính mảng R : Duyê ̣t tất cả nhƣ̃ng phần tƣ̉ đƣ́ ng sau ô A [i,j] đang xét

(tính theo chiều từ phải qua trái ), nếu thỏa mãn điều kiê ̣n liên tiếp

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

=1 và có chiều cao >= H[i,j] thì R[i,j]=R[i,j+1]+1

30

1 1 1 2 1 2 1 1 2 1 3 2 1 7 2 1 3 2 1 1 2 1 1 1 1 1 1 1

Xét ô đƣơ ̣c đánh dấu, ta có: H = 2; L = 4; R = 2 Vậy diện tích hình chữ nhật chứa toàn 1 là: 2 x (4 +2 – 1) = 10 (đơn

vị ô vuông)

 Thuật toán

Algorithm CNMAX

Chức năng: Tìm diện tích hình chữ nhật tối đại chƣ́ a toàn kí tƣ̣ 1.

Input: Ma trận biểu diễn bằng một mảng hai chiều kích thƣớc N x M và

chỉ chứa các kí tự 0 và 1.

Output: Tìm hình chữ nhật chứa toàn kí tự 1 và có diện tích lớn nhất

(gọi là hình chữ nhật tối đại).

Method

1. Đo ̣c dƣ̃ liê ̣u tƣ̀ tê ̣p CNMAX.INP

1.1 Đo ̣c 2 số nguyên ở dòng đầu của tệp vào 2 biến tƣơng ƣ́ ng N ,

M

1.2 Đọc các số nguyên tƣơng ứng vào mảng A [i,j]

for i:=1 to n do

begin

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

for j:=1 to m do read(fi,a[i,j]);

31

end;

2. Tính độ dài các cạnh:

2.1 Tính chiều cao hay chiều rô ̣ng củ a HCN thông qua mảng H

for i:=1 to n do

for j:=1 to m do

if a[i,j]=0 then h[i,j]:=0

else h[i,j]:=h[i-1,j]+1;

2.2 Tính mảng L duyệt từ trái qua phải .

for i:= 1 to n do

for j:=1 to m do

if a[i,j]=0 then l[i,j]:=0

else

begin

d:=0;

for k:=1 to j do

if (a[i,k]=1) and (h[i,k]>=h[i,j]) then inc(d)

else d:=0;

l[i,j]:=d;

end;

2.2 Tính mảng R duyê ̣t tƣ̀ phải qua trái.

for i:=1 to n do

for j:=m downto 1 do

if a[i,j]=0 then l[i,j]:=0

else

begin

d:=0;

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

for k:=m downto j do

32

if (a[i,k]=1) and (h[i,k]>=h[i,j]) then inc(d)

else d:=0;

r[i,j]:=d;

end;

3. Tính các diện tích t ạo bởi các hình chữ nhật chƣ́ a 1 và tìm diện tích

lớ n nhất chƣ́ a toàn 1.

3.1 Khở i ta ̣o

Smax:=0;

3.2 Tính diện tích các hì nh chƣ̃ nhâ ̣t; So sánh diê ̣n tích và gán giá tri ̣ diê ̣n tích lớ n nhất tìm đƣơ ̣c vào biến S max; Xác định tọa độ các đỉnh trên – trái và dƣới – phải của HCN theo cột, dòng

for i:=1 to n do

for j:=1 to m do

begin

S:=h[i,j]*(l[i,j]+r[i,j]-1);

if S> smax then

begin

smax:=s;

yt:=i+1-h[i,j];

xtr:=j+1-l[i,j];

yd:=i;

xph:=xtr+(l[i,j]+r[i,j]-1)-1;

end;

end;

4. Đƣa ra kết quả gồm HCN tối đa ̣i chƣ́ a toàn1, tọa độ đỉnh trên – trái và đỉnh dƣới – phải. (Ghi kết quả ra tệp CNMAX.OUT)

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

 Độ phức tạp tính toán

33

Tệp CNMAX.INP chứa n dòng, mỗi dòng chứa m kí tự. Khi xử lí

để tính mảng H ta duyệt bằng hai vòng lặp for lồng nhau . Để tính mảng L và R ta duyệt bằng ba vòng lặp trong đó duyệt số phần tử m trên mỗi hàng

là 2 lần. Viê ̣c tính giá trị của ba mảng H , L, R là đô ̣c lâ ̣p nên đô ̣ phƣ́ c ta ̣p là: (n x m ) + ( n x m x m ) + ( n x m x m ). Khi n, m là rất lớ n thì đô ̣ phƣ́ c tạp là: n x m x m

Vậy độ phức tạp tính toán là O(n x m2).

2.3. Thuật toán tính thể tích vùng nƣớc đo ̣ng

 Bài toán

Trên một mô hình có hình chữ nhật chia lƣới kích thƣớc n x m đơn vị

tại một số ô của bảng gắn một cột nhựa vuông cạnh đáy 1 đơn vị, chiều

cao là một số nguyên. Các cột kề nhau cũng đƣợc gắn keo giữa hai mặt và

hai cạnh tiếp giáp. Sau đó nhúng mô hình ngập vào nƣớc rồi cẩn thận nhấc

lên. Tính thể tích của khối nƣớc đọng trong mô hình.

 Phân tích bài toán

Để làm rõ yêu cầu củ a bài toán ta tìm hiểu mô ̣t số ví du ̣ vớ i các cô ̣t vuông ca ̣nh đáy 1 đơn vi ̣. Số cô ̣t và đô ̣ cao củ a các cô ̣t đƣơ ̣c thể hiê ̣ n bằng

ma trâ ̣n m x n , phần tử thứ j trên dòng i trong số m dòng tiếp theo là chiều

cao của cột đặt tại ô (i, j).

Ví dụ 1: Cho ma trâ ̣n 4 x 5 thể hiê ̣n số cô ̣t và đô ̣ cao củ a các cô ̣t nhƣ sau

(Hình 2.9):

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

3 2 1 1 2

34

Hình 2.9: VD1 - Ma trận và cột thể hiê ̣n độ cao của cá c cột vuông cạnh 1 đơn vi ̣.

4 3 2 3 3 5 4 3 4 5 5 5 4 5 4

Hình minh họa trên các cột chƣa đƣợc ghép thành một khối liền nhau ,

theo bài toán ta ghép và gắn thành mô ̣t khối nhƣ sau:

Nếu nhú ng mô hình trên vào nƣớ c và nhấc lên thì lƣơ ̣ng nƣớ c đo ̣ng trong mô hình sẽ bằng 0 vì các cột trên ghép với nhau nhƣng không tạo ra ô nào chứa nƣớc đọng nhƣ hình minh ho ̣a .

Ví dụ 2: Cho ma trâ ̣n 4 x 5 thể hiê ̣n số cô ̣t và đô ̣ cao củ a các cô ̣t nhƣ sau

(Hình 2.10):

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

4 4 3 4 3 5 5 5 5 4 5 4 4 4 5 5 5 5 5 5

Hình 2.10: VD2 - Ma trận và cột thể hiê ̣n độ cao của cá c cột vuông cạnh 1 đơn vi ̣.

35

Ta ghép và gắn các cột thành một khối liền nhau nhƣ sau:

dễ nhâ ̣n thấy các cô ̣t Nếu nhú ng mô hình trên vào nƣớ c và nhấc lên

thuô ̣c hàng 1 nƣớ c sẽ không đo ̣ng , các cột thuộc hàng 2, 3, 4 sẽ tạo ra 3 ô chƣ́ a nƣớ c đo ̣ng và có đô ̣ cao bằng 1 tại lớp trên cù ng nhƣ vâ ̣y tổng ô chƣ́ a nƣớ c đo ̣ng sẽ bằng 3.

Ví dụ 3: Ma trâ ̣n 4 x 5 thể hiê ̣n số cô ̣t và đô ̣ cao củ a các cô ̣t nhƣ sau

(Hình 2.11):

Hình 2.11: VD3 - Ma trận và cột thể hiê ̣n độ cao của cá c cột vuông cạnh 1 đơn vi ̣.

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

5 5 4 5 5 5 4 0 3 0 5 0 5 2 5 5 5 4 5 5

36

Ta ghép và gắn các cột thành một khối liền nhau nhƣ sau:

Đem mô hình trên nhú ng nƣớ c và nhấc lên , dễ thấy nƣớ c sẽ đo ̣ng tại vị trí các cột vị trí (2,3) là 3 ô, nƣớc đọng tại vị trí cột (3,2) là 4 ô, nƣớ c đo ̣ng tại vị trí cột (3,4) là 1 ô. Nhƣ vâ ̣y tổng nƣớ c đo ̣ng trong mô hình trên là 8.

Tƣ̀ yêu cầu củ a bài toán và qua các ví du ̣ minh ho ̣a t a đƣa bài toán trên

vớ i dƣ̃ liê ̣u vào và ra n hƣ sau:

- Input: Tệp văn bản THETICH.INP

+ Dòng đầu chƣ́ a 2 số nguyên dƣơng m và n. (3 ≤ M, N ≤ 100)

+ Phần tử thứ j trên dòng i trong số m dòng tiếp theo là chiều

cao của cột đặt tại ô (i, j).

- Out put: Tệp văn bản THETICH.OUT

Thể tích nƣớc đọng trong mô hình

Ví dụ:

THETICH.INP THETICH.OUT

8

4 5 5 5 4 5 5 5 4 0 3 0 5 0 5 2 5 Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

37

5 5 4 5 5

 Ý tưở ng thuật toá n [2], [3], [4], [8]

Gọi a là tấm bảng nền mô hình với kích thƣớc mn và h(i,j) là chiều

cao của cột nhựa vuông đặt trên ô (i,j). Thoạt tiên ta giả sử chiều cao tối đa

của các cột là 1, nhƣ vậy các ô trên nền nhà chỉ chứa các giá trị 0 hoặc 1.

Nền tầng 1 với các ô đặc mang giá trị 1, ô chứa nƣớc đọng màu trắng

(0) và ô thoát nƣớc màu xám (0).

Ô thoát nƣớc

1 1 1 1 1 1 1

0 1 1 0 0 0 0 0

1 1 1 1 0 1 1

1 0 1 1 0 1 1 0 Ô nƣớc đọng

1 0 1 1 1 1 1

.

1 0 1 0 0 1 1 Ô đặc 1 1 1 1 1 1 1 1

Ô mang giá trị 0 chính là mặt sàn, còn ô mang giá trị 1 chính là cột.

Bây giờ bạn thử rót nƣớc vào mô hình đơn giản này cho ngập các ô và

quan sát điều gì sẽ xảy ra. Dễ thấy là chỉ có các ô trống bị giam tại giữa mô

hình là còn chứa nƣớc. Có 5 ô trống bị giam nên thể tích nƣớc đọng sẽ là

5. Các ô trống (mang giá trị 0) liên thông cạnh với một ô trống trên biên sẽ

tạo thành một cống thoát nƣởc ra ngoài mô hình. Nhận xét này cho ta thuật

toán tính lƣợng nƣớc đọng tại tầng nền (tầng 0) của mô hình nhƣ sau:

Duỵệt đƣờng biên, nếu gặp ô trống (trên biên và chứa trị 0) thì gọi thủ

tục loang đánh dấu các ô này bằng giá trị 1.

Duyệt các ô lọt trong mô hình, đếm các ô trống (chứa giá trị 0) và đồng

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

thời đánh dấu các ô này bằng giá trị 1. Đó là thể tich nƣớc đọng.

38

Tiếp theo, sau khi đã duyệt và tính lƣợng nƣớc đọng tại tầng nền

(tầng 0), ta dễ dàng suy ra cách tính lƣợng nƣớc đọng tại tầng 1 nếu nhƣ

coi các ô trống đã duyệt tại tầng 0 đã đƣợc lấp bằng các khối nhựa chiều

cao 1. Ta gọi phƣơng thức này là đóng băng các ô đã xử lí. Tổng quát, tại

tầng h ta thực hiện thủ tục tƣơng tự nhƣ tại tầng nền với chút điều chỉnh là

thay giá trị đánh dấu bằng h+1 thay vì bằng 1. Gọi chiều cao tối đa của

các cột là hmax, cho h biến thiên từ 0 đến hmax1 ta tính đƣợc tổng khối

nƣớc đọng của mô hình.

Xét theo ví dụ trên ta có:

5 5 4 5 5 5 4 0 3 0 5 0 5 2 5 5 5 4 5 5

Loang lớp 0:

Duyệt các ô biên, ta tìm đƣợc ô [2,5] có chiều cao = 0

5 5 4 5 5 5 4 0 3 0 5 0 5 2 5 5 5 4 5 5

Loang từ ô [2,5], các ô cạnh bên đều cao hơn.

5 5 4 5 5 5 4 0 3 0 5 0 5 2 5 5 5 4 5 5

Số ô còn lại trong bảng có chiều cao <1 là thể tích nƣớc đọng tầng 1:

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

(ô đƣơ ̣c đánh dấu)

39

5 5 4 5 5 5 4 0 3 0 5 0 5 2 5 5 5 4 5 5

 V0 = 2

Giờ ta lấp các ô tầng 0, ta đƣợc:

5 5 4 5 5 5 4 1 3 1 5 1 5 2 5 5 5 4 5 5

Loang lớp 1:

Duyệt các ô biên, ta tìm đƣợc ô [2,5] có chiều cao =1

5 5 4 5 5 5 4 1 3 1 5 1 5 2 5 5 5 4 5 5

Loang từ ô [2,5]:

5 5 4 5 5 5 4 1 3 1 5 1 5 2 5 5 5 4 5 5

Các ô nƣớc đọng: (ô đƣơ ̣c đánh dấu)

5 5 4 5 5 5 4 1 3 1 5 1 5 2 5 5 5 4 5 5

 V1 = 2

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Giờ lấp các ô tầng 1, ta đƣợc:

40

5 5 4 5 5 5 4 2 3 2 5 2 5 2 5 5 5 4 5 5

Loang lớp 2:

Duyệt đƣờng biên, đƣợc ô [2,5]:

5 5 4 5 5 5 4 2 3 2 5 2 5 2 5 5 5 4 5 5

Loang từ ô [2,5] và tìm ra các ô nƣớc đọng:

5 5 4 5 5 5 4 2 3 2 5 2 5 2 5 5 5 4 5 5

 V2 = 3

Lấp đầy các ô tầng 2:

5 5 4 5 5 5 4 3 3 3 5 3 5 3 5 5 5 4 5 5

Loang lớp 3:

Duyệt biên ta đƣợc ô [2,5]:

5 5 4 5 5 5 4 3 3 3 5 3 5 3 5 5 5 4 5 5

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Loang từ ô [2,5] và tìm ra ô nƣớc đọng:

41

5 5 4 5 5 5 4 3 3 3 5 3 5 3 5 5 5 4 5 5

 V3 = 1

Lấp đầy các ô tầng 3:

5 5 4 5 5 5 4 4 4 4 5 4 5 4 5 5 5 4 5 5

Loang tầng 4:

Duyệt biên ta đƣợc các ô chiều cao =4: [1,3] [2,5] [4,3]

5 5 4 5 5 5 4 4 4 4 5 4 5 4 5 5 5 4 5 5

Loang từ các ô đó:

5 5 4 5 5 5 4 4 4 4 5 4 5 4 5 5 5 4 5 5

Không có ô nào nƣớc đọng

 V4 = 0

Vâ ̣y thể tích nƣớ c các ô đo ̣ng là : V = V1 + V2 + V3 + V4 = 8

Để giảm bớt phức tạp cho bài toán, ta bỏ qua phần lấp đầy các ô ở

mỗi tầng bằng cách: Khi xét tầng H, ta sẽ tìm các ô ở biên có chiều cao nhỏ

hơn hoặc bằng H, nhƣ vậy ta ngầm coi rằng các ô này đƣợc lấp đầy từ

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

trƣớc, khi loang ta cũng loang ra các ô chiều cao <=H.

42

 Thuật toán

Algorithm THETICH

Chức năng: Tính thể tích (dung tích) nƣớc đo ̣ng.

Input: Ma trận độ cao h kích thƣớc m × n chia theo lƣới vuông đơn vị

i = 1,2, …,m xác định chỉ số hàng; chỉ số j = 1, 2, …, n xác định chỉ số cô ̣t.

h[i,j] là những số nguyên là chiều cao củ a cô ̣t ta ̣i ô (i,j)

Output: Thể tích nƣớ c bị giam (Thể tích nƣớ c đo ̣ng).

Method

1. Đo ̣c dƣ̃ liê ̣u tƣ̀ tê ̣p THETICH .INP

1.1 Đo ̣c dòng đầu 2 số nguyên tƣơng ƣ́ ng vào 2 biến m và

1.2 Khở i ta ̣o đô ̣ cao hmax và hmin .

hmin:=1000000;

hmax:=0;

1.3 Đo ̣c các số nguyên tƣơng ứng vào mảng A [i,j]; Xác định độ cao

nhỏ nhất và lớn nhất có trong ma trận

for i:=1 to m do

for j:=1 to n do

begin

read(fi,a[i,j]);

hmin:=min(hmin,a[i,j]);

hmax:=max(hmax,a[i,j]);

end;

2. Thủ tục Loang:

Ta dùng đệ quy Loang(x,y):

Từ ô [x,y] ta loang sang 4 phía nếu các ô đó có chiều cao <=H, loang

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

tới ô nào thì đánh dấu đã Loang vào ô đó để tránh Loang lại lặp vô hạn.

43

Procedure LOANG(x,y: longint);

begin

free[x,y]:=count;

if (x>1) and (free[x-1,y]

LOANG(x-1,y);

if (y>1) and (free[x,y-1]

LOANG(x,y-1);

if (x

LOANG(x+1,y);

if (y

LOANG(x,y+1);

end;

Ở đây dùng mảng Free[x,y] để đánh dấu, Free=count là đã Loang,

Free

3. Duyệt lần lƣợt từ chiều cao Hmin -> Hmax-1, với mỗi chiều cao

ta tìm ô biên thỏa mãn và gọi thủ tục Loang(x,y), sau khi Loang hết ô biên

ta đếm số ô chiều cao <=H mà chƣa bị Loang tới (tức là Free

chính là thể tích nƣớc đọng.

res:=0;

for h:=hmin to hmax-1 do

begin

inc(count);

// Các ô có chiều cao

for i:=1 to m do

begin

if (a[i,1]<=h)and(free[i,1]

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

if (a[i,n]<=h)and(free[i,n]

44

end;

for j:=2 to n-1 do

begin

if (a[1,j]<=h)and(free[1,j]

if (a[m,j]<=h)and(free[m,j]

end;

// Loang xong, tính tổng thể tích nƣớc đọng đến thời diểm đang xét .

for i:=1 to m do

for j:=1 to n do

if (free[i,j]

end;

ọng (Ghi kết quả ra tê ̣p 4. Đƣa ra kết quả thể tích nƣớ c đ

THETICH.OUT).

 Độ phức tạp tính toán

Ta có ma trận độ cao h kích thƣớc m × n chia theo lƣới vuông đơn vị,

hmax là chiều cao lớn nhất, hmin là chiều cao nhỏ nhất.

Tại mỗi lớ p chỉ đếm những ô bị giam tại lớp đó. Bƣớc 3 của thuật

toán THETICH thực hiện hmax- hmin lần. Mỗi lần lần thủ tục duyệt ma

trận hai lần, một lần qua thủ tục Loang và một lần đếm số ô bị giam.

Vậy tổng cộng thuật toán THETICH thực hiện 2 x m x n x (hmax –

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

hmin) thao tác, do đó độ phức tạp tính toán là O(m x n x (hmax – hmin)).

45

Chƣơng 3: ỨNG DỤNG VÀ THỬ NGHIỆM

Chƣơng 3 học viên d ựa vào cơ sở lý thuyết GIS và các thuật toán đƣợc trình bày ở chƣơng 2 để tìm hiểu , phân tích và trình bày các bƣớ c cài đă ̣t bài toán ứng dụng trong thực tế trên mô ̣t vù ng đ ịa hình . Bài toán dụng

thƣ́ nhất là tìm vùng diện tích phẳng hình chữ nhật lớn nhất trên mô ̣t vù ng

đi ̣a hình (Bài toán : Dƣ̣ án x ây dƣ̣ng sân bay ), bài toán ứng dụng thứ 2 là tính thể tích chứa nƣớc cho một lòng hồ . Trong chƣơng này ho ̣c viên cũng trình bày về cài đặt chƣơng trình cho các thuật toán trình bày ở chƣơng 2.

3.1. Cơ sở lý thuyết và lựa chọn bài toán ứng dụng

Hệ thống thông tin địa lý - Geographic Information System (GIS) là

một nhánh của công nghệ thông tin, đã hình thành từ những năm 60 của thế

kỷ trƣớc và phát triển rất mạnh trong những năm gần đây. GIS đƣợc sử

dụng nhằm xử lý đồng bộ các lớp thông tin không gian (bản đồ) gắn với

các thông tin thuộc tính, phục vụ nghiên cứu, quy hoạch và quản lý các

hoạt động theo lãnh thổ [2].

Hệ thống thông tin địa lý làm việc với hai dạng mô hình dữ liệu địa lý

khác nhau về cơ bản là mô hình vector và mô hình raster.

Trong mô hình vector, thông tin về điểm, đƣờng và vùng đƣợc mã hoá

và lƣu dƣới dạng tập hợp các toạ độ x,y. Vị trí của đối tƣợng điểm, nhƣ lỗ

khoan, có thể đƣợc biểu diễn bởi một toạ độ đơn x,y. Ðối tƣợng dạng

đƣờng, nhƣ đƣờng giao thông, sông suối, có thể đƣợc lƣu dƣới dạng tập

hợp các toạ độ điểm. Ðối tƣợng dạng vùng, nhƣ khu vực buôn bán hay

vùng lƣu vực sông, đƣợc lƣu nhƣ một vòng khép kín của các điểm toạ độ.

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Mô hình vector rất hữu ích đối với việc mô tả các đối tƣợng riêng biệt,

46

nhƣng kém hiệu quả hơn trong miêu tả các đối tƣợng có sự chuyển đổi liên

tục nhƣ kiểu đất.

Trong mô hình dữ liệu Raster trƣớ c hết ta có k hái niệm ảnh Raster,

một file ảnh chụp về một đối tƣợng không gian qua máy ảnh photo hoặc

một ảnh số chụp từ máy chụp số (digital camera) hoặc ảnh số thu nhận từ

các đầu ghi phổ trên các vệ tinh là các ảnh có cấu trúc raster.

Một ảnh raster là một tập hợp các ô lƣới. Với dữ liệu raster thì các tệp

thuộc tính thông thƣờng chứa dữ liệu liên quan đến lớp hiện tƣợng tự nhiên

thay cho các đối tƣợng rời rạc.

Raster đƣợc định nghĩa nhƣ là ma trận không gian của các đơn vị ảnh

(picture element) còn gọi là các pixel. Các pixel có kích thƣớc đồng nhất

về mặt hình học, chúng là các ô vuông nhỏ và đƣợc xếp theo các dòng và

Hình 3.1: Ma trận không gian của một file ảnh raster có cấu trúc pixel

các cột giống nhƣ một lƣới ô vuông (Hình 3.1).

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Cấu trúc raster là một trong những cấu trúc dữ liệu đơn giản nhất

47

trong GIS. Nó còn đƣợc gọi là “tổ chức theo ô vuông của dữ liệu không

gian” (cellular organization of spatial data). Pixel là phần tử cơ sở của cấu

trúc dữ liệu Raster để biểu diễn một đặc trƣng địa lý f(x,y) nào đó, giá trị

của pixel chỉ tính chất của đối tƣợng không gian. Giá trị số của pixel chính

là mã đƣợc gắn cho đối tƣợng không gian (tức là mỗi đối tƣợng không gian

có một mã nhất định). Giá trị bằng không thƣờng là những pixel chỉ vùng

ngoài khu vực nghiên cứu. Ví dụ các đối tƣợng đất trồng bắp có mã bằng 1,

đất trồng cam có mã bằng 2, đất trồng điều có mã bằng 3, đất trồng mía có

Hình 3.2: Các đối tượng không gian được mã hoá trong mô hình Raster

mã bằng 4…(hình 3.2).

Thuộc tính gán cho ô sẽ định nghĩa phân lớp, nhóm, chủ đề hoặc giá

trị đo đƣợc ở tại vị trí của ô. Ô có thể có giá trị là số nguyên hoặc số thập

phân. Khi một giá trị số nguyên đƣợc sử dụng cho ô ảnh, nó có thể đƣợc

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

dùng làm mã nhận dạng.

Hình 3.3: Các điểm ả nh được mã hoá trong mô hình Raster như một ma trận số nguyên

48

Nhƣ vậy, mô hình Raster biểu diễn không gian nhƣ là một ma trận số

nguyên, mỗi một giá trị số nguyên đại diện cho một thuộc tính, vị trí của số

nguyên chính là vị trí của đối tƣợng. Ma trận không gian từ các ô ảnh này

đƣợc mã hoá và lƣu trữ trong máy tính theo quy luật nhất định thông qua vị

trí của từng ô.

Viê ̣c lƣ̣a cho ̣n bài toán ƣ́ ng du ̣ng đƣơ ̣c dƣ̣a trên hai yếu tố cơ bản , thƣ́ nhất là cách biểu diễn mô hình Raster không gian nhƣ là một ma trận số

nguyên và thứ hai là hai thuâ ̣t toán đƣơ ̣c đề câ ̣p chƣơng 2 là thuật toán tìm hình nhật tối đại và thuật toá n tính thể tích nƣớ c đọng.

Bài toán ứng dụng 1: Ứng dụng thuâ ̣t toán tìm hình chữ nhật tối đại

đƣợc áp dụng thƣ̣c tế trong lớ p các bài toán nhƣ: quy hoạch xây dựng, tìm

vùng lớn nhất để xây xƣởng công nghiệp, xây dựng một sân vận động, ….

Trong luâ ̣n văn cho ̣n bài toán ứng dụng lƣ̣a cho ̣n là xác định một vùng hình

chữ nhật có diện tích lớn nhất và bằng phẳng trên một vùng địa hình để xây

dƣ̣ng sân bay – Bài toán: Dự án xây dựng sân bay.

Bài toán ứng dụng 2: Thuâ ̣t toán tính thể tích nƣớc đo ̣ng đƣơ ̣c ứng

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

dụng trong mô ̣t số lĩnh vƣ̣c thƣ̣c tế nhƣ : Trong đi ̣a chất tính thể tích khối địa hình, trong y học với công nghệ chụp cắt lớp con ngƣời có thể xác định

49

đƣợc khối u lớn hay nhỏ nhƣng với cách tiếp cận theo thuật toán trên

chúng ta cũng hoàn toàn tin tƣởng ứng dụng và đem lại hiê ̣u quả tƣơng tự.

Trong khảo sát địa chất việc tính toán khối lƣợng, trữ lƣợng một khối

quặng đƣợc giam trong lòng đất luôn là bài toán phức tạp tuy nhiên bài

toán phức tạp này cũng có thể giải quyết bằng thuật toán trên nếu chúng ta

gắn số đo khảo sát địa hình vào một hệ quy chiếu phù hợp. Luâ ̣n văn cho ̣n

bài toán ứng dụng trong lĩnh vực thủy lợi là bài toán tính thể tích chƣ́ a

nƣớ c cho mô ̣t lòng hồ.

3.2. Bài toán: Dự án xây dựng sân bay

3.2.1. Phát biểu bài toán

Tại Thành phố Hải Phòng, trong năm 2015 có đƣa ra đề án xây dựng

sân bay tại Huyện Thủy Nguyên nhằm phát triển hệ thống giao thông hàng

không và phát triển nền kinh tế Thành Phố, đặc biệt là phát triển kinh tế

của Huyện. Sau khi thống nhất quyết định thực hiện đề án và mời thầu.

Để thắng thầu thì nhà thầu phải đƣa ra một phƣơng án khoa học với

giá trị gói thầu dự án thích hợp. Một trong những yếu tố quyết định tính

khoa học và giá trị của gói thầu đó là chọn địa điểm xây dựng sân bay sao

cho trên vù ng đi ̣a hình cho sẵn củ a Huyê ̣n hãy tìm ra vùng diện tích lớn nhất, bằng phẳng là hình chữ nhật để tiết kiệm chi phí san lấp mặt bằng.

3.2.2. Mô tả dƣ̃ liê ̣u

Bài toán đƣợc ra trên vùng địa hình có những vùng bằng phẳng khác

phí cho công việc xây dựng nhau nếu ta tìm đƣơ ̣c mô ̣ t vù ng có diê ̣n tích lớ n nhất và bằng phẳng nhất theo hình chƣ̃ nhâ ̣t để xây dƣ̣ng s ân bay thì bài toán đƣợc đáp ứng sẽ giảm đáng kể nhƣ̃ng chi . Đồng thời không ảnh

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

hƣở ng nhiều đến nhƣ̃ng quy hoa ̣ch vù ng lân câ ̣n , không tốn kém cho viê ̣c san lấp mă ̣t bằng .

50

Sau khi khảo sát bằng các biện pháp nghiệp vụ thực nghiệm đo đạc

độ cao bài toán đƣa về có đ ầu vào là một ma trận A kích thƣớc n x m, giá trị trong ô A[i,j] (với i = 1 .. n, j = 1 .. m) là độ cao tƣơng ứng với vị trí đo

đƣợc trên địa hình. Đầu ra là một ma trận con lớn nhất có độ cao bằng

nhau.

- Input: Tệp SANBAY.INT gồm:

+ Dòng đầu chứa 2 số nguyên n và m + n dòng sau, mỗi dòng chứa m số nguyên cách nhau dấu

cách.

- Output: Tệp SANBAY.OUT gồm:

+ Dòng đầu là diện tích hình chữ nhật lớn nhất bằng phẳng

+ Dòng 2 tọa độ đỉnh trên bên trái của hình chữ nhật.

+ Dòng 3 là tọa độ đỉnh dƣới bên phải của hình chữ nhật tìm

đƣợc.

3.2.3. Thiết kế cá c bƣớ c thƣ̣c hiê ̣n

 Bước 1:

Khảo sát địa h ình lấy giá tri ̣ thực địa

số liệu thể hiện là ma trận mà giá trị các ô

trong ma trận thể hiện độ cao tƣơng ứng đo

đƣợc tại vị trí đó.

Ví dụ từ một vùng địa hình khảo sát

Hình 3.4: Vùng địa hình khảo sát xây dựng sân bay

(Hình 3.4)

Ta có ma trận thể hiện độ cao tƣơng ứng nhƣ sau:

1 2 2 2 2 3

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

51

1 2 2 4 3 3 1 4 4 4 3 3 2 4 4 4 3 3 2 4 4 4 2 2 2 3 2 3 2 1 1 1 2 2 2 5 1 1 2 3 2 5 Hình 3.5: Ma trận số nguyên thể hiê ̣n theo độ cao vù ng đi ̣a hình

 Bước 2:

Lƣu toàn bộ các giá trị khác nhau trong ma trận (các độ cao đo đƣợc

tại địa hình) vào mảng một chiều (mảng B), ta đƣợc:

1

2

3

4

6

B

1

2

3

4

5

So với bài toán tìm hình chữ nhật tối đại chứa toàn số 1 trong ma trận

chỉ chứa hai giá trị 0 và 1 ở chƣơng 2 thì bài toán này đầu vào là một ma

trận chứa nhiều giá trị hơn. Vấn đề đặt ra là tìm cách đƣa bài toán về bài

toán đầu vào là một ma trận chỉ chứa 2 loại giá trị 0 và 1 để tìm ra diện tích

hình chữ nhật lớn nhất chứa toàn 1?

 Bước 3:

Xét giá trị đầu tiên trong mảng chứa độ cao B là B[1] = 1 (độ cao

đầu tiên = 1).

Ta thay hết các ô trên ma trận A đầu vào có giá trị bằng độ cao đang

xét là 1, ngƣợc lại các ô có giá trị không bằng độ cao đang xét ta thay giá

trị là 0. Lúc này đầu vào của bài toán trở về dạng ma trận chỉ chứa 2 giá trị

0 và 1.

1 0 0 0 0 0 1 0 0 0 0 0

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

52

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0

Gọi chƣơng trình tính diện tích hình chữ nhật tối đại chứa toàn số 1

ở chƣơng 2 để thực hiện. Ta sẽ thu đƣợc hình chữ nhật tối đại của độ cao

đang xét.

1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0

Lúc này quy về bài toán ban đầu ta tìm đƣợc hình chữ nhật tối đại

của độ cao đang xét (độ cao = 1).

1 2 2 2 2 3 1 2 2 4 3 3 1 4 4 4 3 3 2 4 4 4 3 3 2 4 4 4 2 2 2 3 2 3 2 1 1 1 2 2 2 6 1 1 2 3 2 6

Tạm thời coi diện tích tối đại này là diện tích hình chữ nhật lớn nhất

có địa hình bằng phẳng cần tìm của bài toán.

Smax = Smax(B[1]) = 4

Tọa độ đỉnh trên – trái là (1,7) và đỉnh dƣới – phải là (2,8).

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

 Bước 4:

53

Tƣơng tự, lần lƣợt xét tiếp các độ cao tiếp theo trong mảng B cho

đến hết. Ta sẽ thu đƣợc hình chữ nhật tối đại của các độ cao tƣơng ứng:

Với độ cao B[2] = 2 ta đƣợc Smax(B[2]) = 5

1 2 2 2 2 3 1 2 2 4 3 3 1 4 4 4 3 3 2 4 4 4 2 3 2 4 4 4 2 2 2 3 2 3 2 1 1 1 2 2 2 6 1 1 2 3 2 6

Ta so sánh với Smax(B[2]) với Smax, nếu Smax(B[2]) > Smax thì ta

thay giá trị Smax = Smax(B[2]) và lƣu lại đỉnh trên - trái mới (5,4) và đỉnh

dƣới - phải (5,8), trong trƣờng hợp ngƣợc lại Smax(B[2]) <= Smax ta sẽ

giữ không thay đổi gì.

Với độ cao B[3] = 3 ta đƣợc Smax(B[3]) = 4

1 2 2 2 2 3 1 2 2 4 3 3 1 4 4 4 3 3 2 4 4 4 2 3 2 4 4 4 2 2 2 3 2 3 2 1 1 1 2 2 2 6 1 1 2 3 2 6

So sánh Smax(B[3]) với Smax ta thấy Smax(B[3]) < Smax nên

Smax giữ nguyên.

Với độ cao B[4] = 4 ta đƣợc Smax(B[4]) = 9:

1 2 2 2 2 3 1 2 2 4 3 3 1 4 4 4 3 3 2 4 4 4 2 3 2 4 4 4 2 2 2 3 2 3 2 1

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

54

1 1 2 2 2 6 1 1 2 3 2 6

Ta so sánh với Smax(B[4]) với Smax, ta thấy Smax(B[4]) > Smax

vậy thay giá trị Smax = Smax(B[4]) = 9 và lƣu lại đỉnh trên - trái là (2,3)

và đỉnh dƣới - phải là (4,5).

Với độ cao B[5] = 6 ta đƣợc Smax(B[5]) = 2:

1 2 2 2 2 3 1 2 2 4 3 3 1 4 4 4 3 3 2 4 4 4 2 3 2 4 4 4 2 2 2 3 2 3 2 1 1 1 2 2 2 6 1 1 2 3 2 6

So sánh Smax(B[5]) với Smax ta thấy Smax(B[5]) < Smax nên

Smax giữ nguyên.

 Bƣớc 5:

Ghi nhận kết quả diện tích hình chữ nhật bằng phẳng lớn nhất là

Smax = 9 và đỉnh trên - trái (2,3), đỉnh dƣới - phải (4,5). Tƣ̀ kết quả tìm đƣơ ̣c ta quy đổi thành diê ̣n tích lớ n nhất trên vù ng đi ̣a hình ƣ́ ng vớ i tỉ lê ̣ bản đồ cụ thể.

3.3. Bài toán: Tính thể tích chứ a nƣớ c cho mô ̣t lòng hồ

3.3.1. Phát biểu bài toán

Xuất phát từ bài toán xả lũ của các nhà máy thủy điện do không tính đƣơ ̣c lƣơ ̣ng nƣớ c chƣ́ a củ a các hồ vù ng ha ̣ lƣu nên đã xảy ra rất nhiều nhà

máy thủy điện xả lũ gây thiệt hại cho bà con sinh sống ở vùng hạ lƣu. Vậy

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

vấn đề đặt ra là phải xả lũ có lƣợng nƣớc thế nào để đảm bảo đú ng tính chất điề u tiết lƣơ ̣ng nƣớ c phù hơ ̣p không gây thiệt hại cho ngƣời dân sống

55

ở vùng hạ lƣu, không ảnh hƣở ng đến viê ̣c tƣớ i tiêu cây trồng và đảm bảo . Để giải quyết vấn

cung cấp nƣớ c cho sinh hoa ̣t cũng nhƣ công tác thủ y lơ ̣i đề trên con ngƣờ i cầ n phải tính chính là bài toán tính đƣơ ̣c lƣơ ̣ng nƣớ c (tƣơng đối ) chƣ́ a củ a lòng hồ phía dƣới đập xả lũ . Trong bài toán này cần lƣu ý đến khả năng gây loang , các vị trí loang của nƣớc là vùng mà nƣớc

chảy qua để thoát ra ngoài vùng địa hình đang xét, nếu lƣợng nƣớc quá lớn

sẽ dẫn đến lũ lụt tức thời (tại một thời điểm do lƣợng nƣớc quá lớn tràn qua

lối thoát hẹp thì mực nƣớc dâng lên gây lũ lụt tức thời). Từ đó đƣa phƣơng

án xả nƣớc trong hồ hợp lí tránh gây thiệt hại cho ngƣời dân trong vùng.

3.2.2. Mô tả dƣ̃ liê ̣u

Bài toán đƣợc đặt ra trên một vùng diện tích nhất định nơi xây dựng

đập thủy điện, trong đó gồm các dãy núi có nƣớc đổ dồn về hồ chứa nƣớc

thủy điện và hồ tự nhiên trong vùng. Ta sẽ quy bài toán này về bài toán

tính thể tích vùng nƣớc đo ̣ng tƣơng ƣ́ ng vớ i bài toán chƣ́ a nƣớ c củ a mô ̣t

lòng hồ . Bằng các biện pháp nghiệp vụ sau khi thực nghiệm đo đạc độ cao

các ngọn núi , quả đồi và những đảo nhỏ trong khu vƣ̣c hồ nƣớc . Ta sẽ biểu

diễn đƣợc nó trên mô hình của bài toán tính thể tích vùng nƣớc ngập bằng

cách chia thành từng lƣới ô vuông bằng nhau tƣơng ứng với một ma trận ,

. Chiều cao mỗi ô trong ma trận biểu diễn một đô ̣ cao có vị trí tƣơng ứng

các ngọn núi, quả đồi, đảo nhỏ đƣợc biểu diễn bằng độ cao khác nhau, khi

đó bài toán trở về bài toán tính thể tích vùng nƣớc đo ̣ng.

Đầu vào là một ma trận A kích thƣớc m x n tƣơng ú ng vớ i ma trâ ̣n

lƣớ i ô vuông vù ng đi ̣a hình có hồ , giá trị trong ô A[i,j] (với i=1..m, j = 1..n) là độ cao tƣơng ứng với vị trí đo đƣợc trên địa hình. Đầu ra là thể tích chứa

nƣớc trong lòng hồ.

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

- Input: Ma trận số nguyên m x n.

56

(Phần tử thứ j trên dòng i trong số m dòng tiếp theo là chiều cao

của cột đặt tại ô (i, j).

- Output: Thể tích chứa nƣớ c trong lòng hồ .

3.3.3. Thiết kế cá c bƣớ c thƣ̣c hiê ̣n

 Bước 1:

Khảo sát địa hình lấy giá trị thực địa số liệu thể hiện là ma trận mà

giá trị các ô trong ma trận thể hiện độ cao tƣơng ứng đo đƣợc trên địa hình.

Chiều cao các ngọn núi , quả đồi, đảo nhỏ đƣợc biểu diễn bằng độ cao khác nhau.

Hình 3.6: Vùng địa hình có một hồ chứa nước

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Ví dụ từ một vùng địa hình khảo sát (Hình3.6):

57

6 0

35 33 32 29 28 32 33 35 0 0 26 31 25 28 12 6 0 0 22 32 0 20 30 0 0 12 29 0 12 29 0 0 0 18 0 28 27 0 6 29 0 22 0 12 31 0 35 0 0 15 32 35 0 0 6 37 16 12 8 0 17 35 36 19 11 7 15 0 19 33 37 28 5 3 11 5 31 34 38 36 35 32 33 34 35 37 Hình 3.7: Ma trận số nguyên theo độ cao vù ng có hồ

Ta có ma trận thể hiện độ cao tƣơng ứng nhƣ sau:

 Bước 2:

Tƣ̀ số liê ̣u ma trâ ̣n (các độ cao đo đƣợc tại địa hình) chuyển vào tê ̣p

dƣ̃ liê ̣u vào (tê ̣p: THETICH1.INP):

+ Dòng đầu chƣ́ a 2 số nguyên dƣơng m và n.

+ Phần tử thứ j trên dòng i trong số m dòng tiếp theo là chiều cao

của cột đặt tại ô (i, j).

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Bước 3:

58

Chạy thực nghiệm bằng chƣơng trình THETICH .PAS

 Bước 4:

Ghi nhâ ̣n kết quả lƣu ra tê ̣p THETICH 1.OUT

Tƣ̀ kết quả trên ta tính đƣợc thể tích chứa nƣớc trong lòng hồ tƣơng

ứng với tỉ lệ đƣơ ̣c quy đổi.

3.4. Cài đặt chƣơng trình

(Cài đặt chương trình cho một số bài toán bằng ngôn ngữ Turbo pascal

7.0; Free pascal:)

3.4.1. Chƣơng trình tính diện đa giác theo tọa độ đỉnh

Uses math; Const finp='dagiac.inp'; fout='dagiac.out'; var fi,fo:text; x,y:array[1..1000] of longint; n,i:integer; t1,t2:longint; s:real; procedure docdl; begin assign(fi,finp); reset(fi); read(fi,n);

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

59

for i:=1 to n do read(fi,x[i],y[i]); close(fi); end; procedure xuli; begin t1:=x[n]*y[1]; t2:=y[n]*x[1]; for i:=1 to n-1 do begin t1:=t1+x[i]*y[i+1]; t2:=t2+y[i]*x[i+1]; end; s:=abs(t1-t2)/2; end; procedure ghikq; begin assign(fo,fout); rewrite(fo); write(fo,s:8:2); close(fo); end; begin docdl; xuli; ghikq; end.

3.4.2. Chƣơng trình tìm diện tích hình chữ nhật tối đại

Uses math; Const finp='cnmax.inp';//cnmax.inp'; fout='cnmax.out';//cnmax.out'; Var fi,fo:text; m,n,d :longint; l,r,h,a :array[0..1001,0..70] of longint; s,smax,yt,yd,xtr,xph:longint; Procedure docdl; var i,j:longint; begin assign(fi,finp);reset(fi); readln(fi,n,m);

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

60

for i:=1 to n do begin for j:=1 to m do read(fi,a[i,j]); readln(fi); end; close(fi); end; Procedure xulicanh; var i,j,k:longint; begin for i:=1 to n do for j:=1 to m do if a[i,j]=0 then h[i,j]:=0 else h[i,j]:=h[i-1,j]+1; for i:= 1 to n do for j:=1 to m do if a[i,j]=0 then l[i,j]:=0 else begin d:=0; for k:=1 to j do if (a[i,k]=1) and (h[i,k]>=h[i,j]) then inc(d) else d:=0; l[i,j]:=d; end; for i:=1 to n do for j:=m downto 1 do if a[i,j]=0 then l[i,j]:=0 else begin d:=0; for k:=m downto j do if (a[i,k]=1) and (h[i,k]>=h[i,j]) then inc(d) else d:=0; r[i,j]:=d; end; end;

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

61

procedure xuli; var i,j:longint; begin Smax:=0; for i:=1 to n do for j:=1 to m do begin S:=h[i,j]*(l[i,j]+r[i,j]-1); if s> smax then begin smax:=s; yt:=i+1-h[i,j]; xtr:=j+1-l[i,j]; yd:=i; xph:=xtr+(l[i,j]+r[i,j]-1)-1; end; end; end; procedure ghikq; begin assign(fo,fout); rewrite(fo); writeln(fo,smax); writeln(fo,xtr,' ',yt); writeln(fo,xph,' ',yd); close(fo); end; Begin docdl; xulicanh; xuli; ghikq; end.

3.4.3. Chƣơng trình tính thể tích vùng nƣớc đo ̣ng

Program MODEL; Uses math; Const finp='thetich.inp'; fout='thetich.out';

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

62

Var fi,fo:text; m,n,res,hmin,hmax,h,count :longint; a,free :array[0..1001,0..1001] of longint; Procedure Docdl; var i,j :longint; begin assign(fi,finp); reset(fi); read(fi,m,n); hmin:=100000000; hmax:=0; for i:=1 to m do for j:=1 to n do begin read(fi,a[i,j]); hmin:=min(hmin,a[i,j]); hmax:=max(hmax,a[i,j]); end; close(fi); end; Procedure LOANG(x,y: longint); //Loang begin free[x,y]:=count; if (x>1)and(free[x-1,y]1)and(free[x,y-1]

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

63

// Cac o co chieu cao

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

64

KẾT LUẬN

Trong luận văn học viên đã tập trung nghiên cứu, trình bày những

kiến thức cơ bản về ba thuâ ̣t toán cơ bản và ứng dụng của các thuật toán

vào việc giải một số bài toán trong thƣ̣c tế . Qua đó luận văn đã đạt đƣợc

một số kết quả nhƣ sau:

Về lý thuyết:

Luâ ̣n văn đã khái quát về mô ̣t số cách tiếp câ ̣n để tính diê ̣n tích và thể tích vâ ̣t thể vớ i các hình đă ̣c biê ̣t . Trong đó l uận văn tập trung nghiên cứu ba thuâ ̣t toán cơ bản : Thƣ́ nhất là thuâ ̣t toán tính diện tích đa giác theo

tọa độ đỉnh , thƣ́ hai là thuật toán tìm hình chữ nhật tối đại trong ma trận chƣ́ a các kí tƣ̣ 0 và 1và thứ ba là thuâ ̣t toán tính thể tích nƣớ c đo ̣ng. Về ứng dụng

Luận văn đã phân tích và cài đặt các bƣ ớc cho bài toán ứng dụng

(Bài toán :

trong thực tế trên mô ̣t vù ng đi ̣a hình . Bài toán dụng thứ nhất là tìm vùng diê ̣n tích phẳng hình chƣ̃ nhâ ̣t lớ n nhất trên mô ̣t vù ng đi ̣a hình Dƣ̣ án xây dƣ̣ng sân bay ), bài toán ứng dụng thứ hai là tính thể tích chứa

nƣớ c cho mô ̣t lòng hồ . Phạm vi và khả năng áp dụng

, đi ̣a

Luận văn là một tài liệu tham khảo tốt cho lớ p các bài toán về tính diê ̣n tích và thể tích . Luâ ̣n văn cũng rất hƣ̃u ích cho lĩnh vƣ̣c xây dƣ̣ng cần xác đị nh mô ̣t miền diê ̣n tích phẳng lớ n nhất và cho lĩnh vƣ̣c thủ y lơ ̣i chất khi cần xác đi ̣nh thể tích khối đi ̣a hình . Hướng nghiên cứu tiếp theo

Nghiên cƣ́ u và t ối ƣu hóa các thuật toán để giảm bớt độ phức tạp tính

toán cho các thuâ ̣t toán nêu trên . Đồng thời bổ sung và mở rộng kh ả năng

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

. áp dụng các bài toán thƣờ ng gă ̣p trong thƣ̣c tế nhƣ trong lĩnh vƣ̣c y tế

65

TÀI LIỆU THAM KHẢO

Tiếng Việt

[1] Đặng văn Đức (2001), Hệ thống thông tin địa lý, NXB Khoa học và

kỹ thuật, Hà Nội.

[2] Nguyễn Xuân Huy (2010), Sáng tạo trong thuật toán và lập trình

với C#, Pascal, NXB Khoa học tự nhiên và Công nghệ, Tập 1, 2, 3.

[3] Lê Minh Hoàng (2002), Giải thuật và lập trình, Đa ̣i ho ̣c sƣ pha ̣m Hà

Nô ̣i.

[4] Đỗ Xuân Lôi (2006), Cấu trúc dữ liệu và giải thuật, NXB Đại học

quốc gia Hà Nội.

[5] Murray Bourne, Biên dịch: Võ Hoàng Trọng (2014), Đạo hà m tích

phân ứ ng dụng được gì, Đại học Quốc gia TP. Hồ Chí Minh.

[6] https://vi.wikipedia.org/wiki

Tiếng Anh

[7] Carola Giedion-Welcker (2006), An Evolution in Volume and Space,

Wittenborn.

[8] Steve S.Skiena (2008), The Algorithm Design Manual, Department

of Computer Science State University of New York.

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

[9] http://en.wikipedia.org/wiki/Shoelace_formula

66

PHỤ LỤC

Mô ̣t số test (kiểm thƣ̉ ) cho các thuật toán chƣơng 2

1. Test cho chƣơng trình tính diê ̣n tí ch đa giá c theo to ̣a đô ̣ đỉnh

Test 1 – Dƣ̃ liê ̣u vào

Test 1 – Dƣ̃ liê ̣u ra

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Test 2 – Dƣ̃ liê ̣u vào

67

Test 2 – Dƣ̃ liê ̣u ra

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

2. Test cho chƣơng trình tìm hình chữ nhật tối đạ i

68

Test 1 – Dƣ̃ liê ̣u vào

Test 1 – Dƣ̃ liê ̣u ra

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Test 2 – Dƣ̃ liê ̣u vào

69

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Test 2 – Dƣ̃ liê ̣u ra

70

3. Test cho chƣơng trình tính thể tích nƣớc đọng

Test 1 – Dƣ̃ liê ̣u vào

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Test 1 – Dƣ̃ liê ̣u ra

71

Test 2 – Dƣ̃ liê ̣u vào

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.ltc.tnu.edu.vn

Test 2 – Dƣ̃ liê ̣u ra