Mục lục
Lời mở đầu .2
PHẦN 1:XÂY DỰNG MÔ HÌNH 3D BẰNG VBA-AUTOCAD:
Chương 1:TỔNG QUAN
1.Các nghiên cứu về xây dựng mô hình 3D qua VBA-AutoCad . 3
2. Ưu và nhược điểm của các nghiên cứu này .3
Chương 2: CƠ SỞ DỮ LIỆU AUTOCAD VÀ VBA-AUTOCAD
1. Tổng quan về cơ sở dữ liệu AutoCad . .5
2. Những đối tượng cơ sở dữ liệu quan trọng . . .6
3. Tạo ra đối tuợng trong AutoCad . .6
4. Tổng quan về VBA-AutoCad . .8
Chương 3: THUẬT TOÁN TẠO MÔ HÌNH 3D CHO ĐƯỜNG ĐỒNG MỨC
1.Lấy dữ liệu từ bản vẽ AutoCad .10
a.Thuật toán tìm cao độ cho 1 điểm bất kỳ thuộc đường đồng mức . .11
b.Thuật toán tìm cao độ của các điểm thuộc lưới . . .11
b1.Thuật toán chia lưới .11
b2. Thuật toán lấy cao độ của 1 điểm bất kỳ có tọa độ (X,Y) . . 12
2.Tạo mô hình 3D . . .12
Chương 4: THUẬT TOÁN VẼ MẶT CẮT DỌC TUYẾN .14
PHẦN 2:CỤ THỂ HÓA MÔ HÌNH 3D BẰNG MATHLAB .16
Tài liệu tham khảo . . .18
Phụ lục .19
23 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1883 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Xây dựng mô hình 3D bằng mathlab, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
AUTOCAD:
Chương 1:TỔNG QUAN
1.Các nghiên cứu về xây dựng mô hình 3D qua VBA-AutoCad………..…………3
2. Ưu và nhược điểm của các nghiên cứu này………………………………………….3
Chương 2: CƠ SỞ DỮ LIỆU AUTOCAD VÀ VBA-AUTOCAD
1. Tổng quan về cơ sở dữ liệu AutoCad……………………………………….………….5
2. Những đối tượng cơ sở dữ liệu quan trọng…..………………………….………….6
3. Tạo ra đối tuợng trong AutoCad………..……………………………………………….6
4. Tổng quan về VBA-AutoCad…… ………..……………………………………………….8
Chương 3: THUẬT TOÁN TẠO MÔ HÌNH 3D CHO ĐƯỜNG ĐỒNG MỨC
1.Lấy dữ liệu từ bản vẽ AutoCad…………………………………………………………..10
a.Thuật toán tìm cao độ cho 1 điểm bất kỳ thuộc đường đồng mức….….11
b.Thuật toán tìm cao độ của các điểm thuộc lưới….……………………….…...11
b1.Thuật toán chia lưới……………………………………………………………………….11
b2. Thuật toán lấy cao độ của 1 điểm bất kỳ có tọa độ (X,Y)……..……….…12
2.Tạo mô hình 3D……………..…………………………………………………………..…...12
Chương 4: THUẬT TOÁN VẼ MẶT CẮT DỌC TUYẾN………………………...14
PHẦN 2:CỤ THỂ HÓA MÔ HÌNH 3D BẰNG MATHLAB……………………...16
Tài liệu tham khảo…………………..…………………….…………………………………...18
Phụ lục……………………………………………………………………………………………..19
LỜI MỞ ĐẦU
Ngày nay môi trường AutoCad đã trở nên quen thuộc trong công việc thiết kế của người kỹ sư xây dựng . Những ứng dụng ngay trên môi trường AutoCad sẽ là rất hiệu quả và dễ sử dụng cho người kỹ sư trong quá trình thiết kế.
Việc phát triển ứng dụng trên môi trường AutoCad đã được các công ty tin học xây dựng khai thác và ứng dụng có hiệu quả trên thực tế.Trong thiết kế thủy lợi và cầu đường,NovaCad của Hài Hòa đã trở nên hữu ích và tiện dụng trong quá trình tính toán và thiết kế.
Với yêu cầu đặt ra là chỉ bằng những macro đơn giản viết bằng VBA-Autocad,chương trình sẽ tự động xây dựng mô hình 3D từ những đường đồng mức,và vẽ mặt cắt dọc tuyến.Qua đó,người sinh viên khi làm đồ án có thể dễ dàng nắm bắt được địa hình nơi mình thiết kế công trình,và nhanh chóng chọn lựa tuyến công trình hợp lý.
Nội dung cơ bản của nghiên cứu sẽ gồm các phần chính như sau:
Phần 1:Nghiên cứu VBA-AutoCad của Nguyễn Hữu Hân
-Nghiên cứu về cơ sở dữ liệu của AutoCad.
-Nghiên cứu về VBA trong môi trường AutoCad.
-Xây dựng thuật toán tạo mô hình 3D từ các đường đồng mức.
-Xây dựng thuật toán vẽ mặt cắt dọc tuyến.
Phần 2:Nghiên cứu MathLab của Nguyễn Minh Thương
-Sử dụng MathLab để cụ thể hóa mô hình 3D.
Đề tài có tham khảo và sử dụng thuật toán chia lưới của đề tài khoa học sinh viên 2000 “Xây dựng bản đồ số”-Thư viện trường ĐHXD.
Ngoài ra, quá trình nghiên cứu của nhóm còn được sự giúp đỡ và hướng dẫn tận tình của hai thầy hướng dẫn:GS.TS Huỳnh Bá Kỹ Thuật và Th.S Hoàng Chí Nhân.
PHẦN 1:
XÂY DỰNG MÔ HÌNH 3D BẰNG VBA-AUTOCAD
CHƯƠNG 1:TỔNG QUAN
1.CÁC NGHIÊN CỨU VỀ XÂY DỰNG MÔ HÌNH 3D QUA VBA-AUTOCAD
Xây dựng mô hình 3D từ đường đồng mức là một trong những ứng dụng về GIS(Geographic Information System), đây là một hướng đi rất phổ biến của các nhà lập trình chuyên nghiệp trong lĩnh vực kỹ thuật.Các ứng dụng về GIS đã phổ biến trên thế giới và ở nước ta có thể nói đến là: ứng dụng về bản đồ số,hệ thống thông tin định vị toàn cầu GMS…vv…
Ở nước ta,các ứng dụng về GIS được phát triển khá đa dạng.Nhiều công ty phần mềm đã đi theo hướng này và đạt được những thành công đáng kể trên thị trường.Có thể nói đến là:VietCad,Hài Hòa,Trung tâm phần mềm thủy lợi….vv
Trong đó,Hài Hòa chủ yếu nghiên cứu và sản xuất các phần mềm tự động hóa thiết kế trong xây dựng bao gồm xử lý số liệu khâu khảo sát địa hình, địa chất,xử lý đồ họa ba chiều ,thiết kế đường bộ….vv.Công ty đã xây dựng và phát triển nhiều module chương trình cho các công ty nước ngoài như ViaNova(công ty chuyên phát triển các phần mềm trong thiết kế đường và cầu),trong đó có chương trình thiết kế đường NovaCad
Trong nghiên cứu khoa học của sinh viên,các nghiên cứu về vấn đề này cũng rất đa dạng. Đó là các chương trình về xây dựng bản đồ số,hay chương trình tự động thiết kế đường…vv.Về VBA-AutoCad có những nghiên cứu về xây dựng chương trình tính toán bê tông cốt thép trên môi trường AutoCAD…vv
2. ƯU VÀ NHƯỢC ĐIỂM CỦA CÁC NGHIÊN CỨU NÀY:
a.Ưu điểm:
-Các chương trình của các công ty chuyên nghiệp rất hoàn thiện trong việc tính toán và xử lý số liệu,kết xuất bản vẽ.Uy tín của các chương trình này được đảm bảo bởi số lượng khách hành sử dụng các sản phẩm này.
-Các nghiên cứu của sinh viên rất hay trong việc đưa ra những ý tưởng mới.Chương trình thường nhỏ gọn, dễ dùng,tiện cho việc nghiên cứu,học tập trong môi trường sinh viên.
b.Nhược điểm:
-Các chương trình của các công ty về lĩnh vực này thường là những module chương trình lớn,có bản quyền. Ứng dụng trong thực tế cao nhưng ứng dụng trong môi trường học tập của sinh viên là chưa thực tế,hoặc là khó đến tay người sinh viên một cách hợp pháp.Các công ty không cho phép chế độ mã nguồn mở,không thích ứng với sự khám phá và ham hiểu biết của sinh viên.Những đồ án trong phạm vi nhà trường không cần dùng đến những ứng dụng phức tạp của các công ty phần mềm.
-Các nghiên cứu của sinh viên về lĩnh vực này chỉ giới hạn ở việc load dữ liệu từ file text,không trực quan và không thực tế trong quá trình làm đồ án(trong quá trình làm đồ án,người sinh viên được giao bình đồ khu vực qua bản vẽ AutoCad).
CHƯƠNG 2:CƠ SỞ DỮ LIỆU AUTOCAD
1.TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU AUTOCAD
Một bản vẽ AutoCAD là một tập hợp những đối tượng cất giữ trong cơ sở dữ liệu. Một vài đối tượng cơ sở dữ liệu cơ bản là những thực thể, bảng symbol và từ điển. Những thực thể là một loại đối tượng cơ sở dữ liệu của một đối tượng đồ họa trong một bản vẽ AutoCAD. Những đối tượng line, circle, arc, text, solid, regions, splines và ellipses là những ví dụ của những thực thể. Nguời dùng có thể nhìn thấy thực thể trên màn ảnh và có thể thao tác nó.
Những bảng symbol và từ điển là những nơi chứa dùng để lưu trữ những cơ sở dữ liệu của đối tượng. Cả hai đối tượng chứa này đều quản lý các tên symbol dưới dạng một chuỗi văn bản trong cơ sở dữ liệu của đối tượng. Một cơ sở dữ liệu AutoCAD bao gồm những bảng symbol cố định, mà mỗi bản ghi của nó bao gồm những instances của một lớp riêng biệt. Bạn không thể thêm một bảng symbol mới vào cơ sở dữ liệu. Chẳng hạn như những bảng symbol là bảng layer (AcDbLayerTable) và block (AcDbBlockTable). Tất cả các thực thể AutoCAD đều được chứa trong những bản ghi block.
Những từ điển cung cấp một khả năng quản lý đối tượng linh hoạt hơn bảng symbol. Một từ điển có thể chứa đựng bất kỳ đối tượng nào của kiểu AcDbObject hoặc phân lớp của nó. Cở sở dữ liệu AutoCAD tự động tạo ra một từ điển dùng để quản lý tên đối tượng khi nó tạo ra một bản vẽ mới. Từ điển này có thể được xem như quản lý "mục lục" cho tất cả các từ điển liên kết với cơ sở dữ liệu. Bạn có thể tạo ra những từ điển mới bên trong từ điển này và thêm những đối tượng cơ sở dữ liệu mới vào chúng.
AutoCAD có thể nạp nhiều cơ sở dữ liệu trong một phiên chạy riêng lẻ. Mỗi đối tượng trong một phiên chạy có một handles và một đối tượng ID. Một handles duy nhất xác định đối tượng bên trong phạm vi của một cơ sở dữ liệu riêng biệt, ngược lại một đối tượng ID duy nhất xác định đối tượng trong tất cả các cơ sở dữ liệu đuợc nạp. Một đối tượng ID vẫn chỉ tồn tại trong thời gian nó được sử dụng, nhưng một handles luôn được lưu giữ với bản vẽ. Trái ngược với đối tượng ID, một handles không chắc chắn là duy nhất khi nhiều cơ sở dữ liệu được nạp trong một phiên chạy của AutoCAD.
2. NHỮNG ĐỐi TƯỢNG CƠ SỞ DỮ LIỆU QUAN TRỌNG
Khi những đối tượng được tạo ra trong AutoCAD, chúng được thêm vào đối tượng chưa thích hợp của chúng trong cơ sở dữ liệu. Những thực thể được thêm vào những bản ghi trong bảng block. Những bản ghi bảng symbol được thêm vào những bảng symbol thích hợp. Tất cả các đối tượng khác đều được thêm vào từ điển quản lý tên đối tượng hoặc được quản lý bởi đối tượng khác (và cuối cùng vẫn thêm vào từ điển quản lý tên đối tượng), hoặc vào một từ điển mở rộng.
3. TẠO RA ĐỐi TƯỢNG TRONG AUTOCAD
Mục này mô tả cách tạo ra đối tượng line, circle, layer và group trong AutoCAD và chỉ ra cách AutoCAD thêm những đối tượng này vào cơ sở dữ liệu. Trước hết, đòi hỏi người dùng tạo ra một đối tượng line trong không gian mô hình với lệnh sau :
line 4,2 10,7
Trong cơ sơ dữ liệu, AutoCAD tạo ra một instance của lớp AcDbLine và sau đó cất giữ nó trong bản ghi bảng block trong không gian mô hình và nó được thể hiện trong minh họa sau:
Khi bạn kích hoạt AutoCAD lần đầu thì cơ sở dữ liệu trong trạng thái mặc định của nó, những thực thể được thêm vào không gian mô hình (không gian chính trong AutoCAD), được sử dụng cho hình học và đồ họa. Không gian giấy vẽ được dùng để hỗ trợ trình bày bản vẽ như sheet outlines, khung tiêu đề và văn bản annotational. Những lệnh tạo thành thực thể trong AutoCAD (trong trường hợp này là line) sẽ thêm thực thể vào cơ sở dữ liệu hiện thời cũng như vào khối không gian mô hình.
Tiếp theo, giả sử người dùng tạo ra một đối tượng circle với lệnh sau: circle 9,3 2
Một lần nữa, AutoCAD tạo ra một instance của thực thể thích hợp (AcDbCircle) và thêm nó vào bản ghi bảng block trong không gian mô hình.
Tiếp theo, người dùng tạo ra một lớp: layer _make mylayer
AutoCAD tạo ra một bản ghi layer mới để lưu giữ lớp và sau đó thêm nó vào bảng layer.
Cuối cùng, người dùng nhóm tất cả các thực thể lại với nhau: group 3,2 9,3
AutoCAD tạo ra một nhóm đối tượng mới và thêm nó vào từ điển Group, mà được chứa trong từ điển quản lý tên đối tượng.Nhóm mới này chứa một danh sách các đối tượng IDs của những đối tượng mà được tạo nên nhóm.
4.TỔNG QUAN VỀ VBA-AUTOCAD:
Một đề án AutoCad Vba là một tập hợp của module mã lệnh,module lớp và form ,chúng cùng nhau làm việc để thực hiện nhiệm vụ được giao. Đề án có thể được lưu giữ ngay bên trong của bản vẽ Cad ,hay là file độc lập.
“Embedded projects” là những đề án được lưu giữ ngay trong bản vẽ Cad.Những đề án kiểu này được nạp một cách tự động mỗi khi mở bản vẽ.Vì thế ,việc phân bổ các đề án dạng này là vô cùng thuận tiện.“Embedded projects” bị giới hạn và không thể mở hay đóng bản vẽ Cad bởi vì chúng chỉ thực hiện chức năng trong bản vẽ mà chúng cư trú.Người dùng các “Embedded projects” không thể yêu cầu tìm và đọc những file đề án trước khi chúng chạy chương trình.Tất nhiên người sử dụng không cần phải nhớ để nạp đề án trước khi mở bản vẽ,vì đơn giản nó đã được nạp tự động rồi.
“Global projects“được lưu giữ trong những file độc lập và linh hoạt hơn bởi vì chúng có thể làm việc trong bản vẽ,mở và đóng bất kỳ một bản vẽ nào,nhưng không thể tự động nạp khi bản vẽ được mở. Người sử dụng phải biết được file đề án bao gồm macro mà họ cần và sao đó nạp file đề án này trước khi chúng có thể chạy macro.Tuy nhiên,”global projects” dễ dàng hơn trong việc chia sẻ với những người dùng khác,và chúng tạo thành các thư viện phong phú cho những macro dùng chung.
Bạn có thể nhìn thấy tất cả các đề án VBA được nạp trong phiên làm việc hiện thời của AutoCad bằng việc sử dụng công cụ VBA Manager.Nó là một công cụ của AutoCad cho phép bạn nạp,không nạp,ghi,tạo các đề án VBA
CHƯƠNG 3:
THUẬT TOÁN TẠO MÔ HÌNH 3D CHO ĐƯỜNG ĐỒNG MỨC
1.LẤY DỮ LIỆU TỪ BẢN VẼ AUTOCAD:
Như ta đã biết,bản vẽ của AutoCad bao gồm tập hợp những đối tượng như line,circle,polyline,layer…vv.Mỗi đối tượng trên ta đều có thể tương tác với chúng thông qua tên của chúng trong AutoCad.
VD:+polyline có tên trong AutoCad là: “AcDbPolyline”
+line có tên trong AutoCad là: “AcDbline”….vv
Vì thế thông qua thuộc tính Object.EntityName ta có thể biết những thông tin về các đối tượng trong bản vẽ,mà cụ thể trong chương trình này đó là những thông tin về các đường polyline,spline(đại diện cho các đường đồng mức);Mtext,Text(để ghi cao độ cho đường đồng mức);line(đại diện cho mặt cắt)
Các thông tin về các đường này mà ta sẽ lấy bao gồm:
+Tọa độ (X,Y) của các điểm thuộc polyline hoặc spline (tọa độ(X,Y) của đường đồng mức)
+Giá trị Mtext hoặc Text tương ứng với mỗi đường polyline hoặc spline nói trên(tức là giá trị cao độ tương ứng với các đuờng đồng mức)
+Tọa độ điểm đầu và điểm cuối của line(tương ứng với mặt cắt dọc cần vẽ)
+Số đường polyline,spline,số đối tượng là Mtext và Text.
Sau khi lấy được các thông tin này,ta sẽ lưu dữ liệu của các đường đồng mức vào ba mảng 1 chiều là:mangX(),mangY() và mangH,với:
+mangX() lưu các giá tri tọa độ phương X của các đường đồng mức
+mangY() lưu các giá trị tọa độ phương Y của các đường đồng mức
+mangH() lưu các giá trị cao độ của các đường đồng mức tương ứng.
Ta đã có tọa độ(X,Y,Z) của một điểm bất kỳ thuộc đường đồng mức.
Nhưng những điểm (X,Y,Z) trên nằm ở những vị trí ngẫu nhiên,rời rạc không thể xây dựng nên một mô hình 3D hợp lý.
Chính vì thế,ta phải xây dựng một lưới các tọa độ (X,Y,Z),từ đó ta sẽ dựng được mô hình 3D cần thiết.
Vấn đề đặt ra là :
+Làm sao biết được Text(cao độ) sẽ tương ứng với polyline nào.
+Sau khi đã biết tọa độ (X,Y,Z) của các điểm trên polyline,làm sao lấy được tọa độ (X,Y,Z) trên lưới.
Giải quyết vấn đề này,ta chia thành hai thuật toán như sau:
a.Thuật toán tìm cao độ cho 1 điểm bất kỳ thuộc đường đồng mức
-Việc tìm cao độ của 1 điểm thuộc polyline,ta chia thành 2 phần:
+Duyệt qua các polyline trên bản vẽ, ứng với mỗi polyline sẽ có một Text tương ứng.
+Duyệt qua tất cả các điểm trên một polyline và gán giá trị cao độ H của từng điểm của Polyline bằng giá trị của Text tương ứng với Polyline đó.
Cao độ H của đường đồng mức đang xét được gán bằng giá trị của Text t/ứng
Sơ đồ thuật toán như sau:
Duyệt các đường polyline và Spline trong bản vẽ
Tương ứng với khoảng cách nhỏ nhất là Text cần tìm
( giá trị cao độ)
Tìm khoảng cách ngắn nhất từ các điểm của polyline đến tất cả các Text trong b.vẽ
b.Thuật toán tìm cao độ của các điểm thuộc lưới:
Để tìm cao độ của 1 điểm thuộc lưới,ta tổng quát hóa bài toán.Tức là ta đi tìm công thức chung tính cao độ của một điểm bất kỳ có tọa độ (X,Y).Từ đó,với mỗi điểm mắt lưới,ta dễ dàng tìm được tọa độ (X,Y) của mắt lưới đó,và suy ra cao độ của các mắt lưới.
Trước tiên,ta đi xét thuật toán chia lưới:
b1.Thuật toán chia lưới:
Giả sử ta tìm được điểm thuộc đường đồng mức có tọa độ là (Xmin,Ymin) và
(Xmax,Ymax)
-Giả thiết số lưới theo phương X là duongluoix
Ta có: DeltaT=(Xmax - Xmin) / (duongluoix - 1)
-Số lưới theo phương Y là: duongluoiy = Int((ymax - ymin) / delT) + 1
-Tọa độ theo phương X của điểm lưới thứ i là:
Xtt(i) = xmin + delT * (i - 1)
-Tọa độ theo phương Y của điểm lưới thứ j là:
Ytt(j) = ymin + delT * (j - 1)
b2.Thuật toán lấy cao độ của 1 điểm bất kỳ có tọa độ (X,Y):
dt2
dt1
-Bước1:Tìm khoảng cách nhỏ nhất từ điểm cần tính cao độ đến tất cả các điểm trên đường polyline(hoặc spline), ứng với mỗi đường polyline sẽ có một giá trị nhỏ nhất.Ta lưu các giá trị nhỏ nhất này vào một mảng 1 chiều,đương nhiên số phần tử của mảng này phải bằng số lượng các đường polyline trên bản vẽ.
-Bước2:Tìm 2 giá trị nhỏ nhất của mảng vừa nêu,ứng với nó là 2 khoảng cách từ điểm cần tính cao độ đến 2 đường polyline gần nhất.
-Bước3:Tính cao độ
+Gọi 2 khoảng cách vừa tìm được là dt1 và dt2.Tương ứng với nó là 2 đường polyline có cao độ theo thứ tự là:diem1H và diem2H.Ta có công thức tính cao độ của điểm(X,Y) bất kỳ thuộc lưới như sau:
tuso = (diem1H / dt1) + (diem2H / dt2)
mauso = (1 / dt1) + (1 / dt2)
caodo = tuso / mauso
2.TẠO MÔ HÌNH 3D:
Để tạo mô hình 3D của các đường đồng mức khi đã có dữ liệu về tọa độ (X,Y) của các mắt lưới và cao độ tương ứng của các mắt lưới đó.Ta sử dụng lệnh:
Set meshobj = ThisDrawing.ModelSpace.Add3DMesh(mSize, nSize, points)
Với: mSize = duongluoix, nSize = duongluoiy là kích thước của lưới
Và points là mảng 3 chiều,chứa các tọa độ (X,Y,Z) của 1 điểm trong không gian.Vì thế ta truyền dữ liệu từ 2 mảng 1 chiều và 1 mảng 2 chiều của ta sang mảng points như sau:
For i = 1 To duongluoix
For j = 1 To duongluoiy
points(0 + 3 * k) = Xtt(i)
points(1 + 3 * k) = Ytt(j)
points(2 + 3 * k) = H(i, j)
k = k + 1
Next
Next
Trong đó:+ Xtt(i) là mảng 1 chiều chứa tọa độ X của các mắt lưới
+ Ytt(j) là mảng 1 chiều chứa tọa độ Y của các mắt lưới
+ H(i,j) là mảng 2 chiều chứa cao độ H của các mắt lưới
CHƯƠNG 4: THUẬT TOÁN VẼ MẶT CẮT DỌC TUYẾN
Như ta đã biết từ phần lấy dữ liệu, đối tượng line trong bản vẽ đại diện cho mặt cắt dọc tuyến.Vấn đề của chúng ta là dựng được mặt cắt đó.Ta thấy tương ứng với mỗi điểm nằm trên đường line(biểu hiện mặt cắt),sẽ có một tọa độ(X,Y).Vận dụng chương trình tính cao độ của một điểm(X,Y) bất kỳ ở phần trước,ta sẽ tìm được cao độ của các điểm trên line tương ứng.
Với ý tưởng trên,ta chia line thành một tập hợp hữu hạn điểm,tương ứng với mỗi điểm đó sẽ có một cao độ riêng.Trên hệ tọa độ Đềcác,trục hoành là chiều dài L của tuyến(chính là chiều dài của đường line);trục tung biểu hiện cao độ của các điểm trên tuyến.Nối các điểm (Li,Hi),ta sẽ được mặt cắt tuyến.
Ta có thể hình dung quá trình vẽ mặt cắt dọc sẽ tiến hành như sau:
Hi=caodo(Xi,Yi)
Cao độ H
Hi
Li(Xi,Yi)
Chiều dài L của tuyến
Thuật toán tổng quát của quá trình vẽ mặt cắt tuyến:
Duyệt các đường line trong bản vẽ
Lấy tọa độ điểm đầu và điểm cuối của line
Chia line thành n phần hữu hạn
Tìm X(i),Y(i),L(i) từ đó suy ra H(i)
Nối các điểm có tọa độ (L(i),H(i)) trên hệ tọa độ Đềcác ta được mặt cắt tuyến cần vẽ
PHẦN 2:
CỤ THỂ HÓA MÔ HÌNH 3D BẰNG MATHLAB
Ta thấy kết quả xuất ra bản vẽ AutoCad của phần VBA-AutoCad có ưu điểm là nhanh,trực quan.Nhưng lại có nhược điểm là chưa có tính kỹ thuật,chi tiết.Mô hình 3D mà chương trình viết bằng VBA-AutoCad dựng lên chỉ có tính tổng quan về địa hình,người dùng chưa thấy ngay được độ cao và phân mức độ cao của địa hình,mặt cắt dọc của tuyến cũng chỉ có tính chất tương đối.
Vì thế,một giải pháp được nhóm nghiên cứu đặt ra đó là chi tiết hóa mô hình 3D bằng một công cụ có hỗ trợ đồ họa rất mạnh, đó là MathLab. Các mô hình 3D được xây dựng và biểu diễn với nhiều dạng khác nhau nhằm tạo cho người dùng một cái nhìn tổng quan hơn về mặt bằng , địa hình khu vực công trình .Dữ liệu để xây dựng các mô hình 3D là 2 file text
(dữ liệu về tọa độ (X,Y,Z) của các mắt lưới được chuyển ra 2 file text , một file mang thông tin về toạ độ , một file mang thông tin về các cao độ tương ứng).Tuy nhiên,nhược điểm của MathLab đó là yêu cầu máy chạy phải có cấu hình mạnh,bộ cài lớn.
Hướng dẫn sử dụng:
- copy 2 file text mang dữ liệu về bản vẽ bình đồ và file chương trình có tên là app.M vào thư mục work của Matlab.
- Chạy Matlab , và trên dòng lệnh từ cửa sổ lệnh của Matlab gõ tên file xử lý : app .
- Sau đó Enter , chương trình đã chạy .
- Trong các TextBox : toạ độ : gõ tên file chứa các thông tin về toạ độ ( kèm cả phần mở rộng .txt )
- Và TextBox : Cao độ : gõ tên file chữa các thông tin về cao độ kèm theo cả phần mở rộng .txt .
Trong các hộp tuỳ chọn các thể hiện tuỳ người dùng sẽ chọn cách để thể
hiện mô hình 3D . Sau đó Click vào nút Run . Hình sẽ được vẽ ra , để nhìn
với các góc nhìn khác nhau , người dùng chọn Tool -> Rotate 3D , sau đó
đưa chuột và vùng bản vẽ Kick giữ chuột và quay .
Mỗi thay đổi trong các tuỳ chọn người dùng phải Click lại nút Run để
thực hiện vẽ lại .
2. Các bước thực hiện chương trình:
- Bước 1 : Xây dựng giao diện người dùng : Xử dụng các công cụ GUI của MatLab để tạo các TextBox, button , PopupMenu để người sử dụng dễ dàng thao tác .
Bước 2 : Cài đặt mã xử lý cho nút lệnh và các tuỳ chọn .
Các công việc được thực hiện khi nút Run được click
- Load ma trận n hàng 2 cột lưu các giá trị toạ độ
- Load ma trận độ cao từ file lưu các giá trị của độ cao
- Lấy giá trị độ mịn của lưới chia nhập vào do User
1
- Phân tích ma trận lưu các giá trị toạ độ x,y của lưới để lấy các giá trị X, Y cần thiết .
- Lưu các giá trị X, Y vào 2 mảng riêng biệt : Mảng chứa X và mảng chứa Y .
2
- Mịn hoá các giá trị X,Y trong hai mảng theo độ mịn mà người sử dụng đưa vào .
- Tạo lưới từ 2 Vector được mịn hoá .
- Thực hiện nội suy các giá trị độ cao tương ứng với lưới vừa được mịn hoá .Kết quả là ma trận độ cao đã được mịn hoá .
3
- Lấy các giá trị tuỳ chọn do User chọn bao gồm kiểu lưới và kiểu bề mặt , có sử dụng hệ trục Decater không.
- Thực hiện lệnh vẽ tương ứng với các tuỳ chọn - hoặc lệnh vẽ mặc định nếu không có tuỳ chọn .
4
- Lấy thông tin về mực nước thượng lưu do User nhập
- Chuyển thành dạng số
- Kiểm tra sự hợp lệ của số liệu , nếu số liệu hợp lệ thì vẽ thêm vào mặt phẳng tượng trưng cho mực nước ngập khu vực .
5
Tài liệu tham khảo:
1. ActiveX and VBA Reference
2. ActiveX and VBA Developer’s Guide
3. Đề tài nghiên cứu khoa học sinh viên: “Xây dựng bản đồ số”-Thư viện ĐHXD
Phụ lục:
Mã nguồn chương trình những module quan trọng(VBA):
Function caodo(X, Y)
Dim i, k, j, sott As Integer
Dim mangkc(1 To 1000) As Double
Dim kc(1 To 100) As Double
Dim min1, min2, min3 As Double
Dim luutdX(1 To 100) As Double
Dim luutdY(1 To 100) As Double
Dim luutdH(1 To 100) As Double
Dim diem1X, diem1Y, diem1H, diem2X, diem2Y, diem2H, dt1, dt2 As Double
Dim tuso, mauso As Double
j = -1
For i = 1 To soduongpolyline
j = j + 1
sott = 0 + 101 * j
For k = 0 To 100
sott = sott + 1
mangkc(k + 1) = tinhkc(mangXluu(sott), mangYluu(sott), X, Y)
Next
min1 = minmang(mangkc(), 101)
sott = 0 + 101 * j
For k = 0 To 100
sott = sott + 1
If mangkc(k + 1) = min1 Then
luutdX(i) = mangXluu(sott)
luutdY(i) = mangYluu(sott)
luutdH(i) = mangHluu(sott)
End If
Next
kc(i) = min1
Next
min2 = minmang(kc(), soduongpolyline)
For i = 1 To soduongpolyline
If kc(i) = min2 Then
kc(i) = 100000
diem1X = luutdX(i)
diem1Y = luutdY(i)
diem1H = luutdH(i)
End If
Next
min3 = minmang(kc(), soduongpolyline)
For i = 1 To soduongpolyline
If kc(i) = min3 Then
diem2X = luutdX(i)
diem2Y = luutdY(i)
diem2H = luutdH(i)
End If
Next
On Error Resume Next
dt1 = tinhkc(diem1X, diem1Y, X, Y)
dt2 = tinhkc(diem2X, diem2Y, X, Y)
tuso = (diem1H / dt1) + (diem2H / dt2)
mauso = (1 / dt1) + (1 / dt2)
caodo = tuso / mauso
End Function
Sub taoluoi1()
Dim n1, n2 As Integer
Dim xmin, xmax, ymin, ymax As Double
Dim d(1 To 5000) As Double
Dim TS, MS As Double
Dim delT As Double
Dim i, j, t As Integer
TS = 0
MS = 0
duongluoix = 12
xmin = minmang(mangX(), sttnew)
xmax = maxmang(mangX(), sttnew)
ymin = minmang(mangY(), sttnew)
ymax = maxmang(mangY(), sttnew)
delT = (xmax - xmin) / (duongluoix - 1)
duongluoiy = Int((ymax - ymin) / delT) + 1
For i = 1 To duongluoix
Xtt(i) = xmin + delT * (i - 1)
Next
For j = 1 To duongluoiy
Ytt(j) = ymin + delT * (j - 1)
Next
For i = 1 To duongluoix
For j = 1 To duongluoiy
H(i, j) = caodo(Xtt(i), Ytt(j))
Next
Next
End Sub
* Mã Nguồn của từng bước (MATHLAB):
f = get(handles.toado,'String');
f1=get(handles.caodo,'String');
% lay gia tri smooth
smth=get(handles.smooth,'String');
% chuyen string thanh dang so
smth=str2num(smth);
p=f;
% load vao ma tran a
a=load(p);
global z; % ma tran do cao
z=load(f1);
- Bước 1 :
% lay cac bien
x=a(:,1);
y=a(:,2);
%disp(x);
% xu ly de lay cac gia tri trong toa do x
global b;% mang nam giu cac gia tri theo truc y trong thuc te
b=[];% khoi tao ma tran b
c=0;% khoi tao bien c
for i=1:length(x)-1
j=i+1;
if(x(i)~=x(j))
c=c+1;
b(c)=x(i);
elseif(j==length(x))
c=c+1;
b(c)=x(i);
end
end
% xu ly de lay cac gia tri trong mang y
global d;% mang nam giu cac gia tri x tren toa do thuc te
d=[];% khoi tao mang d
d(1)=y(1);
for i=2:length(y)
d(i)=y(i);
if(y(i)==y(1))
d(i)=[];
break;
end
end
- Bước 2 :
% Phang xu ly de ve do thi
reset(GCA);
%mesh(d,b,z);
% min hoa theo truc x
xi=linspace(d(1),d(length(d)),smth);
% min hoa theo truc y
yi=linspace(b(1),b(length(b)),smth);
% tao luoi tu cac du lieu da min hoa
[xxi,yyi]=meshgrid(xi,yi);
% thuc hien noi suy
zzi=interp2(d,b,z,xxi,yyi,'cubic');
- Bước 3 :
% xu ly cac truong hop lua chon
kth=get(handles.popupmenu9,'Value');
kbm=get(handles.popupmenu10,'Value');
% doi voi truong hop kieu the hien
whitebg('k');%thiet lap man hinh den
switch kth,
case 1,mesh(xxi,yyi,zzi);
case 2,surf(zzi);
case 3,surfl(zzi);
case 4,meshz(zzi);
case 5,waterfall(xxi,yyi,zzi);
case 6,pcolor(zzi);
case 7,contourf(zzi),set(handles.popupmenu10,'Value',1),
hold on, shading flat,[c,h]=contour(zzi,'k-'),clabel(c,h);
case 8,meshc(xxi,yyi,zzi);
case 9,contourf(xxi,yyi,zzi),c=contour(zzi),clabel(c);
end;
% doi voi kieu be mat
switch kbm,
case 1,;
case 2,shading flat;
case 3,shading faceted;
case 4,shading interp;
end
end;
% xu ly voi cac so lieu truc toa do hien thi hoac bo
ht = get(handles.checkbox2,'Value');
switch ht,
case 1,;
case 0,axis off;
end
- Bước 4:
% lay gia tri muc nuoc thuong luu
mn = get(handles.mntl,'String');
% chuyen string thanh kieu so
mn=str2num(mn);
% kiem tra neu gia tri muc nuoc hop le thi ve
if(mn>min(min(zzi))) flag=1;
else flag=0;
end
% thuc hien ve mat cat tuong trung cho lop nuoc
% thuc hien noi suy
hhi=[];%khai bao hhi
if(flag==1)
hold on
for i=1:size(zzi,1)
for j=1:size(zzi,2)
hhi(i,j)=mn;
end
end
switch kth,
case {2,3,4,5,6};
case {1,2,9}
surf(xxi,yyi,hhi),shading flat;
end
end
Các file đính kèm theo tài liệu này:
- 77149.DOC