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 địa hình trong thực tế.. Với đề tài l
Trang 2LUẬ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
Trang 3LỜ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
Phạm Hải Ninh
Trang 4LỜ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
Phạm Hải Ninh
Trang 5MỤ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
2.2 Thuật toán tìm diện tích hình chữ nhật tối đại 25
Trang 62.3 Thuật toán tính thể tích vùng nước đọng 33
Chương 3: ỨNG DỤNG VÀ THỬ NGHIỆM 46
3.1 Cơ sở lý thuyết và lựa chọn bài toán ứng dụng 46
3.2 Bài toán: Dự án xây dựng sân bay 50
3.2.1 Phát biểu bài toán 50
3.2.2 Mô tả dữ liệu 50
3.2.3 Thiết kế các bước thực hiện 51
3.3 Bài toán: Tính thể tích chứa nước cho một lòng hồ 56
3.3.1 Phát biểu bài toán 56
3.2.2 Mô tả dữ liệu 56
3.3.3 Thiết kế các bước thực hiện 57
3.4 Cài đặt chương trình 60
3.4.1 Chương trình tính diện đa giác theo tọa độ đỉnh 60
3.4.2 Chương trình tìm diện tích hình chữ nhật tối đại 61
3.4.3 Chương trình tính thể tích vùng nước đọng 63
KẾT LUẬN 66
TÀI LIỆU THAM KHẢO 67
PHỤ LỤC 68
Trang 7DANH MỤC CÁC KÍ HIỆU, CHỮ CÁI VIẾT TẮT
(Hệ thống thông tin địa lý)
Trang 8DANH 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ố ( ), ( ) y f x yg x 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 tọ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 vị 34
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 vị 35
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 vị 36
Hình 3.1: Ma trận không gian của một file ảnh raster có cấu trúc pixel 47 Hình 3.2: Các đối tượng không gian được mã hoá trong mô hình Raster 48
Trang 9Hì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 51
Hình 3.5: Ma trận số nguyên thể hiện theo độ cao vùng địa hình 52
Hình 3.6: Vùng địa hình có một hồ chứa nước 58
Hình 3.7: Ma trận số nguyên theo độ cao vùng có hồ 58
Trang 10MỞ ĐẦ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 đị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 tạp mà con người cần tính toán
Trang 11Chươ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 đọ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ố lĩnh vực có trong thực tế
Trang 121.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 tọ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 đọ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 những khối lượng công việc tưởng như trừu tượng, khó tính toán
Trang 13Nâ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
Bố cục của luận văn bao gồm 3 chương:
Chương 1: CÁC KHÁI NIỆM CƠ SỞ
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 với các khối hình đặc biệt
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 các thuật toán sau: Thuật toán tính diện tích đa giác theo tọ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 đọng
Chương 3: ỨNG DỤNG VÀ THỬ NGHIỆM
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, trong chương này học viên trình bày cụ thể hơn về bài toán ứng dụng trong thực tế trên một vùng địa hình
Trang 141.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
Trang 15Bán kính bán kính nhân pi là thành 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 qua các yếu tố hình học cơ bản và công thức tính [6], [7]:
p
) )
)(
( p a p b p c P
Hình tam giác (Cách 2)
sin 2
1
2
1d d
S
Hình tứ giác
2 1
2
1
d d
S
Hình thoi
Trang 16h b a
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
Trang 17Ví 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ố
( ), ( )
y f x yg x liên tục trên đoạn [a, b] và hai đường thẳng x = a, x = b, ta
có công thức sau:
dx x g x f
y f x yg x liên tục trên đoạn [a, b] và hai đường thẳng x = a, x = b
Trong công thức trên ta chia thành các trường hợp cụ thể (Hình1.2): Trường hợp 1: Ta có công thức khai triển của S
Trang 18Có 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]:
1 1
i n
i
iy x y x y x y x
S
(Nguồn: http://en.wikipedia.org/wiki/Shoelace_formula)
Công thức trên viết lại tương đương với công thức sau:
Trang 19)
( )
(
2
1
1 1 2
3 1 2 1 1
3 2 2
T2 = x2y1 + x3y2 + + xnyn-1 + x1ynBước 3: Tính S
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], [7]:
Trang 20h R
Thể tích hình trụ
n g a
n
cot 4
2
V = Sh Thể tích hình lăng trụ đều
2
c b a
p
)))(
(p a p b p c
P
V = Sh Thể tích hình lăng trụ tam giác
2
c b a
p
)))(
(p a p b p c P
Sh V
3
1
Thể tích hình tứ diện
R R
Thể tích hình chóp cầu
Trang 21h R
3
Rr r
R h
Thể tích hình nón cụt
n g na
cot4
1 2
Sh V
cot 4
n g na
cot 4
1
1
S S S S h
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
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 đó
Trang 22(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]
Thể tích của vật thể này được tính theo công thức:
f x dx V
b a
2
)(
Trang 23Chươ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 tọ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 đọng Mỗi bài toán thuật toán học viên phân tích, lấy ví dụ để 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ó tọ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]:
1 1
i n
i
iy x y x y x y x
S
(Nguồn: http://en.wikipedia.org/wiki/Shoelace_formula)
Trang 24Công thức trên được viết lại tương đương với công thức sau:
)
( )
(
2
1
1 1 2
3 1 2 1 1
3 2 2
Bước 1: Tính T1
T1 = x1y2 + x2y3 + + xn-1yn + xny1Bước 2: Tính T2
T2 = x2y1 + x3y2 + + xnyn-1 + x1ynBước 3: Tính S
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 = |T1-T2|/2 = |224-160|/2 = 64/2 = 32
Trang 25Hình 2.1: Hình chữ nhật ABCD trong mặt phẳng tọa độ Oxy
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
Trang 26= 12 x 4 + 10 x 4 + 12 x 6 + 8 x 4 + 4 x 4
= 48 + 40 + 72 + 32 + 32 = 224
S = |T1-T2|/2 = |280-224|/2 = 56/2 = 28
Hình 2.2: Ngũ giác lõm ABCDE trong mặt phẳng tọa độ Oxy
Ở 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):
Trang 27= 4 x 4 + 12 x 6 + 14 x 8 + 12 x 8 + 4 x 4
= 16 + 72 + 112 + 96 + 16 = 312 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
S = |T1-T2|/2 = |312-240|/2 = 72/2 = 36
Hình 2.3: Ngũ giác lồi ABCDE trong mặt phẳng tọa độ Oxy
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
Trang 28T1 = xAyB + xByC + xCyD + xDyA = 4 x 4 + 12 x 8 + 11 x 8 + 8 x 4
= 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
Hình 2.4: Hình thang ABCD trong mặt phẳng tọa độ Oxy
Ở 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:
Trang 29Ví 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):
= 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
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à
Trang 30chiề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
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
Trang 31Để giải bài toán trên theo dữ liệu vào như ví dụ 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 để đọ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
Sau đó tính diện tích đa giác theo các bước:
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-1tươ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
Trang 32S = |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 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 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 tọ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 Đọ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
Trang 335 Ghi kết quả S ra tệp DAGIAC.OUT
Các bước thuật toán trên có thể được mô tả bằng sơ đồ sau:
i > N-1
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
Trang 34 Độ 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
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
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:
Trang 35Lúc này ma trận trên ta tìm được hình chữ nhật tối đạ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)
Trang 36Khi đó ma trận trên ta tìm được hình chữ nhật tối đại chứa các kí tự 1
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)
- 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
Trang 373 ≤ 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 đạ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à đỉnh dưới – phải là (cột 6, dòng 5)
Ý 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
Trang 38Từ đó 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))
- 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
Trang 39Chứ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
Trang 40Output: 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)