Nghiên cứu lựa chọn thuật toán thành lập mô hình số địa hình

Một phần của tài liệu Xác định khối lượng đào đắp trong xây dựng công trình bằng mô hình số địa hình (Trang 20 - 41)

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)

Một phần của tài liệu Xác định khối lượng đào đắp trong xây dựng công trình bằng mô hình số địa hình (Trang 20 - 41)

Tải bản đầy đủ (PDF)

(91 trang)