CHƯƠNG 2: MÔ HÌNH SỐ ĐỊA HÌNH VÀ ỨNG DỤNG TRONG TRẮC ĐỊA CÔNG TRÌNH
2.2. Nghiên cứu lựa chọn thuật toán thành lập mô hình số địa hình
Qua các phân tích ở trên, chúng ta có thể nhận thấy mô hình tam giác không quy chuẩn TIN thể hiện bề mặt địa hình linh hoạt với độ chính xác thích hợp và thuận tiện trong các bài toán ứng dụng trên mô hình số địa hình. Vì vậy trong luận văn này tác giả chọn thành lập mô hình số địa hình theo mô hình tam giác không quy chuẩn TIN. Hiện nay có nhiều phương pháp thành lập lưới tam giác nhưng chủ yếu theo hai xu hướng sau:
- Tạo trực tiếp bằng tam giác hóa Delaunay;
- Tạo gián tiếp thông qua sơ đồ Voronoi.
2.2.1. Luới tam giác Delaunay
Phương pháp tam giáp hóa mô hình số bằng tam giác Delaunay do Boris N.
Delaunay (1890 - 1980) đề xuất. Mô hình lưới tam giác Delaunay được định nghĩa như sau:
“Ba điểm trong một tập hợp điểm cho trước sẽ là đỉnh của tam giác Delaunay khi và chỉ khi đường tròn ngoại tiếp chúng không chứa một điểm nào trong tập hợp đã cho”.
“Hai điểm Pi và Pj sẽ tạo thành một cạnh của tam giác Delaunay khi và chỉ khi đường tròn đi qua hai điểm đó không chứa bất kỳ điểm nào khác”.
“Vòng tròn ngoại tiếp ba đỉnh của một tam giác hóa trong lưới tam giác hóa không chứa bất kỳ một đỉnh nào khác”.
Những lưới tam giác thỏa mãn điều kiện trên gọi là lưới tam giác Delaunay.
Và bề mặt TIN tương ứng được gọi là mô hình TIN Delaunay.
Hình 2.4 Tam giác thường và tam giác Delaunay
20
Mạng lưới TIN Delaunay thường được dùng để xây dựng đường đồng mức và khai thác các ứng dụng cũng như phục vụ các bài toán phân tích không gian. So với các phương pháp tam giác hóa khác thì phương pháp của Delaunay có một số ưu, nhược điểm sau:
* Ưu điểm của lưới tam giác Delaunay:
- Các tam giác có hình dạng gần giống với tam giác đều nhất có thể được;
- Đảm bảo cho bất cứ điểm nào trên bề mặt cũng gần với một điểm nút nhất có thể được;
- Quá trình tam giác hóa độc lập với trình tự xử lý điểm;
- Nguyên tắc xây dựng tam giác rất nghiêm ngặt nên sẽ hạn chế đến mức tối đa việc bỏ sót điểm cũng như xuất hiện các tam giác chồng chéo trong mô hình.
* Nhược điểm của lưới tam giác Delaunay:
Các tam giác không có tính trật tự vì vậy việc quản lý tam giác gặp nhiều khó khăn.
2.2.2. Sơ đồ Voronoi
Sơ đồ Voronoi bao gồm các ô voronoi là những vùng đa giác bao xung quanh mỗi điểm và bất kỳ vị trí nào nằm trong ô đều gần nhất với điểm đó. Định nghĩa một cách toán học “Sơ đồ Voronoi của một tập điểm V = {p1, p2, ..,pn} trên mặt phẳng là một phân hoạch mặt phẳng thành n miền không giao nhau V1, V2,…., Vn
sao cho mọi điểm trong miền Vi có khoảng cách đến điểm pi gần hơn đến mọi điểm trong tập V”. Sơ đồ Voronoi có các tính chất sau:
- Các ô voronoi là các đa giác lồi;
- Số cạnh của sơ đồ voronoi ≤ 3n - 6;
- V(pi) là đa giác không khép kín khi và chỉ khi điểm pi nằm trên bao lồi của tập điểm;
- Nếu v là một đỉnh của Voronoi đến giao điểm của V(p1), V(p2), V(p3) thì v là tâm đường tròn ngoại tiếp p1, p2, p3;
- Đường tròn ngoại tiếp C(v) không chứa bất kỳ một đỉnh nào khác;
21
- Mỗi điểm nằm trên một cạnh Voronoi là tâm đường tròn ngoại tiếp đi qua hai điểm pi, pj gần nhất.
Hình 2.5 Sơ đồ Voronoi
2.2.3. Mối liên hệ giữa tam giác Delaunay và sơ đồ Voronoi
Trên thực tế tam giác hóa Delaunay và sơ đồ Voronoi có mối quan hệ với nhau. Từ sơ đồ Voronoi có thể chuyển qua tam giác Delaunay và ngược lại. Kích thước của tam giác Delaunay phụ thưộc vào mật độ phân bố điểm trong khi mật độ này được suy ra trực tiếp từ sơ đồ Voronoi.
Hình 2.6 Mối quan hệ giữa tam giác Delaunay và sơ đồ Voronoi 2.2.4. Các phương pháp xây dựng mô hình TIN Delaunay
Mô hình TIN Delaunay có thể được thành lập theo nhiều phương pháp, tuy nhiên chỉ có ba phương pháp xây dựng mô hình nhanh nhất hiện nay:
22
- Phương pháp tăng dần (Incremetal)
- Phương pháp chia để trị (Devide and Conquer) - Phương pháp quét mặt phẳng (Plane Sweep)
Trong luận văn này tác giả sử dụng phương pháp chia để trị kết hợp thuật toán sắp xếp Heapsort để xây dựng mô hình TIN Delaunay.
2.2.4.1. Chia để trị (Devide and Conquer) a) Tư tưởng của thuật toán chia để trị
Bước 1: Sắp xếp tập điểm theo thứ tự tăng dần tọa độ X, nếu tọa độ X trùng sắp xếp theo thứ tự tăng dần tọa độ Y, loại bỏ các điểm trùng nhau;
Hình 2.7 Sắp xếp các điểm trong tập điểm
Bước 2: Phân chia tập điểm thành hai phần cho đến khi tập con không chứa nhiều hơn 3 điểm. Các tập con này có thể là tam giác nếu chứa 3 điểm hoặc đoạn thẳng nếu chứa 2 điểm;
Hình 2.8 Phân chia tập điểm thành các tập con L và R
Bước 3: Trộn đệ quy các tập con L và R, kết quả của thủ tục trộn bất kỳ tạo ra cạnh LL có 2 đỉnh thuộc tập con L, cạnh RR có 2 đỉnh thuộc tập con R và cạnh LR có 1 đỉnh thuộc tập con L và 1 đỉnh thuộc tập con R.
23
Hình 2.9 Kết quả trộn 2 tập con bất kỳ
HÌnh 2.10 Hai phần tam giác L và R sau khi trộn đệ qui
HÌnh 2.11 Cạnh BaseLine giữa tập con R và L
HÌnh 2.12 Chọn điểm thuộc tập L và R thỏa mãn Base-LR và điều kiện Delaunay
24
Hình 2.13 Mạng lưới TIN Delaunay sau khi trộn các tập con L và R b) Đặc điểm của thuật toán chia để trị:
- Tập hợp các điểm được chia thành nhiều tập con chứa không quá ba điểm;
- Độ phức tạp của thuật toán là O(NlogN);
- Đây là thuật toán khá phức tạp đặc biệt khi xử lí ghép biên các tập con;
- Khó khăn trong công tác biên tập trên mô hình và ứng dụng các bài toán phân tích sau khi thành lập mô hình.
2.3. NGÔN NGỮ LẬP TRÌNH VÀ SƠ ĐỒ KHỐI KHI XÂY DỰNG PHẦN MỀM THÀNH LẬP MÔ HÌNH SỐ ĐỊA HÌNH
2.3.1. Ngôn ngữ lập trình
2.3.1.1. Giới thiệu ngôn ngũ lập trình VBA (Visual Basic Aplication)
VBA là một công cụ lập trình cho phép phát triển nhanh phần mềm và được tích hợp vào trong ứng dụng nền. Về thực chất, VBA được xây dựng dựa trên kiến trúc COM1, cho nên người dùng có thể sử dụng các thành phần sẵn có của ứng dụng nền trong việc xây dựng chương trình của mình với VBA.
Một dự án được xây dựng bằng VBA dựa trên ứng dụng nền nào thì nó phụ thuộc chặt chẽ vào ứng dụng nền đó, bởi theo mặc định, dự án VBA sẽ hoạt động và sử dụng các thành phần trong chính ứng dụng nền đó. Điều này có nghĩa là ta rất
25
khó có thể chuyển đổi một dự án VBA từ loại ứng dụng nền này sang một ứng dụng nền khác cũng như tạo ra một ứng dụng chạy độc lập.
2.3.1.2. Cấu trúc của một dự án VBA
Khi nói đến các thành phần tạo nên một dự án VBA thì cấu trúc của nó, về tổng quát như sau:
- Mô-đun chuẩn (Module): là nơi chứa các mã lệnh khai báo, các chương trình con (hàm và thủ tục). Việc tạo ra các mô-đun chuẩn thường căn cứ theo các khối chức năng mà người thiết kế hệ thống đặt ra.
- Mô-đun lớp (Class Module): là nơi chứa định nghĩa cho các lớp của dự án.
- Userform: là giao diện dạng hộp thoại giúp cho việc giao tiếp giữa người sử dụng và chương trình được thuận tiện. Thông thường người ta sử dụng Userform để nhập số liệu, xuất kết quả của chương trình. Trong một số dự án, nếu việc nhập số liệu và biểu diễn kết quả được thực hiện trực tiếp trên ứng dụng nền, thì có thể không cần sử dụng Userform.
Những thành phần này là bộ khung để người dùng xây dựng chương trình của mình lên trên đó, ví dụ như viết mã lệnh hay thiết kế giao diện cho chương trình.
Mô-đun lớp và UserForm là hai thành phần có thể xuất hiện hoặc không thùy thuộc vào từng dự án và tất cả những thành phần sử dụng trong dự án đều được hiển thị trên giao diện của VBA IDE.
Trong mỗi công cụ lập trình trên ứng dụng nền, luôn có một môi trường lập trình nhằm hỗ trợ người dùng có thể xây dựng, thử nghiệm và hoàn thiện chương trình của mình. Trong AutoCAD và Excel, khi sử dụng VBA để lập trình, môi trường lập trình được gọi là Môi trường phát triển tích hợp (viết tắt là VBA IDE).
Trên tất cả các ứng dụng nền, VBA IDE có cấu trúc và hoạt động giống nhau với giao diện cơ bản. Cách gọi giao diện VBA IDE từ ứng dụng nền như sau:
- Phím tắt: từ giao diện chính của ứng dụng nền, nhấn tổ hợp phím Alt+F11.
- Menu: Tools → Macro → Visual Basic Editor.
26
Hình 2.14 Giao diện làm việc một dự án Project
HÌnh 2.15 Giao diện chính của VBA IDE 2.3.1.3. Ưu điểm của ngôn ngữ lập trình VBA
VAB thực thi cùng Autocad và đưa ra một môi trường phát triển ứng dụng thông minh, nhanh chóng ngay bên trong Autocad. Có 4 ưu điểm chính khi sử dụng VBA:
- Ngôn ngữ lập trình VBA rất dễ học và sử dụng;
27
- VBA thực thi cùng tiến trình với Autocad, vì vậy chương trình có tốc độ thực thi rất nhanh;
- Xây dựng hộp thoại nhanh chóng và hiệu quả;
- Dự án có thể phân phối riêng hoặc nhúng trong từng bản vẽ.
2.3.2. Sơ đồ khối xây dựng phần mềm tạo mô hình số địa hình
Mô hình TIN chia bề mặt địa hình thành các tam giác liên tục, không chồng chéo lên nhau và các điểm đo chính là các đỉnh của các tam giác. Bề mặt địa hình trong mỗi tam giác được coi là phẳng. Hiện nay chưa có phương pháp tam giác hóa nào có thể mô phỏng chính xác 100% bề mặt địa hình, nhưng phương pháp tam giác hóa Delaunay được đánh giá cho kết quả tốt nhất. Trong nội dung luận văn này, tác giả sử dụng phương pháp xử lý ghép biên của thuật toán chia để trị (Divide and Conquer) và ngôn ngữ lập trình VBA để xây dựng chương trình thành lập mô hình số địa hình.
HÌnh 2.16 Sơ đồ khối phần mềm thành lập mô hình số địa hình
28
HÌnh 2.17 Sơ đồ thuật toán xây dựng mô hình số địa hình 2.4. XÂY DỰNG PHẦN MỀM THÀNH LẬP MÔ HÌNH SỐ ĐỊA HÌNH
2.4.1. Giao diện và các chức năng của phần mềm thành lập mô hình số địa hình Phần mềm thành lập mô hình số địa hình được lập trình bằng ngôn ngữ VBA có một số chức năng chính sau đây:
- Tạo một hoặc nhiều mô hình TIN trong tập điểm lựa chọn;
- Chỉnh sửa, biên tập mô hình:
+ Lật cạnh của mô hình TIN đang làm việc;
+ Nội suy độ cao (có thể thay đổi mô hình hoặc không thay đổi do người sử dụng lựa chọn).
29
HÌnh 2.18 Giao diện chính của phần mềm thành lập mô hình số địa hình
HÌnh 2.19 Giao diện các chức năng trong phần thành lập mô hình số địa hình
30
2.4.2. Tổ chức cơ sở dữ liệu 2.4.2.1. Cấu trúc dữ liệu điểm
Type DIEM
ID As Long X As Double Y As Double Z As Double TEN As String GHICHU As String KIEUDIEM As String LAYER As String COUNT As Long End Type
2.4.2.2. Cấu trúc dữ liệu đường
Type DUONG ID As Long diemdau As DIEM diemcuoi As DIEM DODAI As Double KIEUDUONG As String LAYER As String COUNT As Long End Type
2.4.2.3. Cấu trúc dữ liệu điểm nút
Type NUT
ID As Long COUNT As Long DIEMGOC As DIEM
NUT_DICH(50) As Long CANH_DICH(50) As DUONG TENNUT As String
End Type
2.4.3. Các modul ứng dụng của chương trình 2.4.3.1. Modul tạo mô hình TIN
Thuật toán thành lập mô hình TIN thực hiện như sau:
- Chọn tập điểm trên bản vẽ Autocad;
- Xây dựng mô hình số địa hình và vẽ các cạnh tam giác của mô hình.
31
HÌnh 2.20 Giao diện tùy chọn loại đối tượng tạo mô hình số địa hình
HÌnh 2.21 Kết quả sau khi tạo mô hình số địa hình
32
Sub TAO_MHT(TENMH As String) ' CHON DOI TUONG Dim VUNGCHON As AcadSelectionSet 'Selection set..
Dim point_in As AcadPoint Dim TEXT_IN As AcadText Dim line_in As AcadLine Dim CIRCLE_IN As AcadCircle
Dim FType(0) As Integer 'Filter type..
Dim FData(0) As Variant 'Filter data..
Dim ds_Point As Variant Dim DS_DI(50000) As DIEM Dim TONGDIEM As Long On Error Resume Next
Set VUNGCHON = ThisDrawing.SelectionSets(TENMH) If Err <> 0 Then
Err.Clear
Set VUNGCHON = ThisDrawing.SelectionSets.add(TENMH) Else
VUNGCHON.Clear End If
VUNGCHON.SelectOnScreen Dim i As Long
If FrmMHS.CbxPoint.Value = True Then For Each point_in In VUNGCHON
If point_in.ObjectName = "AcDbPoint" Then i = i + 1
ds_Point = point_in.Coordinates DS_DI(i).X = ds_Point(0)
DS_DI(i).Y = ds_Point(1) DS_DI(i).Z = ds_Point(2) TONGDIEM = i
End If
Next point_in End If
If FrmMHS.CBXText.Value = True Then For Each TEXT_IN In VUNGCHON
If point_in.ObjectName = "AcDbText" Then i = i + 1
ds_Point = TEXT_IN.InsertionPoint DS_DI(i).X = ds_Point(0)
DS_DI(i).Y = ds_Point(1)
DS_DI(i).Z = TEXT_IN.TextString TONGDIEM = i
End If
33
Next TEXT_IN End If
If FrmMHS.CbxLine.Value = True Then For Each line_in In VUNGCHON
If point_in.ObjectName = "AcDbLine" Then i = i + 1
ds_Point = line_in.StartPoint DS_DI(i).X = ds_Point(0) DS_DI(i).Y = ds_Point(1) DS_DI(i).Z = ds_Point(2) ds_Point = line_in.EndPoint DS_DI(i).X = ds_Point(0) DS_DI(i).Y = ds_Point(1) DS_DI(i).Z = ds_Point(2) TONGDIEM = i
End If
Next line_in End If
If FrmMHS.CbxCircle.Value = True Then For Each CIRCLE_IN In VUNGCHON
If point_in.ObjectName = "AcDbCircle" Then i = i + 1
ds_Point = CIRCLE_IN.Center DS_DI(i).X = ds_Point(0) DS_DI(i).Y = ds_Point(1) DS_DI(i).Z = ds_Point(2) TONGDIEM = i
End If
Next CIRCLE_IN End If
MOHINHTIN DS_DI, TONGDIEM ' TAO MO HINH TIN CHO TAP DIEM CreatMH TENMH, DS_NUT, TONGNUT ' ghi file mo hinh ra tep End Sub
2.4.3.2. Modul lật cạnh mô hình TIN
Thuật toán lật cạnh thực hiện như sau:
- Chọn cạnh;
- Tìm nút chứa điểm đầu, điểm cuối của cạnh được chọn;
- Xác định hai điểm chung của các nút vừa tìm được;
- Xóa cạnh đã chọn và tạo cạnh mới từ hai điểm chung tìm thấy.
34
Hình 2.22 Mô hình trước khi lật cạnh
Hình 2.23 Mô hình sau khi lật cạnh
Sub LATCANHTAMGIAC(TENMH As String)
35
Dim Basep As Variant Dim line_in As AcadEntity Dim ds_Point As Variant Dim DUONGCHON As DUONG Dim Flag As Boolean On Error Resume Next Flag = False
ThisDrawing.Utility.GetEntity line_in, Basep ds_Point = line_in.StartPoint
DUONGCHON.diemdau.X = ds_Point(0) DUONGCHON.diemdau.Y = ds_Point(1) ds_Point = line_in.EndPoint
DUONGCHON.diemcuoi.X = ds_Point(0) DUONGCHON.diemcuoi.Y = ds_Point(1)
Flag = LATCANH(DUONGCHON, DS_NUT, TONGNUT) ' GOI HAM LAT CANH If Flag = True Then
line_in.Delete line_in.Update End If
2.4.3.3. Modul nội suy điểm mô hình TIN
Thuật toán nội suy điểm được thực hiện như sau:
- Xác định tam giác chứa điểm cần nội suy;
- Tính độ cao điểm cần nội suy dựa vào ba đỉnh của tam giác tìm được;
- Tạo lại mô hình số với tập điểm đã có và điểm cần nội suy.
HÌnh 2.24 Mô hình trước khi nội suy
36
HÌnh 2.25 Mô hình sau khi nội suy
Sub NOISUYDIEM(tenmohinh As String) Dim VarpointD As AcadPoint
Dim Basep As Variant Dim DIEMNS As DIEM
Dim strHienthi As AcadText Dim strthapphan As String Dim newlayer As AcadLayer Dim FFX() As String
On Error Resume Next
Set newlayer = ThisDrawing.Layers.add("POINT_NEW") Basep = ThisDrawing.Utility.GetPoint(, "pick diem") Set VarpointD = ThisDrawing.ModelSpace.AddPoint(Basep) VarpointD.LAYER = "POINT_NEW"
Dim TONGTG As Long TONGTG = TONGNUT
DIEMNS = NoiSuy_H(VarpointD, DS_NUT, TONGTG) VarpointD.Delete
If MsgBox("Co thay doi mo hinh khong?", vbOKCancel) = vbOK Then strthapphan = str(DIEMNS.Z)
FFX = Split(strthapphan, ".")
strthapphan = FFX(0) + "." + Left(FFX(1), 2)
Set strHienthi = ThisDrawing.ModelSpace.AddText(strthapphan, Basep, "1.0")
strHienthi.LAYER = "POINT_NEW"
TONGNUT = TONGNUT + 1
37
DS_NUT(TONGNUT).DIEMGOC.X = DIEMNS.X DS_NUT(TONGNUT).DIEMGOC.Y = DIEMNS.Y DS_NUT(TONGNUT).DIEMGOC.Z = DIEMNS.Z DS_NUT(TONGNUT).DIEMGOC.ID = TONGNUT Dim Ds_diem(50000) As DIEM
Dim TONGDIEM As Long TONGDIEM = TONGNUT Dim i As Long Do
i = i + 1
If i > TONGDIEM Then Exit Do
Ds_diem(i).X = DS_NUT(i).DIEMGOC.X Ds_diem(i).Y = DS_NUT(i).DIEMGOC.Y Ds_diem(i).Z = DS_NUT(i).DIEMGOC.Z Ds_diem(i).ID = DS_NUT(i).DIEMGOC.ID Loop
MOHINHTIN Ds_diem, TONGDIEM XoaTIN 0
VETIN DS_NUT, TONGNUT Else
strthapphan = str(DIEMNS.Z) FFX = Split(strthapphan, ".")
strthapphan = FFX(0) + "." + Left(FFX(1), 2)
Set strHienthi = ThisDrawing.ModelSpace.AddText(strthapphan, Basep, "1.0")
strHienthi.LAYER = "POINT_NEW"
End If End Sub
2.5. MỘT SỐ ỨNG DỤNG CỦA MÔ HÌNH SỐ ĐỊA HÌNH TRONG TRẮC ĐỊA CÔNG TRÌNH
2.5.1. Ứng dụng mô hình số địa hình nội suy đường đồng mức trong công tác thành lập bản đồ tỷ lệ lớn
Đối với công tác thành lập bản đồ địa hình tỉ lệ lớn phục vụ trong trắc địa công trình, nội suy và vẽ đường đồng mức có vai trò quan trọng nhất. Trong mô hình số địa hình, từ các đỉnh của tam giác Delaunay có tọa độ (Xi, Yi, Zi) ta xác định các đường đồng mức cắt cạnh của các tam giác với khoảng cao đều cho trước rồi nối các giao điểm có cùng cao độ lại với nhau thành các đoạn thẳng.
38
Hình 2.26 Đường đồng mức trong mô hình số địa hình
Giả sử điểm 1, 2, 3 là các đỉnh của tam giác, tọa độ giao điểm của đường đồng mức có cao độ Z với cạnh 1-2 được tính theo công thức:
X = X1 + (Z-Z1)
(Z2-Z1) (X2 - X1) ; Y = Y1 + (Z-Z1)
(Z2-Z1) (Y2 - Y1) (2.3) 2.5.2. Ứng dụng mô hình số địa hình trong công tác tính toán độ dốc
Trong trắc địa công trình, tính toán và tra độ dốc địa hình là công tác không thể thiếu. Mục đích của tính toán độ dốc là xác định hướng chảy của dòng nước, xác định hướng thoát nước hoặc phục vụ thiết kế mương, kênh ….
Hình 2.27 Độ dốc địa hình trong các trường hợp góc 300, 450, 760
Giả sử điểm đầu tuyến và cuối tuyến cần xác định độ dốc có cao độ lần lượt là H1, H2. Chiều dài tuyến L, công thức tính độ dốc được thành lập như sau:
i(%) = (H2-H1)
L x100 (2.4)