Luận văn Nghiên cứu lập trình tính biến dạng xoay trong một tam giác địa động lực

Tài liệu Luận văn Nghiên cứu lập trình tính biến dạng xoay trong một tam giác địa động lực: Luận văn Nghiên cứu lập trình tính biến dạng xoay trong một tam giác địa động lực Mục Lục LỜI MỞ ĐẦU Ngày nay với sự phát triển của khoa học công nghệ thì công nghệ thông tin được áp dụng vào mọi ngành nghề trong đời sống – xã hội. Việc áp dụng công nghệ thông tin vào các mọi ngành nghề giúp tối ưu hóa thời gian cho con người đồng thời mang lại độ chính xác cao trong công việc, giảm bớt sức lao động của con người. Song hành với sự phát triển của công nghệ thông tin như vậy, ngành địa chất cũng xác định được tầm quan trọng của công nghệ thông tin để áp dụng vào xây dựng và giải các bài toán trong địa chất. Ví dụ như việc áp dụng thành lập các bản đồ địa chất, quản lý dữ liệu địa chất, tính toán trữ lượng khoáng sản..v..v... Việc áp dụng công nghệ thông tin vào ngành địa chất mang lại sự nhanh chóng và chính xác, mang tính vượt trội so với các phương pháp cổ ...

docx76 trang | Chia sẻ: haohao | Lượt xem: 1143 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Luận văn Nghiên cứu lập trình tính biến dạng xoay trong một tam giác địa động lực, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Luận văn Nghiên cứu lập trình tính biến dạng xoay trong một tam giác địa động lực Mục Lục LỜI MỞ ĐẦU Ngày nay với sự phát triển của khoa học công nghệ thì công nghệ thông tin được áp dụng vào mọi ngành nghề trong đời sống – xã hội. Việc áp dụng công nghệ thông tin vào các mọi ngành nghề giúp tối ưu hóa thời gian cho con người đồng thời mang lại độ chính xác cao trong công việc, giảm bớt sức lao động của con người. Song hành với sự phát triển của công nghệ thông tin như vậy, ngành địa chất cũng xác định được tầm quan trọng của công nghệ thông tin để áp dụng vào xây dựng và giải các bài toán trong địa chất. Ví dụ như việc áp dụng thành lập các bản đồ địa chất, quản lý dữ liệu địa chất, tính toán trữ lượng khoáng sản..v..v... Việc áp dụng công nghệ thông tin vào ngành địa chất mang lại sự nhanh chóng và chính xác, mang tính vượt trội so với các phương pháp cổ điển mà con người trực tiếp phải xử lý. Áp dụng công nghệ thông tin trong địa chất cũng dẫn đến các nhà địa chất có những phán đoán chính xác hơn trong việc dự đoán, phân tích trong những vấn đề của địa chất học. Hiện nay, trên thế giới việc áp dụng công nghệ thông tin vào ngành địa chất học đã mang lại nhiều thành tựu cho sự vượt bậc của nó. Đã có rất nhiều những chương trình phần mềm được xây dựng phục vụ trong công tác nghiên cứu về địa chất đã được công bố mang lại những hiệu quả rất cao trong công việc, dẫn đến những chương trình này là những phần không thể thiếu và quan trọng trong nghiên cứu..v..v... Ở Việt Nam hiện nay, trong ngành địa chất cũng đã coi trọng việc áp dụng công nghệ thông tin trong những xử lý tính toán phức tạp mà đòi hỏi con người mất nhiều thời gian và công sức. Một điển hình cho xu thế phát triển hiện đại này là tại phòng Địa Động Lực – Viện Địa Chất, một đơn vị trực thuộc của Viện Khoa Học Và Công Nghệ Việt Nam, trưởng phòng là PGS.TS Phan Trọng Trịnh đã có những hướng mang tính hiện đại hóa bằng việc áp dụng nhiều phần mềm trong việc xử lý những vấn đề mà phòng Địa Động Lực nghiên cứu, ví dụ như các phần mềm xử lý trong bản đồ như Arc Gis, Surfer, MapInfo... các phần mềm sử lý số liệu GPS như Bernese, Gamit,Fonda,Gipsy,Globk... và các phần mềm xử lý số liệu dịch chuyển để tính toán biến dạng trong bộ phần mềm QOCA (Quasi-Observation Combination Analysis)... Trong quá trình thực tập tốt nghiệp, em được bộ môn Tin Học Địa Chất tạo điều kiện cho em được thực tập tại phòng Địa Động Lực, tại đây em đã được tiếp xúc sử dụng bộ phần mềm QOCA dùng để tính biến dạng kiến tạo trong vỏ Trái Đất, đó là một trong những phần nhiệm vụ quan trọng mà tại phòng Địa Động Lực nghiên cứu. Tuy nhiên bộ phần mềm chạy trên nền của HĐH(Hệ Điều Hành) Linux là HĐH không phổ biến tại Việt Nam và bộ phần mềm QOCA vẫn còn tương đối khó sử dụng. Nhận định được những vấn đề này và những vấn đề đặt ra Việt Nam cũng cần có những phần mềm xử lý cho riêng mình, PGS.TS Phan Trọng Trịnh mong muốn xây dựng một chương trình tính biến dạng kiến tạo vỏ Trái Đất mang một thương hiệu của Việt Nam, dễ sử dụng, phù hợp với người dùng của Việt Nam. Đáp lại sự mong muốn đó và sự dẫn dắt chỉ bảo của PGS.TS Phan Trọng Trịnh, em xin mạnh dạn xây dựng một chương trình tính biến dạng kiến tạo của vỏ Trái Đất trong đồ án tốt nghiệp của mình với đề tài: “Nghiên cứu lập trình tính biến dạng xoay trong một tam giác Địa động lực” Chương trình được xây dựng là một tool của phần mềm xử lý bản đồ Mapinfo 11 với ngôn ngữ lập trình là MapBasic 9.5. Chương trình này có chức năng xử lý một phần trong tính toán biến dạng đó là tính biến dạng xoay cho một tam giác địa động lực. Đồ án gồm 4 chương và được bố cục như sau : Đặt vấn đề Chương 1: Cơ sở lý thuyết cho xây dựng chương trình Chương 2: Xây dựng chương trình Chương 3: Giao diện và sử dụng chương trình Chương 4: Đánh giá và phân tích kết quả chương trình đạt được Kết luận và kiến nghị Nhìn chung chương trình đã đáp ứng được mục đích đề ra, tuy nhiên do kiến thức còn hạn chế cũng như xây dựng chương trình này đòi hỏi nhiều kiến thức chuyên sâu và hạn hẹp về thời gian nghiên cứu nên chương trình không thể tránh còn nhiều thiếu sót. Để xây dựng được chương trình này em xin chân thành cám ơn sự giúp đỡ và những ý kiến quý báu của PGS.TS Phan Trọng Trịnh, là người đã hướng dẫn xuyên suốt trong quá trình thực tập đến hoàn thành đồ án tốt nghiệp này, cùng đó em cũng cám ơn tới sự giúp đỡ của các thầy các cô trong bộ môn Tin Học Địa Chất đã giúp đỡ em hoàn thành được đồ án tốt nghiệp. Em xin chân thành cám ơn! ĐẶT VẤN ĐỀ TÍNH THỰC TẾ TRONG VIỆC LỰA CHỌN ĐỀ TÀI Hiện nay, trên thế giới và Việt Nam cùng với sự phát triển mạnh mẽ và mang tính đột phá của công nghệ thì việc áp dụng công nghệ thông tin vào giải các bài toán trong Địa chất học đang là một nhu cầu tất yếu và chủ đạo. Đặc biệt với sự đột phá về công nghệ định vị toàn cầu GPS (Global Positioning System) thì việc áp dụng các phần mềm theo số liệu GPS để tính toán biến dạng động lực của vỏ Trái Đất là quan trọng và chủ đạo. Việc áp dụng các phần mềm tính toán giúp tối ưu thời gian xử lý và mang lại sự chính xác rất cao và nó đang là yếu tố cần thiết cho việc xử lý đánh giá biến dạng địa động lực mà nó đã được áp dụng trên thế giới và Việt Nam. Tại phòng Địa Động Lực – Viện Địa Chất chuyên nghiên cứu về sự biến đổi trong vỏ Trái Đất thì việc áp dụng phần mềm tính toán các số liệu cho tính biến dạng của vỏ Trái Đất được ưu tiên hàng đầu. Để từ đó có thể đánh giá được sự biến đổi kiến tạo vỏ Trái Đất, đánh giá dự báo động đất,sóng thần tại khu vực Việt Nam để có những phương án đối phó thiên tai cần thiết. MỤC ĐÍCH, YÊU CẦU MỤC ĐÍCH Xuất phát từ những nhu cầu của thực tế và thu thập dữ liệu trong quá trình thực tập tốt nghiệp người thiết kế sử dụng ngôn ngữ lập trình Mapbasic để thành lập chương trình là một tool của phần mềm ứng dụng công nghệ GIS là Mapinfo. Chương trình này là một công cụ xứ lý các số liệu dịch chuyển của vỏ Trái Đất để tính toán đưa ra được thông số biến dạng là biến dạng xoay trong một tam giác địa động lực và sai số của nó. YÊU CẦU Chương trình phải trực quan,dễ hiểu và dễ sử dụng Gọn nhẹ và đa dạng trong lựa chọn các chức năng Chính xác cao và hiệu quả Thích hợp với hệ điều hành của Window, với các loại phần cứng phổ biến ở Việt Nam. CHƯƠNG I : CƠ SỞ LÝ THUYẾT CHO XÂY DỰNG CHƯƠNG TRÌNH 1.1 LÝ THUYẾT BIẾN DẠNG 1.1.1 BIẾN DẠNG MỘT CHIỀU Giả sử có thanh vật liệu cứng trong hệ toạ độ một chiều (0,x) (Hình 1.1). Trên đó có hai điểm rất gần nhau A(x) và B(x+dx). Khi tác dụng một lực P theo hướng x từ đầu mút của thanh cứng, thanh này sẽ bị kéo dài và các điểm A, B cũng đều dịch chuyển (displace). Giả sử dịch chuyển này là vô cùng bé, biên độ dịch chuyển sẽ phụ thuộc vào vị trí của điểm dọc theo thanh: càng gần điểm tác dụng lực P,thì dịch chuyển càng lớn. Do đó,điểm B sẽ bị dịch chuyển nhiều hơn so với điểm A.Dịch chuyển tại điểm A được biểu diễn là u(x) và của điểm B được biểu diễn là u(x+dx) (Hình1.1). Do dịch chuyển dx vô cùng bé nên có thể viết: u(x+dx) = ∂u∂xdx (1.1) và : A’B’ = dx + ux + ∂u∂xdx – ux = dx + ∂u∂xdx (1.2) Hình 1.1: Minh họa biến dạng một chiều Biến dạng (strain) được định nghĩa là tỉ số của sự thay đổi chiều dài của vật thể so với chiều dài ban đầu của nó. Do đó: εx = ∆LL = A’B’- ABAB = dx + ∂u∂xdx - dxdx = ∂u∂x (1.3) Như vậy biến dạng vô cùng bé là gradient không gian của dịch chuyển. Loại biến dạng mô tả trên được gọi là biến dạng pháp tuyến (normal strain), cũng có thể được khái quát hoá trong không gian hai hay ba chiều.Tuy nhiên trong không gian hai hay ba chiều, sẽ xuất hiện dạng biến dạng khác, gọi là biến dạng tiếp tuyến hay biến dạng trượt (shear strain), biểu diễn biến dạng bóp méo theo góc, không phải biến dạng căng giãn.Trường hợp biến dạng trong không gian hai chiều sẽ được mô tả sau đây. 1.1.2 BIẾN DẠNG HAI CHIỀU Do việc xác định chuyển dịch thẳng đứng của vỏ Trái Đất còn hạn chế nên ta chỉ xét các biến dạng do chuyển dịch nằm ngang của vỏ Trái Đất trong không gian 2 chiều. 1.1.2.1 Khái niệm Giả sử trong không gian Đề-các hai chiều,trên mặt phẳng xy theo trục x (Ox dương chỉ hướng đông) và trục y (Oy dương chỉ hướng bắc), dịch chuyển của chất điểm X là rất nhỏ.Vận tốc chuyển dịch u là một hàm theo vị trí của điểm X(x,y) có thể được viết dưới dạng: u(X + δX) = u(X) + ∂u∂X δX (1.4) Hai thành phần vận tốc theo phương của trục x và y có thể viết như sau: ux(X + δX) = ux(X) + ∂ux∂xδx + ∂ux∂yδy uy(X + δX) = uy(X) + ∂uy∂xδx + ∂uy∂yδy (1.5) Trong đó ux, uy là các vận tốc thành phần của sự thay đổi vô cùng bé kích thước vật thể và bản thân kích thước vật thể dần tớ i 0. Do đó (1.4) có thể viết là: u(X + δX) = u(X) + gδX (1.6) với : g= ∂ux∂x∂ux∂y∂uy∂x∂uy∂y (1.7) g được gọi là tensor gradient vận tốc dịch chuyển ngang. Do gradient vận tốc thường bao hàm cả biến dạng nén ép/căng giãn và biến dạng xoay, nên g là một tensor bất đối xứng. Theo lý thuyết về tensor, một tensor bậc hai bất kỳ có thể phân tách thành hai tensor, bao gồm một tensor đối xứng và một tensor b ất đối xứng [Malvern, 1969]. Do đó (1.7) có thể viết thành: g= 12[g + gT] + 12[g - gT] (1.8) ↔ g = ∂ux∂x12∂ux∂y +∂uy∂x12∂ux∂y +∂uy∂x∂uy∂y + 012∂ux∂y - ∂uy∂x12∂uy∂x - ∂ux∂y0 (1.9) Nếu đặt: εx= ∂ux∂xεy= ∂uy∂yεxy=εyx= 12γxy=12∂ux∂y +∂uy∂x Ωxy= 12∂ux∂y - ∂uy∂x= - Ωyx (1.10) Ta sẽ có: g= εxεxyεyxεy + 0ΩxyΩyx0 = ϵ +Ω (1.11) Trong đó các ký hiệu ở biểu thức (1.11) : ϵ được gọi là tensor vận tốc biến dạng (strain rate tensor) hay tensor đối xứng Ω là tensor vận tốc xoay (rotation rate tensor) hay tensor phản đối xứng. εx và εy là vận tốc biến dạng pháp tuyến (nornal strain) trên mặt phẳng xy theo trục x và trục y.Chúng được gọi là vận tốc giãn nở (hay căng giãn) khi có giá trị dương và vận tốc nén ép khi có giá trị âm. εxy=εyx là vận tốc biến dạng trượt (shear strain) không kèm theo sự xoay. Tensor vận tốc biến dạng ϵ không phụ thuộc vào sự tịnh tiến của hệ toạ độ và ảnh hưởng không đáng kể vào phép xoay toạ độ: tensor vận tốc xoay Ω không phụ thuộc vào phép tịnh tiến hệ toạ độ. Do những ưu điểm trên của tensor vận tốc biến dạng người ta thường sử dụng các tham số tính từ các thành phần của nó, bao gồm εx, εy, εxy để mô tả biến dạng bề mặt vỏ trái đất. 1.1.2.2 Trình tự tính biến dạng Đầu tiên ta có các dữ liệu đo vận tốc chuyển dịch trên bề mặt Trái Đất (được đo bằng GPS) được thể hiện trong một lưới các điểm đo. Chia lưới các điểm đo này thành các đa giác (thường là tam giác) sao cho khoảng cách trong các cạnh của đa giác tương đối bằng nhau. Từ đó ta sẽ tính các giá trị biến dạng trong một đa giác này. Từ vận tốc chuyển dịch đo được trong đa giác ta tính được tensor gradient chuyển dịch ngang. Từ tensor gradient vận tốc chuyển dịch ngang,có thể phân tách thành tensor vận tốc biến dạng (tensor đối xứng) và tensor vận tốc xoay (tensor phản đối xứng). Tensor vận tốc biến dạng được biển diễn theo các vận tốc biến dạng chính trong trong hệ toạ độ của các trục chính. Giả định rằng biến dạng là đồng nhất trong mỗi đa giác,các giá trị vận tốc biến dạng được tính trung bình trong mỗi đa giác và được biểu diễn tại tâm của đa giác đó. 1.1.3 BIẾN DẠNG XOAY 1.1.3.1 Biến dạng xoay là gì? Theo (1.11) thì biến dạng xoay là một tensor phản đối xứng và thường được ký hiệu là ω. Giả sử ta có một điểm đo trên bề mặt của vỏ trái đất, khi biết tốc độ chuyển dịch của điểm này thì ta sẽ xác định được hướng dịch chuyển của điểm đó, nhưng do các yếu tố biến dạng trong vỏ Trái đất điểm này sẽ xoay đi một góc nào đó so với mốc ban đầu và góc này chính là thể hiện vận tốc biến dạng xoay. 1.1.3.2 Minh họa thể hiện biến dạng xoay A B A B (a) (b) (c) (d) Hình 1.2: Minh họa biến dạng xoay Trong hình 1.2 thì hình (a) thể hiện điểm A tại gốc mũi tên là điểm tại vị trí ban đầu trong không gian, điểm B là điểm sau khi đo, mũi tên sẽ là đương thể hiện hướng dịch chuyển của điểm A, và chiiều mũi tên thể hiện biến dạng xoay của điểm tại vị trí A. hình (b) tương tự như (a) nhưng chiều xoay ngược lại. Hình (c) và (d) là ký hiệu biến dạng xoay thể hiện trên bản đồ. 1.1.4 TAM GIÁC ĐỊA ĐỘNG LỰC 1.1.4.1 Tam giác địa động lực là gì? Giả sử ta có một loạt các điểm khác nhau đo tốc độ dịch chuyển bề mặt trái đất, các điểm này được bố trí các khoảng cách tương đối với nhau tùy theo lưới đo là lớn hay nhỏ. Để tính biến dạng cho vùng được bố trí các điểm đo này thì người ta tính biến dạng trong từng đa giác một, và đa giác này thường là một tam giác (tức là 3 điểm đo một tạo thành một tam giác) Tam giác này thường được người xác định lựa chọn theo nguyên tắc tam giác Delaunay. Và biến dạng tính được trong tam giác thể hiện và qui về trọng tâm của tam giác đó. A B C A’ B’ C’ G Hình 1.3: Minh họa biến dạng xoay trong tam giác địa động lực Trong hình 1.3 thể hiện một tam giác địa động lực trong đó thể hiện 3 đầu của tam giác là 3 điểm đo được bố trí trên bề mặt trái đất. các mũi tên màu đỏ thể hiện các tốc độ dịch chuyển, ký hiệu biến dạng xoay được thể hiện trên trọng tâm G của tam giác. 1.1.4.2 Tính biến dạng xoay trong một tam giác địa động lực. Trong không gian Decac 2 chiều của một tam giác địa động lực.Gọi vxij, vyij là vận tốc dịch chuyển của điểm thứ i tới điểm thứ j lần lượt theo trục ox và oy. Gọi xij, yij là khoảng cách của điểm thứ i tới điểm thứ j lần lượt theo trục ox và oy. vxij, vyij có đơn vị là m/năm, xij, yij đơn vị là met. Theo đó ta sẽ có: vxij=vxi-vxj, vyij=vyi-vyj Ta có công thức Vij=A.F (1.12) Trong đó: Vij=vx12vy12vx13vy13 là vector vận tốc dịch chuyển. A=x12y120000x12y12x13y130000x13y13 là ma trận khoảng cách. F=∂vx∂x∂vx∂y∂vy∂x∂vy∂y là gradient vector vận tốc(F chưa biết). Từ công thức (1.12) F=AtCV-1A-1.AtCV-1Vij (1.13) Trong đó CV là ma trận hiệp phương sai của vận tốc dịch chuyển. Tính được F ta có thể tính được biến dạng xoay ω theo công thức : ω=12∂vx∂y-∂vy∂x (1.14) Tuy nhiên để tính được ma trận F theo công thức (1.13) đòi hỏi một kiến thức chuyên sâu về xác xuất thống kê, địa thống kê và trắc địa cao cấp. Do trình độ cũng như thời gian nghiên cứu có hạn nên em chưa thể tính F theo công thức (1.13). Nhưng theo đại số tuyến tính ta có thể tính F theo công thức ma trận nghịch đảo đó là : F=A-1Vij (1.15) Việc tính theo phương pháp này cũng sẽ dẫn tới kết quả tương đối chính xác và có thể chấp nhận được. Tuy nhiên nếu có thời gian nghiên cứu em sẽ xác định F để tính biến dạng xoay theo công thức (1.13). Hiện tại trong đồ án em chỉ trình bày tính toán kết quả biến dạng xoay ω thông qua việc tính Gradien vector vận tốc F theo công thức (1.15). 1.2 MA TRẬN 1.2.1 KHÁI NIỆM 1.2.1.1 Định nghĩa ma trận Định nghĩa 1.1: Một bảng số có m hàng và n cột được ký hiệu : A = a11 a12⋯ a1na21a22⋯a2n⋮⋱⋮am1am2⋯amn (1.16) Được gọi là một ma trận cỡ m×n với aij là phần tử thuộc hàng thứ i cột j Khi aij ∈Z, ∀i,j thì A được gọi là ma trận nguyên. aij ∈C, ∀i,j thì A được gọi là ma trận phức. Nếu không chỉ rõ aij thì A gọi là tập số thực. Một ma trận A có cỡ m×n có thể được viết tắt dưới dạng : A = aij i=1,mj=1,n hay A = aijm×n (1.17) Khi m = n ta nói A là ma trận vuông cấp n hoặc m. Tập hợp tất cả các ma trận cỡ m×n được ký hiệu là Mm×n. 1.2.1.2 Ví dụ: Ma trận 230457 là một ma trận cỡ 2 × 3 Ma trận 4572 là một ma trận vuông cấp 2 1.2.2 CÁC PHÉP TOÁN TRONG MA TRẬN 1.2.2.1 Phép cộng Phép cộng chỉ thực hiện được bởi 2 ma trận cùng cỡ. Tổng hai ma trận có cùng cỡ A = aijm×n và B = bijm×n là một ma trận cùng cỡ được định nghĩa : A + B = cijm×n , cij = aij + bij, với mọi i=1,m, j=1,n. (1.18) Ví dụ 1.1: 230457 + 150263 = 38061110 1.2.2.2 Phép nhân ma trận với một số Cho ma trận A = aijm×n cỡ m×n , và số thực k. Ta định nghĩa và ký hiệu phép nhân ma trận với một số như sau : kA = kaijm×n (1.19) Ví dụ 1.2: 12 230457 = 13/2025/27/2 Tính chất 1.1: Các tính chất sau đúng với ma trận cùng cỡ : A + (B + C) = (A + B) + C ; Ma trận có các phần tử đều bằng 0 gọi là ma trận không và ký hiệu 0. Khi đó : A + 0 = 0 + A = A ; A + (-A) =0, trong đó – A = -aijm×n ; A + B = B + A ; k(A + B) = kA + kB ; (k + h)A=kA + hA ; k(hA) = (kh)A ; 1A = A ; 1.2.2.3 Phép nhân ma trận Định nghĩa 1.1: Tích hai ma trận A = aijm×p và B = bijp×n là ma trận cỡ m×n được ký hiệu và định nghĩa bởi AB = cijm×n , trong đó cij = k=1paikbkj với mọi i=1,m, j=1,n. (1.20) Vậy tổng phần tử của hàng thứ i cột thứ j của AB bằng tổng của tích các phần tử của hàng thứ i của A với các phần tử tương ứng của cột thứ j của B. Ví dụ 1.3: 23045712-1024= -141336 Ta thấy rằng tích của hai ma trận A và B được định nghĩa khi số cột của A bằng số hàng của B.Vì vậy có thể định nghĩa AB nhưng không định nghĩa được BA nếu số cột của B không bằng số hàng của A. Khi A,B là hai ma trận vuông cùng cấp thì ta có đồng thời AB và BA. Mặc dù vậy chưa chắc có đẳng thức AB = BA, hay nói cách khác tích của ma trận không có tính giao hoán. Chẳng hạn, xét: A=2035 B=2451 AB=483117 ≠ BA= 16201315 Tính chất 1.2: Giả sử A,B,C là các ma trận với số cột số hàng thích hợp để các phép toán sau được xác định thì ta có đẳng thức : A(BC)=(AB)C tính kết hợp. A(B + C)=AB + AC tính phân phối bên trái phép nhân ma trận với phép cộng. (B + C)A = BA + CA tính phân phối bên phải phép nhân ma trận với phép cộng. Với mọi k ∈R, k(AB) = (kA)B = A(kB). Với mọi số tự nhiên dương n ta xét ma trận In vuông cấp n có các phần tử trên đường chéo bằng 1 và ở các vị trí khác đều bằng 0. In=10⋱01 Khi đó ma trận A cỡ m×n ta có ImA = A = AIn Ma trận In được gọi là ma trận đơn vị cấp n 1.2.2.4 Ma trận chuyển vị Định nghĩa 1.2: Cho ma trận A cỡ m×n ,nếu ta đổi các hàng của ma trận A thành các cột (do đó các cột thành các hàng)thì ta được ma trận mới cỡ n×m , gọi là ma trận chuyển vị của ma trận trên A, ký hiệu At At=cijn×m ; cij = aij i=1,n, j=1,m. (1.21) Ví dụ 1.4: A=12-1024 ; At=1-12204 . Tính chất 1.3: (A + B)t = At + Bt. (kA)t = kAt. (AB)t= BtAt. Định nghĩa 1.3: Nếu A =At thì A được gọi là ma trận đối xứng (A là ma trận vuông có các phần tử đối xứng nhau qua đường chéo thứ nhất). Nếu A =-At thì A được gọi là phản đối xứng (hay đối xứng lệch) (A là ma trận vuông có các phần tử đối xứng và trái dấu qua đường chéo thứ nhất, các phần tử trên đường chéo thứ nhất bằng 0). 1.2.3 ĐỊNH THỨC 1.2.3.1 Định nghĩa Khi giải hệ phương trình tuyến tính ax+by=ca'x+b'y=c' ta tính các định thức D=aba'b'= ab’-b’a, Dx=cbc'b' =cb'-bc', Dy=aca'c'=ac'-ca' Như vậy định thức của ma trận A = a11a12a21a22 vuông cấp 2 là : A= a11a12a21a22 =a11a22-a12a21. Định nghĩa 1.4: Định thức của ma trận vuông A = aijm×n được ký hiệu là det A hay A và định nghĩa bởi biểu thức : det A=σϵSnsgnσ.a1σ(1)…anσ(n) (1.22) Như vậy định thức của ma trận vuông A = aijm×n là tổng tất cả các tích gồm n phần tử trên n hàng mà ở trên n cột khác nhau của ma trận A và nhân với +1 hoặc -1. Ví dụ 1.5: Tính định thức của một ma trận bậc 3 có dạng a11a12a13a21a22a23a31a32a33 Có dấu sgnσ1 = sgnσ4 = sgnσ5 = 1, sgnσ2 = sgnσ3 = sgnσ6 = -1.Vậy a11a12a13a21a22a23a31a32a33 = σϵS3sgnσ.a1σ(1).a2σ(2).a3σ(3) = a11a22a33 - a11a23a32 - a12a21a33 + a12a23a31 + a13a21a32 - a13a22a31 1.2.3.2 Tính chất của định thức Tính chất 1.4: Nếu đổi chỗ hai hàng của ma trận thì định thức đổi dấu: A = aijn×n, A' = a'ijn×n, a'ij=aij nếu i≠k,makj nếu i=mamj nếu i=k thì detA’=-detA. Định thức có tính chất tuyến tính đối với mỗi hàng: Cho hai ma trận A = aijn×n, B= bijn×n và ma trận C= cijn×n có hàng thứ k là tổ hợp tuyến tính của hàng thứ k của A và B. Nghĩa là cij=aij=bij nếu i≠kcij=αakj+βbkj ; với mọi j= 1,...,n Thì detC = αdetA + βdetB. Từ 1. và 2. suy ra rằng trong một ma trận có hai hàng tỷ lệ thì định thức bằng 0. Nếu ta cộng vào một hàng một tổ hợp tuyến tính các hàng khác thì định thức không thay đổi. Định thức của ma trận chuyển vị bằng định thức của ma trận đó: Giả sử A = aijn×n, At = a'ijn×n, a'ij=aji,i,j=1,…,n thì detAt = det A. Từ 5. suy ra rằng các tính chất của định thức đúng với hàng thì cũng đúng với cột và ngược lại.Vì vậy ta chỉ cầ n chứng minh các định lý về định thức đúng với hàng.Chẳng hạn, từ 4. suy ra nếu ta cộng vào một cột một tổ hợp tuyến tính các cột khác thì định thức không thay đổi. Định thức của mọi hệ véctơ phụ thuộc tuyến tính đều bằng 0. 1.2.3.3 Cách tính định thức Định lý 1.1: Aij=-1i+jMij (1.23) Trong đó Mij là định thức của ma trận cấp n-1 có được bằng cách xoá hàng i cột j của ma trận A. 1.2.4 MA TRẬN NGHỊCH ĐẢO 1.2.4.1 Định nghĩa ma trận nghịch đảo Định nghĩa 1.5: Ma trận vuông A được gọi là khả nghịch nếu tồn tại ma trận vuông cùng cấp B sao cho I = BA = AB. Trong đó I là ma trận đơn vị. Phép nhân ma trận có tính kết hợp nên ma trận B ở định nghĩa trên nếu tồn tại thì duy nhất, ta gọi ma trận này là ma trận nghịch đảo của A, ký hiệu A-1. 1.2.4.2 Điều kiện cần và đủ để tồn tại ma trận nghịch đảo Định lý 1.2 : (điều kiện cần) Nếu A khả nghịch thì det A ≠ 0 (lúc đó ta nói ma trận A không suy biến) Định nghĩa 1.6: Ma trận B = Aijn×n trong đó Aij là phần bù đại số của phần tử aij của ma trận A = aijn×n, được gọi là ma trận phụ hợp của A. Định lý 1.3 : (điều kiện đủ) Nếu det A ≠ 0 thì A khả nghịch và A-1=1detABt (1.24) Với B là ma trận phụ hợp của A. 1.2.4.3 Ví dụ tính ma trận nghịch đảo theo công thức (1.24) Ví dụ 1.6: Ma trận A=123253108 có detA = -1 A11=-11+15308=40, A12=-11+22318=-13, A13=-11+32510=-5, A21=-12+12308=-16, A22=-12+21318=5, A23=-12+31210=2, A31=-13+12353=-9, A32=-13+21323=3, A33=-13+31225=1, Vậy : A-1=1-140-13-5-1652-931t=-40-16-9-1353-521=-4016913-5-35-2-1. 1.2.5 GIẢI HỆ PHƯƠNG TRÌNH TUYẾN TÍNH BẰNG MA TRẬN NGHỊCH ĐẢO 1.2.5.1 Hệ phương trình tuyến tính Hệ m phương trình tuyến tính n ẩn có dạng tổng quát: a11x1+a12x2+…+a1nxn=b1a21x1+a22x2+…+a2nxn=b2………………………. ……………..am1x1+am2x2+…+amnxn=bm Hay j=1naijxj=bi,i=1,…,m (1.25) Trong đó : x1, x2,..., xn là n ẩn aij là hệ số của ẩn thứ j trong phương trình i, bi là vế phải của phương trình thứ i; i-1,....,n;j=1,...,m. Khi các vế phải bi = 0 thì hệ phương trình được gọi là thuần nhất. 1.2.5.2 Giải hệ phương trình tuyến tính bằng ma trận nghịch đảo Từ công thức (1.25) ta có dạng ma trận của hệ phương trình tuyến tính : A = a11 a12⋯ a1na21a22⋯a2n⋮⋱⋮am1am2⋯amn , B=b1b2⋮bm ,X=x1x2⋮xn (1.26) Trong đó A, B, X lần lượt được gọi là ma trận hệ số, ma trận vế sau và ma trận ẩn. Khi đó hệ phương trình (1.25) được viết lại dưới dạng ma trận: AX=B (1.27) Giải phương trình (1.27) theo phương pháp ma trận nghịch đảo ta có công thức : X=A-1B. (1.28) 1.3 SAI SỐ 1.3.1 KHÁI NIỆM Giả sử x là số gần đúng của x* (x* : số đúng), Khi đó ∆=x-x* gọi là sai số thực sự của x. Vì không xác định được ∆ nên ta xét đến 2 loại sai số đó là sai số tuyệt đối và sai số tương đối : Sai số tuyệt đối: Giả sử ∃∆x>0 đủ bé sao cho x-x*≤∆x. Khi đó ∆x gọi là sai số tuyệt đối của x. Sai số tương đối :được định nghĩa và ký hiệu bởi công thức: δx=∆xx (1.29) 1.3.2 CÁC LOẠI SAI SỐ Dựa vào nguyên nhân gây sai số, ta có các loại sai số sau: Sai số giả thiết: xuất hiện do việc giả thiết bài toán đạt được một số điều kiện lý tưởng nhằm làm giảm độ phức tạp của bài toán. Sai số do số liệu ban đầu: xuất hiện do việc đo đạc và cung cấp giá trị đầu vào không chính xác. Sai số phương pháp : xuất hiện do việc giải bài toán bằng phương pháp gần đúng. Sai số tính toán : xuất hiện do làm tròn số trong quá trình tính toán, quá trình tính càng nhiều thì sai số tích luỹ càng lớn. 1.3.3 SAI SỐ TÍNH TOÁN Giả sử dùng n số gần đúng xii=1,n để tính đại lượng y, Với y=fxi=fx1,x2,…,xn. Trong đó f là hàm khả vi liên tục theo các đối số của xi. Khi đó sai số của y được xác định theo công thức sau : Sai số tuyệt đối: ∆y=i=1n∂f∂xi∆x (1.30) Sai số tương đối: δy=i=1n∂lnf∂xi∆x (1.31) Ta tính sai số cho các trường hợp của hàm f như sau : Trường hợp f có dạng tổng: y=fxi=±x1±x2±…±xn ∂f∂xi=1 ∀i suy ra ∆y=i=1n∆x (1.32) Trường hợp f có dạng tích : y=fxi=x1×x2×…×xkxk+1×…×xn lnf=lnx1.x2…xmxm+1…xn=lnx1+lnx2+…+lnxm-lnxm+1+…+lnxn ∂lnf∂xi=1xi ∀i ⟹ δy=i=1n∆xixi =i=1nδxi Vậy: δy=i=1nδxi (1.33) Trường hợp f có dạng lũy thừa : y=fx=x∝∝>0 . Ta có : lny=lnf=∝lnx ∂lnf∂x=∝x Suy ra δy=∝.∆xx=∝δx (1.34) Ví dụ 1.7: Tính sai số của: y1=a3bc ; y2=a3-bc Giải: δy1=δa3+δbc=3δa+δb+12δc =3∆aa+∆bab+12∆cc ∆y2=∆a3+∆bc=a3δa3+bcδbc=3a3∆aa+bc∆bb+12∆cc CHƯƠNG 2 : XÂY DỰNG CHƯƠNG TRÌNH 2.1 NGÔN NGỮ LẬP TRÌNH Để xây dựng chương trình tính biến dạng xoay trong một tam giác địa động lực, em lựa chọn xây dựng chương trình là thành lập một tool (công cụ) của phần mềm Mapinfo. Đây là phần mềm GIS được dùng phổ biến và rộng rãi trên thế giới và Việt Nam, và thành lập tool này dựa trên ngôn ngữ lập trình mở rộng của nó, đó là MapBasic. Cụ thể trong chương trình được trình bày trong đồ án này em sử dụng MapBasic 9.5 và Mapinfo 11.0 là những phiên bản mới nhất hiện nay. 2.1.1 TỔNG QUAN VỀ PHẦN MỀM MAPINFO MapInfo là một phần mềm nhằm giúp chúng ta xử lý bản đồ số cũng như các thông tin liên quan đến địa lý. Trước đây xử lý bản đồ là một chức năng chuyên nghiệp của ngành bản đồ học. Với sự ra đời của Mapinfo, việc xử lý bản đồ trở nên một công việc mà mọi người đều có thể làm được. Không những có các chức năng của bản đồ thông dụng như cung cấp thông tin địa lý, giúp định vị trong thực địa,... Mapinfo còn là một phần mềm rất mạnh giúp xử lý và phân tích thông tin trên bản đồ số. Chức năng này của Mapinfo khiến cho nó trở thành một hệ cơ sở dữ liệu địa lý. Tính năng này còn được tăng cường thêm nhờ khả năng liên kết được với các hệ cơ sở dữ liệu như Microsoft Access, SQL Sever, Oracle,... Sử dụng Mapinfo có thể hỗ trợ giải quyết được nhiều vấn đề thực tế một cách nhanh chóng và chính xác. Một bản đồ trong Mapinfo bao gồm hai phần : phần bản đồ (hay phần đồ họa) và phần dữ liệu (hay thông tin). 2.1.1.1 Đồ họa trong Mapinfo Phần đồ họa của Mapinfo là những vật thể được biểu hiện trên màn hình máy tính giống như bản đồ giấy nhưng có bản chất khác. Phần đồ họa được hiển thị trong cửa sổ bản đồ (Map Window). Mapinfo sử dụng các khái nệm toán học để biểu diễn các chi tiết trên bản đồ. Có 3 kiểu khái niệm toán học chính được sử dụng để xây dựng bản đồ trên Mapinfo (Hình 2.1) : Điểm : là một vật thể toán học không có kích thước, không có chiều dài, chỉ có tọa độ (trong một hệ trục tọa độ nào đó). Người ta sử dụng vật thể điểm để minh họa cho một thành phố,một trạm xăng,một trường học,... Điểm được tượng trưng bằng một chấm trong toán học. Trong Mapinfo,tùy theo nội dung của điểm đó (minh họa cho cái gì) mà người ta có thể sử dụng một trong nhiều biểu tượng khác nhau để minh họa một điểm. Vì vậy điểm trong Mapinfo được gọi là biểu tượng (symbol). Đường: là một vật thể hình học không có chiều rộng nhưng có chiều dài. Đường trong Mapinfo bao gồm các thành phần nhỏ được gọi là đoạn (segment). Giữa hai đoạn liền nhau gọi là nốt (node). Các điểm nốt này cho phép ta chỉnh sửa các đường.Đường được sử dụng để minh họa cho một con sông, một đường giao thông,.... Vùng : là một vật thể có diện tích.Vùng cũng bao gồm các thành phần nhỏ là đoạn và các điểm nốt nhưng đoạn đầu tiên và đoạn cuối cùng gặp nhau nên tạo ra một đường khép kín và phần phía trong đường ranh giới đó có diện tích. Vùng có chu vi là đường giới hạn ranh giới của vùng đó. Vùng thực chất là một hình đa giác.Vùng được sử dụng để minh họa cho một quận, một tỉnh,một cái ao,... Hình 2.1: Minh họa các kiểu đồ họa chính trong Mapinfo Các thông tin đồ họa trên Mapinfo được gọi là các đối tượng (object). Người làm bản đồ số cần phải biết cách số hóa những thông tin địa lý từ bản đồ giấy vào bản đồ số sao cho đúng cách.Ví dụ như khi nói đến một cái ao có thể “nhìn” thấy (tức là thấy được bằng mắt thường trên bản đồ giấy hình dạng của cái ao ở một tỉ lệ nào đó) thì ta số hóa nó thành một vùng, nhưng khi làm một bản đồ tỉ lệ rất nhỏ thì ta lại không nhìn thấy hình dạng cái ao đó nên được minh họa thành một điểm.Tương tự như vậy,một con đường trên một bản đồ tỉ lệ nhỏ thì được minh họa bằng kiểu đường, nhưng trên một bản đồ tỉ lệ lớn thì con đường sẽ có chiều rộng, lúc đó ta minh họa con đường bằng đối tượng có chiều rộng,lúc đó ta minh họa con đường bằng một đối tượng kiểu vùng... Phần đồ họa trong Mapinfo được quản lý theo lớp (layer), có nghĩa là các thông tin địa lý được tố chức theo từng nhóm,ví dụ như trên bản đồ của một thành phố, ta có lớp đường xá, lớp quận, lớp địa danh, lớp sông suối... Nhờ khả năng này mà ta có thể hiển thị thông tin theo ý muốn.Khi muốn sử dụng những thông tin nào ta có thể mở những lớp thông tin đó ra. Cửa sổ bản đồ có thể chứa một hay nhiều lớp bản đồ đang được mở. Nếu các lớp bản đồ thuộc cùng một vị trí địa lý thì có thể hiển thị chồng lên nhau. Ta có thể hình dung mỗi lớp bản đồ như là một tờ giấy kính (transparency) có hình vẽ và bản đồ giống như nhiều tờ giấy kính chồng lên nhau để tạo ra một cái nhìn cuối cùng. Các lớp bản đồ được sắp xếp theo thứ tự trên dưới, có nghĩa là lớp ở dưới bị lớp ở trên che khuất những phần chung.Ngoài ra phía trên cùng các lớp bản đồ được mở luôn luôn có một lớp mặc định được gọi là lớp Cosmetic (Cosmetic Layer).Lớp này giống như một lớp nháp, ta có thể đánh dấu chỉnh sửa vào lớp này và thêm bớt các vật thể đồ họa vào nó nhưng không ảnh hưởng đến các lớp bản đồ khác ở dưới. Những vật thể được vẽ thêm vào lớp bản đồ này có thể được lưu dưới dạng được mở hoặc lưu thành một lớp bản đồ riêng. Lớp Cosmetic còn được sử dụng trong việc trình bày bản đồ khi in ấn, ví dụ như thêm các chi tiết để trình bày bản đồ. Các đối tượng trong lớp này không có phần dữ liệu. 2.1.1.2 Dữ liệu trong Mapinfo Ngoài phần đối tượng đồ họa,bản đồ số trong Mapinfo còn có dữ liệu được hiển thị trong một cửa sổ được gọi là cửa sổ Brower(cửa sổ dữ liệu). Dữ liệu trong Mapinfo được hiển thị trên một bảng và chúng được cấu trúc theo dữ liệu tương tự các kiểu dữ liệu khác như Excel,Access,.... Ngoài ra Mapinfo cũng có thể mở các dữ liệu khác. Ta có thể mở một tập tin Excel hay Access trong Mapinfo và xử lý chúng như những bảng dữ liệu bình thường của Mapinfo. Mỗi cửa sổ dữ liệu có thể hiển thị thông tin của một lớp bản đồ hay một phần của một lớp bản đồ. Cửa sổ này bao gồm các ô giống nhau như bảng tính Excel. Các ô được xếp theo chiều dọc được gọi là trường(field) hay cột (column). Mỗi cột hiển thị một loại thuộc tính của đối tượng trên bản đồ số, ví dụ đối với bản đồ các tỉnh của Việt Nam chẳng hạn, ta có thể có các cột tên tỉnh,diện tích tỉnh,chu vi tỉnh,dân số,... Mỗi một cột có một định dạng khác nhau tùy theo nội dung chứa trong cột đó. Ta có thể thêm hay bớt trường cũng như thay đổi định dạng các trường. Tên trường không hiển thị tiếng Việt được nên khi tạo trường ta không được gõ dấu tiếng Việt vào tên trường. Trên cùng cửa sổ dữ liệu có tiêu đề cột (in đậm), tức tên trường. Các hàng trong cửa sổ dữ liệu được gọi là bản ghi (record). Bên trái mỗi hàng có một ô vuông. Khi sử dụng công cụ chọn, ta có thể nhắp chuột lên ô vuông đó để chọn bản ghi đó. Khi được chọn ô vuông biến thành màu đen. Mỗi một bản ghi liên kết với một vật thể đồ họa trên cửa sổ bản đồ,hay nói cách khác mỗi đối tượng đồ họa trên cửa sổ bản đồ có thông tin nằm trên một hàng trong cửa sổ dữ liệu. Đối tượng đồ họa và dữ liệu là hai thành phần thống nhất của một bản đồ số trong Mapinfo. Nếu mở cửa sổ đồ họa và cửa sổ dữ liệu của một lớp bản đồ cùng lúc thì khi sử dụng công cụ chọn, ta có thể nhắp chuột lên chọn một vật thể đồ họa trên cửa sổ bản đồ. Khi một dối tượng trên cửa sổ bản đồ được chọn thì bản ghi tương ứng trong cửa sổ dữ liệu cũng được chọn và ngược lại. Nếu ta quan niệm bản đồ số như là các lớp đối tượng đồ họa thì cửa sổ dữ liệu là thông tin của vật thể trên bản đồ. Nếu ta quan niệm bản đồ số như là một cơ sở dữ liệu thì các đối tượng đồ họa trên một lớp bản đồ là một “cột” được gọi là “cột đối tượng” (object column hay obj column),vì cột đó không hiển thị được trong cửa sổ dữ liệu nên được hiển thị riêng trong cửa sổ bản đồ. Vì Mapinfo quan niệm bản đồ số như một cơ sở dữ liệu với các đối tượng trong cửa sổ bản đồ được coi như một “ cột” nên một bản đồ cũng được gọi là một bảng (table). Mapinfo sử dụng thuật ngữ này để chỉ cả dữ liệu lẫn đồ họa(“cột” đối tượng) trong một bản đồ số. Một bảng của Mapinfo có thể không có “cột” đối tượng. Lúc đó chúng hoàn toàn giống như một cơ sở dữ liệu bình thường, kiểu dữ liệu của Excel hay Access. Cửa sổ dữ liệu có thể là dữ liệu nguyên thủy của Mapinfo (native) hay dữ liệu của các định dạng khác (như Excel, Access,...) nhưng được đăng ký vào Mapinfo. Những tính chất liên quan đến đồ họa của bản đồ số được xử lý trong cửa sổ bản đồ. Những thông tin liên quan đến dữ liệu (tên,dân số,thuộc tính,đặc điểm,...) được xử lý trong các trường của cửa sổ dữ liệu. Những thông tin về dữ liệu này có thể được đưa lên bản đồ bằng một số lệnh khác nhau để minh họa làm rõ bản đồ lúc trình bày bản đồ để in hoặc tiến hành phân tích như một hệ cơ sở dữ liệu bình thường và kết quả phân tích cũng có thể được phản ánh trên cửa sổ bản đồ. Ngược lại một số thông tin trên bản đồ có thể được cập nhật vào dữ liệu bằng một số lệnh. Tùy nhu cầu của người dùng có thể mở cửa sổ bản đồ hay cửa sổ dữ liệu hoặc mở cả hai. Ngoài ra còn một số loại cửa sổ khác nữa trong Mapinfo. 2.1.1.3 Giao diện Mapinfo Khi khởi động Mapinfo trên màn hình có các thành phần chính sau: Menu chính : gồm các menu lệnh chính của Mapinfo là File,Edit,Tool, Object, Query, Table, Options,Map/Browse (hay một menu khác, tùy vào cửa sổ nào đang được kích hoạt), Window, Help. Thanh công cụ: Có 3 thanh công cụ chính là Standard, Main, Drawing Thanh công cụ Standard gồm các lệnh thường được sử dụng trên các menu chính. Thanh công cụ Main gồm 23 nút lệnh liên quan đến các thành phần chính của một bản đồ số như lệnh chọn, chỉnh thiết lập cửa sổ bản đồ, biểu đồ/đồ thị, kiểm soát lớp,... Thanh công cụ Drawing bao gồm các nút lệnh liên quan đến việc vẽ và chỉnh sửa phần đồ họa của bản đồ. Ngoài ra nếu còn có thanh công cụ DBMS.Đây là thanh công cụ cho phép liên kết và thao tác dữ liệu của các hệ dữ liệu khác nhau như Access, SQL Server,... Dưới cùng cửa sổ Mapinfo là thanh trạng thái (Status Bar). Thanh này cho biết thông tin cũng như tình trạng của cửa sổ đang được kích hoạt. Menu chính Cửa sổ chính của Mapinfo Cửa sổ Dữ liệu Cửa sổ Bản đồ Thanh công cụ Main Thanh công cụ Drawing Thanh công cụ Standard Thanh trạng thái Hình 2.2: Giao diện Mapinfo Ta mở một bản đồ là bản đồ Việt Nam. Bảng này có tên là vietnam. Cách mở như sau : Khới động Mapinfo, cửa sổ Quick Start hiện ra. Chọn Open a Table > Open, vào thư mục chứa tập tin vietnam.tab rồi chọn nó và tiếp chọn Open. Ta sẽ thấy cửa sổ bản đồ được mở ra. Để thấy cửa sổ dữ liệu ta chọn Window > New Browser Window, cửa sổ dữ liệu của bản đồ vietnam được mở ra (Hình 2.2). Ta có thể mở nhiều cửa sổ khác nhau cùng một lúc trong Mapinfo. Tuy nhiên vào một thời điểm chỉ có một cửa sổ được kích hoạt. Cửa sổ được kích hoạt là cửa sổ màu xanh trên thanh tiêu đề (màu mặc định, màu này có thể khác tùy thiết lập màu trên HĐH), những cửa sổ không được kích hoạt có màu xám. Ta kích hoạt một cửa sổ bản đồ bằng cách nhắp chuột vào thanh tiêu đề của cửa sổ từ menu chính chọn Window > . Những thao tác ta thực hiện chỉ tác động lên cửa sổ nào đó đang được kích hoạt. Cửa sổ kích hoạt luôn nằm trên cùng. 2.1.2 NGÔN NGỮ LẬP TRÌNH MAPBASIC 2.1.2.1 Tổng quan về Mapbasic MapBasic là ngôn ngữ lập trình trong môi trường MapInfo. MapBasic làm tăng thêm sức mạnh của MapInfo lên nhiều lần. Nó làm cho tự động hóa được MapInfo và làm cho các hệ thống GIS làm bằng MapInfo trở nên thương mại hóa. Bằng MapBasic, chúng ta có thể làm thay đổi hay làm mới hoàn toàn các thanh menu, các hộp hội thọai của MapInfo. Điều này có nghĩa là, với MapBasic, chúng ta có thể tạo ra các giao diện hết sức thuận tiện cho MapInfo. MapBasic được đánh giá cao bởi các tính năng đặc sắc của nó, như: MapBaic dễ học, vì nó được phát triển từ Basic chuẩn, và nó rất gần gũi với Visual Basic. Khả năng tự động hóa MapInfo: Nếu thao tác MapInfo bằng "tay" chúng ta tốn nhiều công sức hơn là khi dùng MapBasic để lập trình cho MapBasic điều khiển MapInfo thực hiện tự động các thao tác. Trong thực tế, nhiều công việc làm trên MapInfo không thể thực hiện nổi nếu như không có sự trợ giúp của MapBasic. Một ví dụ đơn giản, chúng ta không thể thể hiện được vệt của một luồng khói khi nó chạm đất, nếu không biết lập trình bằng MapBasic hoặc chúng ta tốn khá nhiều thời gian để vẽ một đối tượng như con đường, sông suối.... Với MapBasic chỉ trong nháy mắt bạn đã vẽ xong một đối tượng như thế. MapBasic là công cụ hữu hiệu để truy vấn dữ liệu. Chẳng hạn, các mệnh đề Select của MapBasic không những vẫn giữ nguyên sức mạnh của ngôn ngữ SQL mà còn được phát triển thêm với các đối tượng bản đồ. Các phương tiện truy vấn của MapBasic cho phép chúng ta lọc, sắp xếp, tổng hợp dữ liệu bản đồ theo các yêu cầu của chúng ta. MapBasic là một ngôn ngữ lập trình mở. MapBasic có khả năng liên kết với các phương tiện lập trình khác, có thể sử dụng DDE (Dynamic Data Exchange). Chúng ta cũng có thể sử dụng OLE Automation cùng với MapBasic. Các chương trình MapBasic có thể gọi và sử dụng các file thư viện liên kết động của Windows (các file.DLL). Các file.DLL này có thể được cung cấp thương mại bởi Windows hay do chúng ta hay ai đó viết trên các ngôn ngữ khác như C, Delphi, Visual Basic. MapBasic cho phép chúng ta tích hợp thiết kế bản đồ với sự liên kết Visual Basic hay C.delphi với các chức năng của MapInfo. Cũng như các ngôn ngữ mạnh khác chạy trên nền Windows, MapBasic cho phép thực thi các chương trình ứng dụng khác khi nó đang chạy. Và sau khi chạy xong các chương trình ứng dụng này thì nó hòan trả lại môi trường trước đó của MapInfo. Tóm lại, nếu chỉ biết MapInfo thôi thì chưa đủ. Biết MapBasic sau khi đã biết MapInfo là yêu cầu không thể thiếu với những ai làm về GIS. 2.1.2.2 Nội Dung a. Biên tập một chương trình MapBasic Nhấp New để mở cửa sổ biên tập chương trình Viết các dòng lệnh MapBasic Chon mục File -> Save để ghi file chương trình, MapBasic sẽ tự động thêm phần mở rộng cho tên file là.mb Chọn mục Project -> Compile để dịch chương trình. Chương trình đã được dịch có phần mở rộng cho tên file là.mbx b. Chạy chương trình MapBasic: Trong Mapinfo, chọn mục Run MapBasic Program. Một cửa sổ hội thoai sẽ xuất hiện để bạn chọn file mbx để chạy chương trình. Chú ý: (1)- Sau bước 2, nếu bạn Compile ngay chương trình thì MapBasic sẽ yêu cầu bạn đặt tên cho file chương trình. Nếu đã được đặt tên trước đó thì MapBasic sẽ yêu cầu bạn Save file chương trình, rồi nó mới compile cho bạn. (2)- Sau bước Save, nếu bạn chọn mục Project -> Run thì MapInfo tự động mở ra để chạy chương trình MapBasic. Vídụ: ở bước 2, bạn viết dòng lệnh MapBasic sau đây: Note "Welcome to MapBasic!" Và ghi vào file với tên: WELCOME.MB Thì sau khi file WELCOME.mb được dịch sẽ có file WELCOME.MBX Và bạn chọn file.mbx để Run là WELCOME.MBX c. Liên kết các modun để có một chương trình MapBasic dạng.mbx: Các file modun là các file MapBasic chỉ chứa một phần của chương trình, ví dụ trong nội dung của nó có Declare Sub một thủ tục nào đó có tên là A, nhưng trong nội dung của nó bạn chưa mở thủ tục A là Sub A() ... End Sub File này khi được dịch không chuyển được thành file mbx mà thàmh file mbo. Nhấp New để mở cửa sổ biên tập chương trình Trong cửa sổ Edit viết đoạn chương trìng sau: [LINK] Application=textbox.mbx Modulee=textbox.mbo Modulee=auto_lib.mbo (Giả sử bạn đã có trên đĩa 3 file textbox.mbx và textbox.mbo và auto_lib.mbo) Chọn File > Save. Với phần mở rộng là.mbP (MapBasic Project) Chọn File > Close Chọn Project > Select Project File để chọn file.mbP Chọn Project > Link Current Project để dịch file MBP này thành.mbX e. Tên file và kiểu file của MapBasic: Có các lọai tập tin sau đây: erros.doc là tập tin text, nó listing các mã lỗi của tập tin mapbasic.exe là tập tin chạy môi trường Basic mapbasic.def là tập tin include, nó chứa các mã định nghĩa chuẩn. Menu.def là tập tin include, nó chứa các mã chuẩn liên quan với menu. Icons.def là tập tin include, nó chứa các mã chuẩn liên quan với con trỏ chuột. Mapbasic.hlp là tập tin help on-line (giúp đỡ trực tuyến) Mapbasic.h là tập tin header của C/C++, có nội dung tơng tự tới nó. Mapbasic.def tập tin tương tự mapbasic.def trên, nhưng dùng cú pháp của C/C++ Mapbasic.bas là tập tin header của Visual Basic, có nội dung tương tự tới nó. Mapbasic.def tập tin tơng tự mapbasic.def trên, nhưng dùng cú pháp của Visual Basic Mapbasic65.isu tập tin cần cho uninstall MapBasic Mbres650.DLL là tập tin th viện động chứa tài nguyên gồm chuỗi và hộp thoại Milib650.DLL là phần của software, chứa các mã thực hiện được Papersize.def là tập tin include của MB, chứa các lệnh liên quan đến điều khiển in của MapBasic Errors.doc tập tin text listing các mã lỗi của MapBasic Usrinfrnb.log chứa nhật ký của quá trình cài đặt Samples là thư mục chứa các chương trình ví dụ của các file.mb và.mbp f. Cửa sổ MapBasic trong màn hình MapInfo Khi bạn nhấp Choose Options > Show MapBasic Window thì một cửa sổ MapBasic xuất hiện bên dưới màn hình MapInfo. Bạn có thể lợi dụng cửa sổ này để học hỏi về MapBasic rất nhanh. Bởi vì hầu như những thao tác của bạn với MapInfo đều tương ứng với các dòng lệnh MapBasic hiện ra ngay sau khi bạn thực hiện những thao tác đó. Đó cũng là cách để bạn viết chương trình MapBasic được nhanh hơn (bằng cách copy và paste những đoạn lệnh MapBasic hiện ra trong cửa sổ này vào chương trình MapBasic đang soạn của bạn). Cửa sổ này còn có một vài công dụng khác sẽ được trình bày ở phần sau. g. Tìm lỗi khi biên tập chương trình Nếu chương trình bạn có lỗi cú pháp thì khi compile chương trình, Mapbasic sẽ báo lỗi. Ví dụ đoạn mã lệnh sau đây có lỗi: Dim x as string For x=1 to 10 note str$(x) next End Sub và bạn ghi file chương trình với tên: first.mb. Thì khi compile chương trình, bạn sẽ bị báo lỗi: first.mb: 4: Loop control variable not numeric Nếu bạn nhấp đúp vào first.mb: 4 thì con trỏ sẽ nháy ở dòng For và báo cho bạn biết lỗi là biến điều khiển không phải kiểu numeric. Bạn cũng có thể nhấp vào Search > Goto line, rồi gõ giá trị 4 trong hộp Goto line number để tìm đến dòng có lỗi h. Một vài lệnh cơ bản Nhìn chung ngôn ngữ MapBasic tương đối giống với Visual Basic, để có thể trình bày các hàm, các câu lệnh trong MapBasic thì trong một bài báo cáo không thể trình bày hết được, chúng ta có thể tham khảo qua tài liệu Lập trình MapBasic cho Hệ thống thông tin địa lý GIS MapInfo của tác giả GS. TSKH Trần Văn Đắc. Chúng em chỉ giới thiệu một số lệnh vẽ cơ bản đã được ứng dụng trong đợt thực tập. S Lệnh vẽ điểm Create Point Create Point (x, y) [ Symbol... ] Trong đó (x, y) là tọa độ điểm cần vẽ, [Symbol... ] là ký hiệu của điểm Ví dụ: Create Point (1000000, 3000000) Symbol MakeSymbol (34, Reb, 18) 34 là kiểu ký hiệu, Red là màu ký hiệu, 18 là kích thước của ký hiệu. Lệnh vẽ đường CreateLine Create Line (x1, y1) (x2, y2) [ Pen... ] Trong đó (x1, y1) là tọa độ điểm đầu đoạn, (x2, y2) là điểm cuối của đoạn. [Pen] là kiểu đường, màu đường, độ rộng đường. Ví dụ: Create Line (73. 5, 42.6) (73. 67, 42.9) Pen MakePen(1, 2, BLACK) Ngoài ra còn có các lệnh vẽ đa giác Create Region, vẽ cung tròn Create Arc, Create Object… chúng ta có thể tham khảo phần Help của MapBasic. 2.2 XÂY DỰNG CHƯƠNG TRÌNH 2.2.1 TỔNG QUAN VỀ XÂY DỰNG CHƯƠNG TRÌNH Để xây dựng chương trình tính biến dạng xoay trong một tam giác địa động lực này trước tiên ta cần xác định các dữ liệu đầu vào và dữ liệu đầu ra. Ở đây dữ liệu đầu vào của chương trình là file số liệu là một file Excel có chứa các dữ liệu về các điểm đo tốc độ dịch chuyển trong đó tại mỗi điểm có chứa các thông số tọa độ, vận tốc dịch chuyển theo phương Bắc và Đông, sai số vận tốc dịch chuyển (Hình 3.3). Và thêm một file đầu vào nữa là file Excel chứa dữ liệu chọn tam giác (Hình 3.4), file chọn tam giác này do người sử dụng tự chọn để tính biến dạng cho những tam giác trong lưới đo một cách trực quan nhất. Trong hình 3.3 là một ví dụ về file số liệu đầu vào để tính biến dạng, file này lấy số liệu từ bảng “ Vận tốc chuyển dịch tuyệt đối của các điểm đo GPS trong khu vực nghiên cứu tính biến dạng trong tài liệu luận văn tiến sĩ “BIẾN DẠNG KIẾN TẠO HIỆN ĐẠI KHU VỰC BIỂN ĐÔNG VIỆT NAM THEO SỐ LIỆU DỊCH CHUYỂN GPS” của nghiên cứu sinh Nguyễn Văn Hướng tại Phòng Địa Động Lực – Viện Địa Chất. Trong hình 3.4 là file chọn tam giác địa động lực cho tính biến dạng, File này gồm các trường đó là tên tam giác (tên này sẽ được thể hiện tại trọng tâm của tam giác) và 3 trường là số ký hiệu của 3 đỉnh tam giác, mỗi trường là một ký hiệu cho một điểm của tam giác được chọn. Ký hiệu này là số thứ tự trong file Excel của file đầu vào cho tính toán biến dạng. Các con số ký hiệu ở 3 trường này là không được trùng nhau.Ví dụ như tại file chọn tam giác, tam giác có tên TG_01 sẽ là 3 điểm BLV1, DOHO,KUNM trong file số liệu đầu vào tạo thành. 2,4,7 là ký hiệu trong 3 trường của file chọn tam giác là số thứ tự của 3 điểm BLV1, DOHO, KUNM trong file số liệu đầu vào. Tên điểm đo Kinh độ Vỹ độ Vận tốc chuyển dịch theo hướng Đông Vận tốc chuyển dịch theo hướng Bắc Sai số Vận tốc chuyển dịch theo hướng Đông,Bắc Hình 2.3: File đầu vào theo số liệu GPS Biển Đông Tên tam giác chọn 3 đỉnh của tam giác được ký hiệu là số thứ tự của điểm đo trong file đầu vào Hình 2.4: File chọn tam giác địa động lực Để tính biến dạng xoay trong một tam giác địa động lực theo công thức (1.14) thì ta phải làm tuần tự các bước như trong mục 1.1.2.2(Chương 1). Trong xây dựng chương trình thì đầu tiên chương trình cần phải đọc hiểu được dữ liệu trong file đầu vào (Hình 2.3) và kết quả đầu ra là một file kết quả cho ta biết được giá trị biến dạng xoay và sai số của nó trong từng tam giác. Kết quả này được ghi vào một file có định dạng “.txt “. Các thuật toán sẽ được chỉ rõ ở mục 2.2.2 (Chương 2) và cách sử dụng và giao diện của chương trình được chỉ rõ tại chương 3 của đồ án. 2.2.2 THUẬT TOÁN TRONG XÂY DỰNG CHƯƠNG TRÌNH Chương trình được xây dựng sử dụng cho tính biến dạng xoay trong một tam giác địa động lực được thực hiện bằng thuật toán tổng hợp như sau (Hình 2.5) : Yes Bắt đầu Nhập dữ liệu từ file Excel Yes/No Hiển thị lưới tốc độ chuyển dịch No Hiển thị lưới điểm đo Nhập dữ liệu chọn tam giác Tính ω=12∂vx∂y-∂vy∂x Tính sai số Xuất file dữ liệu kết quả Hiển thị lưới tam giác Hiển thị ký hiệu biến dạng xoay Kết thúc Hình 2.5: Minh họa thuật toán chương trình Dưới đây là những thuật toán chi tiết trong chương trình : 2.2.2.1 Thuật toán lấy dữ liệu và hiển thị điểm lưới đo Thuật toán này có thể mô tả như sau : Trước tiên ta có một khai báo một biến có cấu trúc DI() có dạng cấu trúc tên là Diem có cách khai báo như sau: Type Diem tendiem as string x as float y as float vx as float vy as float svx as float svy as float End Type Global DI() as Diem Trong này có chứa các biến x,y,vx,vy,svx,svy có nghĩa lần lượt là các biến lưu kinh độ, vĩ độ, vận tốc dịch chuyển theo hướng Đông, vận tốc chuyển dịch theo hướng Bắc bản đồ, sai số vận tốc dịch chuyển theo hướng Đông, Bắc bản đồ.Biến DI() này sẽ lưu dữ liệu từ file Excel số liệu có chứa nhưng thông tin trên (Hình 2.3), dữ liệu được lấy lần lượt theo hàng và DI(i) với i tương ứng là số hàng lưu trên DI() cho tới khi kết thúc file số liệu thì thôi: Sub HienDiem Filename=FileOpenDlg("","","XLS","Hay nhap file so lieu cho tinh bien dang") Register Table Filename Type "XLS" Into "C:\BienDang.Tab" Dim awin as integer Dim tenlop as String awin=frontwindow() tenlop=LayerInfo(awin,1,LAYER_INFO_NAME) if tenlop"Cosmetic1" then Set Coordsys table tenlop Set Map Layer 1 Editable on else tenlop=LayerInfo(1,2,LAYER_INFO_NAME) Set Coordsys table tenlop Set Map Layer 2 Editable on End if Dim i as integer i=1 Redim DI(i) Open table "C:\BienDang.Tab" Fetch First From BienDang DI(i).tendiem = BienDang.col1 DI(i).x= BienDang.col2 DI(i).y= BienDang.col3 DI(i).vx= BienDang.col4 DI(i).vy= BienDang.col5 DI(i).svx= BienDang.col6 DI(i).svy= BienDang.col7 Do while not EOT(BienDang) DI(i).tendiem = BienDang.col1 DI(i).x= BienDang.col2 DI(i).y= BienDang.col3 DI(i).vx= BienDang.col4 DI(i).vy= BienDang.col5 DI(i).svx= BienDang.col6 DI(i).svy= BienDang.col7 i=i + 1 Redim DI(i) Fetch Next From BienDang Loop Call Thehiendiem(DI()) Close Table BienDang Alter Menu Item BienDang Enable Alter Menu Item HienDiem Disable End Sub Phía trên là dòng code khai báo của hàm có tên là Hienthi trong hàm này có dòng lệnh Call có tác dụng gọi một hàm con là Thehiendiem(D()). Hàm này có tác dụng lấy dữ liệu từ biến D() vừa đã được chứa dữ liệu từ file Excel (Hình 2.3) để hiển thị ra bản đồ của Mapinfo những thông số của dữ liệu được lấy là vị trí của điểm, tên điểm,và khi chạy hết hàm Hienthi sẽ cho ra bản đồ Mapinfo thông tin của lưới các điểm như vậy : Sub Thehiendiem(DI() as Diem) Dim i as integer Dim tl as float Dim hoi as logical tl=5/50 Dim ten as string For i=1 to (ubound(DI)-1) Create Point (DI(i).x,DI(i).y) Symbol (34,Black,5) ten = DI(i).tendiem Create text ten (DI(i).x, DI(i).y) (DI(i).x + 0.2,DI(i).y + 0.2) Font MakeFont ("Helvetica",1,12,BLUE,WHITE) Next Hoi = Ask(" Ban co muon the hien toc do dich chuyen","Co","Khong") If Hoi = True then For i=1 to (ubound(DI)-1) Call Tocdodichchuyen(DI(i).x, DI(i).y,DI(i).vx, DI(i).vy,DI(i).svx, DI(i).svy,tl) Next End If End Sub 2.2.2.2 Thuật toán hiển thị tốc độ dịch chuyển Trong phần trên tại hàm Thehiendiem(DI() as Diem) có lệnh gọi tới hàm Tocdodichchuyen(DI(i).x, DI(i).y,DI(i).vx, DI(i).vy,DI(i).svx, DI(i).svy,tl) thì đây là một hàm thể hiện tốc độ chuyển dịch của tại một điểm đo có chứa các thông số về thông tin kinh độ x, vỹ độ y, vận tốc chuyển dịch theo hướng Đông, Bắc là vx,vy và sai số vận tốc chuyển dịch theo hướng Đông, Bắc là svx,svy, tỷ lệ bản đồ tl : Sub Tocdodichchuyen(x as float,y as float,vx as float, vy as float, svx as float, svy as float,tle as float) Dim x1,y1,x2,y2,x3,y3 as float x1= x + tle*vx y1= y + tle*vy x2= x1 + svx*tle*3 y2= y1 - svy*tle*3 x3= x1 - svx*tle*3 y3= y1 + svy*tle*3 Create Ellipse (x2,y2) (x3,y3) Pen MakePen(1,2,GREEN) Brush MakeBrush(01,Black,Black) Create Line (x,y) (x1,y1) Pen MakePen(1,59,Black) End Sub 2.2.2.3 Thuật toán lấy dữ liệu chọn tam giác và hiển thị lưới tam giác Sau khi ta có phần hiển thị và lấy dữ liệu của lưới điểm đo thì công việc tiếp theo sẽ là việc chọn tam giác địa động lực. Qua phần hiển thị điểm ta có cách nhìn trực quan từ đó chọn các tam giác vào file Excel như hình 2.4. Dữ liệu tam giác này sẽ được lưu vào một biến có cấu trúc tên là Tamgiac: Type Tamgiac Tendiem as string d1 as integer d2 as integer d3 as integer End Type Trong đó biến Tendiem là kiểu chuỗi lưu tên của tam giác được chọn, d1,d2,d3 là 3 biến lưu tương ứng 3 điểm trên một tam giác được chọn. Dưới đây là code của hàm có tác dụng lấy dữ liệu tam giác trong file dữ liệu chọn tam giác: Sub Laydulieutamgiac(TGD() as Tamgiac) Filename=FileOpenDlg("","","XLS","Hay nhap file so lieu cho chon tam giac") Register Table Filename Type "XLS" Into "C:\Chontamgiac.Tab" Dim i as integer i=1 Redim TGD(i) Open table "C:\Chontamgiac.Tab" Fetch First From Chontamgiac TGD(i).Tendiem = Chontamgiac.col1 TGD(i).d1 = Chontamgiac.col2 TGD(i).d2 = Chontamgiac.col3 TGD(i).d3 = Chontamgiac.col4 Do while not EOT(Chontamgiac) TGD(i).Tendiem = Chontamgiac.col1 TGD(i).d1 = Chontamgiac.col2 TGD(i).d2 = Chontamgiac.col3 TGD(i).d3 = Chontamgiac.col4 i=i + 1 Redim TGD(i) Fetch Next From Chontamgiac Loop Close Table Chontamgiac End Sub 2.2.2.4 Thuật toán nhân ma trận bậc 4 Do Mapbasic không hỗ trợ mảng hai chiều do đó hạn chể trong việc tính toán trong ma trận.Trong chương trình này ta chỉ cần tính toán đối với các ma trận bậc 4.Do đặc điểm này mà ta sẽ khai báo một kiểu cấu trúc ma trận bậc 4 như sau : Type Matranb4 h1 as float h2 as float h3 as float h4 as float End Type Trong đó h1,h2,h3,h4 được ví như các hàng của ma trận, khai báo một biến chuỗi kiểu Matranb4 ta sẽ có được một biến dữ liệu ma trận 4 hàng và nhiều cột. Hàm có tên NhanMT(MT1() as Matranb4, MT2() as Matranb4, MTKQ() as Matranb4) có tác dụng nhân 2 ma trận bậc 4 đầu vào là MT1(), MT2() và cho ra một kết quả là MTKQ(). Code của hàm này như sau : Sub NhanMT(MT11() as Matranb4, MT22() as Matranb4, MTN() as Matranb4) Dim k1,k2,k3,k4 as float Dim i,s as integer s = ubound(MT22) Redim MTN(s) For i = 1 to ubound(MT22) k1 = MT11(1).h1 * MT22(i).h1 k2 = MT11(2).h1 * MT22(i).h2 k3 = MT11(3).h1 * MT22(i).h3 k4 = MT11(4).h1 * MT22(i).h4 MTN(i).h1 = k1+k2+k3+k4 Next For i = 1 to ubound(MT22) k1 = MT11(1).h2 * MT22(i).h1 k2 = MT11(2).h2 * MT22(i).h2 k3 = MT11(3).h2 * MT22(i).h3 k4 = MT11(4).h2 * MT22(i).h4 MTN(i).h2 = k1+k2+k3+k4 Next For i = 1 to ubound(MT22) k1 = MT11(1).h3 * MT22(i).h1 k2 = MT11(2).h3 * MT22(i).h2 k3 = MT11(3).h3 * MT22(i).h3 k4 = MT11(4).h3 * MT22(i).h4 MTN(i).h3 = k1+k2+k3+k4 Next For i = 1 to ubound(MT22) k1 = MT11(1).h4 * MT22(i).h1 k2 = MT11(2).h4 * MT22(i).h2 k3 = MT11(3).h4 * MT22(i).h3 k4 = MT11(4).h4 * MT22(i).h4 MTN(i).h4 = k1+k2+k3+k4 Next End Sub 2.2.2.5 Thuật toán chuyển vị ma trận bậc 4 Đây là một hàm có tác dụng với đầu vào là một ma trận bậc 4 sẽ cho ra kết quả là ma trận chuyển vị của nó có dạng ma trận bậc 4 theo phép chuyển đổi ma trận chuyển vị ở chương 2 phần ma trận chuyển vị. Hàm này được khai báo có tên Chuyenvi(MTBD() as Matranb4, MTCV() as Matranb4) Trong đó MTBD() là biến có kiểu cấu trúc Matranb4 là ma trận dữ liệu đầu vào, và kết quả của chuyển vị này là ma trận dữ liệu được lưu vào biến MTCV() có cấu trúc Matranb4. Hàm này có code như sau : Sub Chuyenvi(MTBD() as Matranb4, MTCV() as Matranb4) Dim a1,a2,a3,a4 as float Dim i as integer Redim MTCV(4) For i = 1 to 4 a1=MTBD(i).h1 a2=MTBD(i).h2 a3=MTBD(i).h3 a4=MTBD(i).h4 If i=1 then MTCV(1).h1 = a1 MTCV(2).h1 = a2 MTCV(3).h1 = a3 MTCV(4).h1 = a4 ElseIf i=2 then MTCV(1).h2 = a1 MTCV(2).h2 = a2 MTCV(3).h2 = a3 MTCV(4).h2 = a4 ElseIf i=3 then MTCV(1).h3 = a1 MTCV(2).h3 = a2 MTCV(3).h3 = a3 MTCV(4).h3 = a4 ElseIf i=4 then MTCV(1).h4 = a1 MTCV(2).h4 = a2 MTCV(3).h4 = a3 MTCV(4).h4 = a4 End If Next End Sub 2.2.2.6 Thuật toán tính định thức ma trận bậc 4 Để tính định thức của ma trận bậc 4 theo công thức (1.22) trước tiên ta tạo một hàm tính định thức bậc 3 rồi tính định thức bậc 4 theo như phần trình bày tại mục 1.2.3. Hàm tính định thức bậc 4 được khai báo có tên như sau: Det44(MT4() as Matranb4,det as float) và hàm con của nó tính định thức cho ma trận bậc 3 có tên được khai báo là Det33(MT3() as Matranb4,det as float). Sub Det44(MT4() as Matranb4,det as float) Dim MT33() as Matranb4 Dim dt,b1,b2,b3,k1,k2,k3,k4 as float Dim i as integer Redim MT33(3) For i=1 to 3 b1 = MT4(i+1).h2 b2 = MT4(i+1).h3 b3 = MT4(i+1).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 Next Call Det33(MT33(),dt) k1 = dt* MT4(1).h1 For i=1 to 4 If i = 1 then b1 = MT4(i).h2 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 ElseIf i>2 then b1 = MT4(i).h2 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i-1).h1 = b1 MT33(i-1).h2 = b2 MT33(i-1).h3 = b3 End If Next Call Det33(MT33(),dt) k2 = dt* MT4(2).h1 For i=1 to 4 If i=1 or i=2 then b1 = MT4(i).h2 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 ElseIf i>3 then b1 = MT4(i).h2 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i-1).h1 = b1 MT33(i-1).h2 = b2 MT33(i-1).h3 = b3 End If Next Call Det33(MT33(),dt) k3 = dt* MT4(3).h1 For i=1 to 3 b1 = MT4(i).h2 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 Next Call Det33(MT33(),dt) k4 = dt* MT4(4).h1 det = k1 - k2 + k3 -k4 End Sub '....................................................................... Sub Det33(MT3() as Matranb4,det as float) Dim a1,a2,a3,a4,a5,a6 as float a1= MT3(1).h1 * MT3(2).h2 * MT3(3).h3 a2= MT3(1).h1 * MT3(3).h2 * MT3(2).h3 a3= MT3(2).h1 * MT3(1).h2 * MT3(3).h3 a4= MT3(2).h1 * MT3(3).h2 * MT3(1).h3 a5= MT3(3).h1 * MT3(1).h2 * MT3(2).h3 a6= MT3(3).h1 * MT3(2).h2 * MT3(1).h3 det = a1 - a2 - a3 + a4 + a5 -a6 End Sub Trong đó hàm Det33 xử lý tính định thức ma trận đầu vào là MT3() cho kết quả định thức của ma trận này là det. Hàm Det44 sẽ tính định thức cho ma trận đầu vào MT4() và kết quả là det. 2.2.2.7 Thuật toán tính ma trận nghịch đảo bậc 4 Do việc Mapbasic không hỗ trợ mảng 2 chiều do vậy việc tính ma trận nghịch đảo tương đối dài dòng. Hàm có tên được khai báo là Ngichdao(MT4() as Matranb4, MTND() as Matranb4) có tác dụng tính ma trận nghịch đảo của ma trận đầu vào được lưu tại biến tên MT4() và kết quả của nó được lưu tại biến MTND(), cả hai biến này đều có dạng biến cấu trúc của Matranb4. Cách thức tính toán theo phần lý thuyết tính ma trận nghịch đảo tại chương 1. Dưới đây là code của hàm tính ma trận nghịch đảo bậc 4 : Sub Ngichdao(MT4() as Matranb4, MTND() as Matranb4) Dim MT33(),ND() as Matranb4 Dim k,dt,b1,b2,b3 as float Dim i as integer Redim MT33(3) Redim MT4(4) Redim ND(4) Redim MTND(4) '1111111111111111111111111111111111111111111111 For i=1 to 3 b1 = MT4(i+1).h2 b2 = MT4(i+1).h3 b3 = MT4(i+1).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 Next Call Det33(MT33(),dt) k = dt ND(1).h1 = k For i=1 to 4 If i = 1 then b1 = MT4(i).h2 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 ElseIf i>2 then b1 = MT4(i).h2 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i-1).h1 = b1 MT33(i-1).h2 = b2 MT33(i-1).h3 = b3 End If Next Call Det33(MT33(),dt) k = dt ND(2).h1 = -k For i=1 to 4 If i=1 or i=2 then b1 = MT4(i).h2 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 ElseIf i>3 then b1 = MT4(i).h2 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i-1).h1 = b1 MT33(i-1).h2 = b2 MT33(i-1).h3 = b3 End If Next Call Det33(MT33(),dt) k = dt ND(3).h1 = k For i=1 to 3 b1 = MT4(i).h2 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 Next Call Det33(MT33(),dt) k = dt ND(4).h1= -k '222222222222222222222222222222222222222222 For i=1 to 3 b1 = MT4(i+1).h1 b2 = MT4(i+1).h3 b3 = MT4(i+1).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 Next Call Det33(MT33(),dt) k = dt ND(1).h2 = -k For i=1 to 4 If i = 1 then b1 = MT4(i).h1 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 ElseIf i>2 then b1 = MT4(i).h1 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i-1).h1 = b1 MT33(i-1).h2 = b2 MT33(i-1).h3 = b3 End If Next Call Det33(MT33(),dt) k = dt ND(2).h2 = k For i=1 to 4 If i=1 or i=2 then b1 = MT4(i).h1 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 ElseIf i>3 then b1 = MT4(i).h1 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i-1).h1 = b1 MT33(i-1).h2 = b2 MT33(i-1).h3 = b3 End If Next Call Det33(MT33(),dt) k = dt ND(3).h2 = -k For i=1 to 3 b1 = MT4(i).h1 b2 = MT4(i).h3 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 Next Call Det33(MT33(),dt) k = dt ND(4).h2= k '33333333333333333333333333333333333333 For i=1 to 3 b1 = MT4(i+1).h1 b2 = MT4(i+1).h2 b3 = MT4(i+1).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 Next Call Det33(MT33(),dt) k = dt ND(1).h3 = k For i=1 to 4 If i = 1 then b1 = MT4(i).h1 b2 = MT4(i).h2 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 ElseIf i>2 then b1 = MT4(i).h1 b2 = MT4(i).h2 b3 = MT4(i).h4 MT33(i-1).h1 = b1 MT33(i-1).h2 = b2 MT33(i-1).h3 = b3 End If Next Call Det33(MT33(),dt) k = dt ND(2).h3 = -k For i=1 to 4 If i=1 or i=2 then b1 = MT4(i).h1 b2 = MT4(i).h2 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 ElseIf i>3 then b1 = MT4(i).h1 b2 = MT4(i).h2 b3 = MT4(i).h4 MT33(i-1).h1 = b1 MT33(i-1).h2 = b2 MT33(i-1).h3 = b3 End If Next Call Det33(MT33(),dt) k = dt ND(3).h3 = k For i=1 to 3 b1 = MT4(i).h1 b2 = MT4(i).h2 b3 = MT4(i).h4 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 Next Call Det33(MT33(),dt) k = dt ND(4).h3= -k '4444444444444444444444444444444444444444444 For i=1 to 3 b1 = MT4(i+1).h1 b2 = MT4(i+1).h2 b3 = MT4(i+1).h3 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 Next Call Det33(MT33(),dt) k = dt ND(1).h4 = -k For i=1 to 4 If i = 1 then b1 = MT4(i).h1 b2 = MT4(i).h2 b3 = MT4(i).h3 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 ElseIf i>2 then b1 = MT4(i).h1 b2 = MT4(i).h2 b3 = MT4(i).h3 MT33(i-1).h1 = b1 MT33(i-1).h2 = b2 MT33(i-1).h3 = b3 End If Next Call Det33(MT33(),dt) k = dt ND(2).h4 = k For i=1 to 4 If i=1 or i=2 then b1 = MT4(i).h1 b2 = MT4(i).h2 b3 = MT4(i).h3 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 ElseIf i>3 then b1 = MT4(i).h1 b2 = MT4(i).h2 b3 = MT4(i).h3 MT33(i-1).h1 = b1 MT33(i-1).h2 = b2 MT33(i-1).h3 = b3 End If Next Call Det33(MT33(),dt) k = dt ND(3).h4 = -k For i=1 to 3 b1 = MT4(i).h1 b2 = MT4(i).h2 b3 = MT4(i).h3 MT33(i).h1 = b1 MT33(i).h2 = b2 MT33(i).h3 = b3 Next Call Det33(MT33(),dt) k = dt ND(4).h4= k Dim ND2() as Matranb4 Dim det as float Call Det44(MT4(),det) Call Chuyenvi(ND(),ND2()) For i= 1 to 4 MTND(i).h1 = ND2(i).h1/det MTND(i).h2 = ND2(i).h2/det MTND(i).h3 = ND2(i).h3/det MTND(i).h4 = ND2(i).h4/det Next End Sub 2.2.2.8 Thuật toán tính và hiển thị biến dạng xoay và sai số Đây là thuật toán đòi hỏi sự tổng hợp của các thuật toán trình bày ở trên trong việc tính toán để đưa ra được kết quả là giá trị của biến dạng xoay trong một tam giác địa động lực, từ đó tính cho tất cả các tam giác trong lưới tam giác đã được chọn.Đó là để tính được giá trị biến dạng xoay ω trong một tam giác thì đầu tiên phải sử dụng hàm lấy dữ liệu từ file số liệu đầu vào, số liệu này được lưu vào biến DI() như một ma trận lưu dữ liệu. Đây là số liệu thô ban đầu gồm tất cả các dữ liệu liên quan đến số liệu đầu vào cho việc tính toán biến dạng và sai số cho biến dạng xoay. Từ số liệu thô này ta phải chuyển dữ liệu để có thể tính được ma trận F như theo công thức (1.15) là F=A-1Vij, ma trận A và Vij là 2 ma trận cần tìm, ma trận A là ma trận khoảng cách, và Vij là ma trận giá trị vận tốc đều có thể tính được theo công thức tính biến dạng trình bày ở mục 1.1.5.2, ma trận A các giá trị khoảng cách sẽ được tính bằng hàm tính khoảng cách trong Mapbasic. Và việc tính giá trị của 2 ma trận này sẽ được thực hiện theo hàm có tên ChuyenDuLieuMatran(MTDL() as Diem,VIJ() as Matranb4,A() as Matranb4,MS() as Matranb4) Trong đó có biến đầu vào là MTDL() sẽ chứa dữ liệu đầu vào ban đầu, và các biến đầu ra là :VIJ() là biến lưu giá trị của ma trận Vij, A() là biến lưu giá trị của ma trận A, MS() là ma trận lưu giá trị sai sổ được tính cho sai số vận tốc dịch chuyển.Hàm này được định nghĩa trong code của chương trình như sau : Sub ChuyenDuLieuMatran(MTDL() as Diem,VIJ() as Matranb4,A() as Matranb4,MS() as Matranb4) Redim MS(1) Redim VIJ(1) Redim A(4) VIJ(1).h1=(MTDL(1).vx - MTDL(2).vx)/1000 VIJ(1).h2=(MTDL(1).vy - MTDL(2).vy)/1000 VIJ(1).h3=(MTDL(1).vx - MTDL(3).vx)/1000 VIJ(1).h4=(MTDL(1).vy - MTDL(3).vy)/1000 MS(1).h1=abs((MTDL(1).svx - MTDL(2).svx)/1000) MS(1).h2=abs((MTDL(1).svy - MTDL(2).svy)/1000) MS(1).h3=abs((MTDL(1).svx - MTDL(3).svx)/1000) MS(1).h4=abs((MTDL(1).svy - MTDL(3).svy)/1000) Dim kx12,ky12,kx13,ky13 as float kx12 = distance(MTDL(1).x,MTDL(1).y,MTDL(2).x,MTDL(1).y,"m") ky12 = distance(MTDL(1).x,MTDL(1).y,MTDL(1).x,MTDL(2).y,"m") kx13 = distance(MTDL(1).x,MTDL(1).y,MTDL(3).x,MTDL(1).y,"m") ky13 = distance(MTDL(1).x,MTDL(1).y,MTDL(1).x,MTDL(3).y,"m") If MTDL(2).x > MTDL(1).x then kx12 = -kx12 End If If MTDL(2).y > MTDL(1).y then ky12 = -ky12 End If If MTDL(3).x > MTDL(1).x then kx13 = -kx13 End If If MTDL(3).y > MTDL(1).y then ky13 = -ky13 End If A(1).h1 = kx12 A(2).h1 = ky12 A(3).h2 = kx12 A(4).h2 = ky12 A(1).h3 = kx13 A(2).h3 = ky13 A(3).h4 = kx13 A(4).h4 = ky13 End Sub Sau khi tìm được ma trận A và Vij phục vụ cho việc tìm ma trận F thì ta sẽ áp dụng thuật toán tính nghịch đảo của ma trận A và thuật toán nhân 2 ma trận để tính F theo công thức (1.15). Tìm được ma trận F từ đó ta tính được biến dạng xoay theo công thức (1.14) là ω=12∂vx∂y-∂vy∂x, Sử dụng hàm lấy dữ liệu chọn tam giác ta sẽ tính được các giá trị ω trong các tam giác trong lưới được chọn. Việc này được thực hiện tuần tự trong từng tam giác một kèm theo cách tính sai số của trong từng tam giác, Tính các giá trị biến dạng xoay rồi ra cũng sẽ thể hiện lưới tam giác ra bản đồ của Mapinfo bằng hàm có tên Biendangxoay(x as float, y as float, w as float) trong code của chương trình Hàm này có tác dụng nhận các biến đầu vào là kinh độ x, vỹ độ y, giá trị biến dạng xoay w để thể hiện biến dạng xoay ra bản đồ mapinfo giống trong hình 1.2((c),(d)). Hàm này sẽ xét các điều kiện giá trị biến dạng xoay w là lớn hay bé, ngược chiều hay cùng chiều kim đồng hồ mà có những góc xoay hay kiểu xoay khác nhau được thể hiện trên bản đồ Mapinfo theo tỉ lệ của bản đồ.Hàm này được định nghĩa trong code của chương trình như sau : Sub Biendangxoay(x as float, y as float, w as float) Dim tle,sw as float tle = 500 sw = w*(10^9) Dim y1,x2,y2 as float y1=y + 1 Dim o,ob,ob1,ob2,ob3,oo as object o = CreatePoint(x,y) ob1 = CreateLine(x,y,x,y1) ob2 = RotateAtPoint(ob1,-5,Centroid(o)) x2 = ObjectGeography(ob2, OBJ_GEO_LINEENDX) y2 = ObjectGeography(ob2, OBJ_GEO_LINEENDY) ob3 = CreateLine(x,y1,x2,y2) ob = combine(ob1,ob2) ob = combine(ob,ob3) oo= RotateAtPoint(ob,-5,Centroid(o)) If sw>0 then If sw <= 1 then Insert Into Lonlat(obj) values (ob) ElseIf sw >1 and sw <=3 then oo= combine(ob,oo) Insert Into Lonlat(obj) values (oo) ElseIf sw>3 and sw <=5 then oo = combine (ob,oo) ob1 = RotateAtPoint(ob,-10,Centroid(o)) oo = combine (ob,oo) Insert Into Lonlat(obj) values (oo) Else oo = combine (ob,oo) ob1 = RotateAtPoint(ob,-30,Centroid(o)) oo = combine (ob,oo) Insert Into Lonlat(obj) values (oo) End If Else oo= RotateAtPoint(ob,5,Centroid(o)) If sw >= -1 then Insert Into Lonlat(obj) values (oo) ElseIf sw >1 and sw <=3 then oo= combine(ob,oo) Insert Into Lonlat(obj) values (oo) ElseIf sw=-5 then oo = combine (ob,oo) ob1 = RotateAtPoint(ob,10,Centroid(o)) oo = combine (ob,oo) Insert Into Lonlat(obj) values (oo) Else oo = combine (ob,oo) ob1 = RotateAtPoint(ob,30,Centroid(o)) oo = combine (ob1,oo) Insert Into Lonlat(obj) values (oo) End If End if End Sub Tiếp theo sẽ là phần ghi dữ liệu đó là hàm ghi file dữ liệu Print File trong Mapbasic và việc này se được ghi tuần tự khi mỗi giá trị biến dạng xoay và sai số được tính trong một tam giác.File này sẽ được lưu vào đường dẫn chứa file chọn tam giác. Công việc tính toán giá trị biến dạng xoay của lưới tam giác trong vùng nghiên cứu, việc in file kết quả, xuất hiển thị ra bản đồ sẽ được xử lý bằng hàm có tên BienDang trong code của chương trình. Hàm này được định nghĩa như sau: Sub BienDang Dim x,y,vx,vy,svx,svy,ex,ey,exy,e1,e2,w,g as float Dim i as integer Call Laydulieutamgiac(TG()) Dim DDI() as Diem ReDim DDI(3) Dim d as integer Dim tle as float tle = tile/10 Dim se1,se2,sw,sg,sex,sey,sexy,xg,yg as float Dim V(),A(),NA(),MTN(),MS(),MTN1() as Matranb4 Dim st2,st3,st4,st6,st7,st8 as string*15 Dim st,st1,st5,st9 as string*8 Open File "ketqua.txt" for Output as #1 Print #1, "TenDagiac"+" "+" LON "+" " + " LAT "+" " + "BienDangXoay_W"+" "+ " SaiSo_W " Print #1, " Name "+" "+ " (Độ) "+" " + " (Độ) "+" " + " (Radian/Năm) "+" "+ " (Radian/Năm) " For i=1 to (ubound(TG)-1) d = TG(i).d1 DDI(1).tendiem = DI(d).tendiem DDI(1).x=DI(d).x DDI(1).y=DI(d).y DDI(1).vx=DI(d).vx DDI(1).vy=DI(d).vy DDI(1).svx=DI(d).svx DDI(1).svy=DI(d).svy d = TG(i).d2 DDI(2).tendiem = DI(d).tendiem DDI(2).x=DI(d).x DDI(2).y=DI(d).y DDI(2).vx=DI(d).vx DDI(2).vy=DI(d).vy DDI(2).svx=DI(d).svx DDI(2).svy=DI(d).svy d = TG(i).d3 DDI(3).tendiem = DI(d).tendiem DDI(3).x=DI(d).x DDI(3).y=DI(d).y DDI(3).vx=DI(d).vx DDI(3).vy=DI(d).vy DDI(3).svx=DI(d).svx DDI(3).svy=DI(d).svy Call Trongtam(DDI(),xg,yg) Create text TG(i).tendiem (xg, yg) (xg + 0.2,yg + 0.2) Font MakeFont ("Helvetica",1,12,Black,Green) Call ChuyenDuLieuMatran(DDI(), V(),A(),MS()) Call Ngichdao(A(),NA()) Call NhanMT(NA(),V(), MTN()) Call NhanMT(NA(),MS(),MTN1()) ex=MTN(1).h1 ey=MTN(1).h4 exy = (MTN(1).h2 + MTN(1).h3)/2 e1= (ex+ey)/2 + sqr(exy^2 + ((ex-ey)/2)^2) e2= (ex+ey)/2 - sqr(exy^2 + ((ex-ey)/2)^2) w= (MTN(1).h2 - MTN(1).h3)/2 g=atn(2*exy/(ey-ex))/2 g=g*(180/3.141) sex=abs(MTN1(1).h1) sey=abs(MTN1(1).h4) sexy = (abs(MTN1(1).h2) + abs(MTN1(1).h3))/2 se1= (sex+sey)/2 + sqr(sexy^2 + ((sex+sey)/2)^2) se2= abs((sex+sey)/2 - sqr(sexy^2 + (abs(sex-sey)/2)^2)) sw= abs(abs(MTN1(1).h2) - abs(MTN1(1).h3))/2 sg=atn(2*sexy/abs(sey-sex))/2 sg=sg*(180/3.141) st= Str$(xg) st1= Str$(yg) st2= Str$(e1) st3= Str$(e2) st4= Str$(w) st5= Str$(g) st6= Str$(se1) st7= Str$(se2) st8= Str$(sw) st9= Str$(sg) Print #1, TG(i).Tendiem + " "+ st + " " + st1 + " " +" " + st4 +" " + st8 g = -g ' Call Vemuiten(xg,yg,e1,e2,g,tle) Call Biendangxoay(xg,yg,w) Next Close File #1 Alter Menu Item BienDang Disable Alter Menu Item HienDiem Enable End Sub Ngoài ra còn một số hàm nhỏ khác phục vụ cho các hàm chính được trình bày ở trên. Các hàm này được chỉ rõ trong code của chương trình. 2.2.2 ĐÁNH GIÁ VỀ THUẬT TOÁN TRONG CHƯƠNG TRÌNH Cũng do Mapbasic không hỗ trợ mảng 2 chiều do đó thuật toán còn khá dài và hạn chế tính đa dạng của nó trong tính toán (như trong ngôn ngữ lập trình C có hỗ trợ mảng 2 chiều nên việc tính ma trận trong thuật toán rất ngắn gọn mà sử dụng cho việc tính cho các ma trận lớn nhiều bậc khác nhau rất linh hoạt mà ở đây chỉ hạn chế trong tính ma trận bậc 4). Từ đó mà những thuật toán trong chương trình tương đối khó hiểu và dài dòng. Tuy nhiên nó cũng đáp ứng được những yêu cầu đề ra để tính toán thể hiện các số liệu biến dạng xoay trong lưới tam giác địa động lực của khu vực nghiên cứu. Việc phân tách các hàm xử lý cho từng vấn đề giúp người lập trình dễ dàng trong việc sửa chữa và nâng cấp. CHƯƠNG 3 : GIAO DIỆN VÀ SỬ DỤNG CHƯƠNG TRÌNH Để minh họa cho cách sử dụng chương trình em sẽ minh họa chương trình sẽ tính biến dạng xoay trong một tam giác địa động lực theo số liệu trong luận văn tiến sĩ “BIẾN DẠNG KIẾN TẠO HIỆN ĐẠI KHU VỰC BIỂN ĐÔNG VIỆT NAM THEO SỐ LIỆU DỊCH CHUYỂN GPS” của nghiên cứu sinh Nguyễn Văn Hướng tại Phòng Địa Động Lực – Viện Địa Chất mà trong luận văn này sử dụng để tính toán biến dạng. 3.1 GIAO DIỆN CHƯƠNG TRÌNH Chương trình có giao diện trong khung đỏ ở hình 3.1 Hình 3.1: Giao diện của chương trình Chương trình khi chạy lên Mapinfo nằm ở ngoài cùng của menu chính, có tên là Tinh Bien Dang (Hình 3.1), khi click chuột vào tool này nó sẽ sổ xuống là các lựa chọn : Tinh thực hiện việc chạy chương trình cho tính biến dạng, Ket Thuc C.trinh thực hiện thoát tool khỏi Mapinfo và Thoat thực hiện việc thoát tất cả cửa sổ Mapinfo. Khi lựa chọn menu Tinh (Hình 3.1) thì ở đây có 2 lựa chọn nhỏ đó là Hien Thi Diem có nhiệm vụ hiển thị các điểm hay tốc độ chuyển dịch ra cửa sổ bản đồ Mapinfo và Tinh Bien Dang thực hiện việc tính biến dạng xoay, in file dữ liệu kết quả, hiển thị lưới tam giác và biến dạng xoay trong tam giác ra cửa sổ bản đồ của Mapinfo. 3.2 SỬ DỤNG CHƯƠNG TRÌNH Để minh họa cho việc chạy chương trình ta kiểm định bằng việc chạy thử một ví dụ. Đó là tính biến dạng xoay cho khu vực biển Đông theo ssố liệu GPS trong đề tài “BIẾN DẠNG KIẾN TẠO HIỆN ĐẠI KHU VỰC BIỂN ĐÔNG VIỆT NAM THEO SỐ LIỆU DỊCH CHUYỂN GPS” của nghiên cứu sinh Nguyễn Văn Hướng tại Phòng Địa Động Lực – Viện Địa Chất. Bảng dữ liệu đầu vào gồm các số liệu như sau : STT Tên điểm Kinh độ Vỹ độ Ve Vn SVe SVn 1 STT1 114,331 11,429 23,40 -10,57 1,44 1,34 2 BLV1 107,723 20,128 30,12 -12,46 1,36 1,29 3 CDA1 106,652 8,692 21,76 -9,84 1,39 1,32 4 DOHO 106,616 17,507 26,63 -9,48 1,37 1,31 5 HOCM 106,560 10,849 22,00 -13,75 1,47 1,36 6 NTUS 103,680 1,346 27,41 -7,05 0,87 0,85 7 KUNM 102,797 25,030 30,63 -17,77 0,80 0,79 8 PIMO 121,078 14,636 -29,00 4,70 0,90 0,90 9 TNML 120,987 24,798 28,66 -9,62 0,80 0,80 10 TNSM 116,725 20,702 29,70 -12,90 0,20 0,10 11 BRG1 120,601 18,520 -48,50 9,80 0,40 0,40 12 BTS3 121,963 20,438 -38,50 27,90 0,90 0,60 13 S102 121,558 22,037 -38,80 39,30 0,30 0,30 14 S23R 120,606 22,645 -22,90 -10,60 0,10 0,10 15 LNI1 106,539 11,822 25,83 -13,47 2,50 2,19 16 JB21 110,306 25,186 33,01 -13,49 0,07 0,15 17 XIAM 118,082 24,449 32,10 -14,40 0,10 0,10 18 YONG 112,335 16,834 30,10 -11,60 0,10 0,10 19 TABA 108,891 0,863 29,83 -9,20 0,95 1,26 20 BRUN 115,031 4,966 28,66 -10,65 2,10 3,30 21 PUER 118,851 10,086 32,00 -13,60 1,00 0,70 Bảng 3.1: Số liệu tốc độ chuyển dịch theo số liệu GPS khu vực biển Đông Trong đó Ve,Vn lần lượt là giá trị tốc độ chuyển dịch theo hướng Đông và Bắc, đơn vị là mm/năm. SVe và SVn lần lượt các sai số của Ve và Vn,đơn vị là mm/năm. Ngoài bảng số liệu ta còn có dữ liệu đầu vào nữa đó là một ảnh mô hình số độ cao DEM (Hình 3.2) cho khu vực Biển Đông để làm nền cho hiển thị cửa sổ bản đồ trong Mapinfo. Hình 3.2: Mô hình số độ cao DEM khu vực Biển Đông Trước khi sử dụng chương trình đầu tiên ta tạo một file số liệu Excel (Hình 2.3) theo số liệu ở bảng 3.1 (Lưu ý: file Excel lưu định dạng của Excel 97 -2003 có đuôi.XLS) Sau khi tạo file dữ liệu đầu vào xong ta khởi động Mapinfo. Chọn Tool\Run MapBasic Program (Hình 3.3). Sau đó sẽ xuất hiện hộp thoại chọn file chạy chương trình (Hình 3.4). Ta chọn đường dẫn tới chương trình được lưu có tên biendang.MBX rồi chọn Open.Ta được giao diện như trong hình 3.5. Hình 3.3: Giao diện chạy chương trình MapBasic Hình 3.4: Hộp thoại chọn chương trình chạy Hình 3.5: Giao diện chương trình khi khởi động Trước khi chạy chương trình ta tạo một bản đồ mới có hệ tọa tọa địa lý (Lon/Lat) được minh họa bằng các hình dưới đây: Hình 3.6: Giao diện lựa chọn tạo một bản đồ mới Ta chọn File\New Table... để tạo một bản đồ mới.Sẽ xuất hiện hộp thoại lựa chọn tạo một Table mới (Hình 3.7): Hình 3.7: Hộp thoại tạo một Table mới Hộp thoại xuất hiện ta click chọn Create để tạo một Table mới.Sẽ xuất hiện hộp thoại lựa chọn (Hình 3.8). Ta chọn Add Field để tạo một trường bản đồ, Click chọn Projection để chọn hệ qui chiếu và hệ tọa độ chỏ Table. Hình 3.8: Hộp thoại lựa chọn tạo Table mới Hình 3.9: Hộp thoại lựa chọn hệ tọa độ cho Table Ở đây ở mục Category ta chọn hệ qui chiếu là hệ tọa độ địa lý Longitude /Latitude Và mục Category Member là lựa chọn hệ tọa độ ta chọn Longitude /Latitude.Sau đó ta click Ok sẽ xuất hiện hộp thoại chọn đường dẫn và lưu tên Table (Hình 3.10). Hình 3.10: Chọn đường dẫn và lưu tên Table mới Ta click chọn Save lúc này ở trong thư mục được chọn sẽ được tạo các file Lonlat.DAT,Lonlat.ID,Lonlat.Map, và Lonlat.TAB là những tệp liên quan đến table, dữ liệu, bản đồ, liên kết của Table có tên Lonlat.Lúc này cửa sổ bản đồ trong Mapinfo sẽ xuất hiện như hình 3.11. Ta khởi chạy chương trình Tinh Bien Dang bằng chọn Tinh Bien Dang\Tinh\Hien Thi Diem. Lúc này chương trình sẽ xuất hiện một hộp thoại chọn đường dẫn tới file số liệu đầu vào tính biến dạng, file này được chọn có định dạng.xls. Khi chọn được file dữ liệu đầu vào cho tính toán biến dạng ta chọn Open (Hình 3.12), Khi đó sẽ xuất hiện một hộp thoại hỏi “ Ban co muon the hien toc do dich chuyen” Chọn “ Co” để hiện thị tốc độ chuyển dịch, Chọn “ Khong” để chỉ hiển thị lưới điểm (Hình 3.13). Hình 3.11: Giao diện sau khi tạo Table mới tên Lonlat Hình 3.12: Hộp thoại chọn file số liệu đầu vào Hình 3.13: Hộp thoại lựa chọn có thể hiện tốc độ dịch chuyển hay không Nếu ta chọn “Khong” thì chương trình chạy sẽ hiển thị toàn bộ các điểm đo ra cửa sổ bản đồ của Mapinfo (Hình 3.14) gồm ký hiệu điểm, tên điểm đo và vị trí của nó trên cửa sổ bản đồ, khi phóng to hình ta nhìn rõ hơn (Hình 3.15). Hình 3.14: Lưới điểm đo khi chạy chương trình Khi phóng to một góc trên cửa sổ bản đồ này ta thấy rõ hơn tên điểm và ký hiệu của điểm đo trong cửa sổ bản đồ này (Hình 3.15). Hình 3.15: Phóng to một góc hình 3.14 Trong hình 3.15 ta quan sát được 4 điểm đo đó là LNI1, HOCM, CDA1,STT1 là 4 điểm đo có trong dữ liệu file đầu vào, được ký hiệu điểm bởi một chấm đen và chữ có màu xanh,nền trắng.Trên hộp thoại hỏi (Hình 3.13) nếu ta chọn “Co” thì trên cửa sổ bàn đồ sẽ xuất hiện các đường dịch chuyển trong lưới đo (Hình 3.16). Hình 3.16: Lưới tốc độ chuyển dịch Khi phóng to một góc của bản đồ thể hiện lưới dịch chuyển ta sẽ quan sát được rõ hơn hình dáng mũi tên thể hiện tốc độ chuyển dịch (Hình 3.17). Hình 3.17: Phóng to một góc hình 3.16 Trên hình 3.17 ta quan sát thấy tại vị trí các điểm đo có một đường mũi tên màu đen và hình elip máu xanh lục xuất hiện ở đầu mũi tên. Ở đây ta có thể thấy hình mũi tên chính là đường thể hiện tốc độ chuyển dịch tại vị trí điểm đo được thể hiện trên bản đồ. Hướng của mũi tên chính là hướng dịch chuyển của vị trí điểm đo, còn hình elip màu xanh lục thể hiện sai số tốc độ dịch chuyển tại vị trí điểm đấy. Elip và đường mũi tên đều được phóng đại theo cùng một tỷ lệ nhất định (vì thông số dịch chuyển rất bé nên khi hiển thị trên bản đồ cần phóng đại để có thể quan sát được). Để minh họa lưới dịch chuyển được quan sát thực tế ta cho thể hiện thêm bản đồ số độ cao DEM của khu vực Biển Đông lên bản đồ sẽ cho ta nhìn một cách trực quan hơn (Hình 3.18). Cách thức thêm bản đồ mô hình số độ cao vào làm nền minh họa sẽ được trình bày ở phía dưới. Hình 3.18: Lưới tốc độ dịch chuyển trên nền bản đồ độ cao khu vực biển Đông Sau khi chạy chương trình trong lựa chọn menu Hien Thi Diem, lúc này menu Tinh Bien Dang sẽ được kích hoạt đậm màu và menu Hien Thi Diem bị vô hiệu hóa và mờ đi (Hình 3.19).Để tiếp tục chạy chức năng Tinh Bien Dang ta tạo file dữ liệu chọn tam giác (Quan sát lưới điểm đo hình 3.14) để có tiếp tục (Hình 2.4).Sau khi tạo file dữ liệu chọn tam giác ta chọn menu Tinh Bien Dang để tiếp tục chạy chương trình (Hình 3.18). Hình 3.19: Menu của chương trình Khi chạy chọn Tinh Bien Dang trong Menu Tinh (Hình 2.19) Chương trình sẽ xuất hiện một hộp thoại chọn đường dẫn tới file dữ liệu chọn tam giác vừa mới được tạo (Hình 3.20). Hình 3.20: Hộp thoại chọn mở file dữ liệu chọn tam giác Ta sẽ chọn file có tên “File chon tam giac.xls” Rồi click chọn Open (Hình 3.20). Sau khi khởi chạy chương trình cửa sổ bản đồ lúc này hiển thị kết quả là một lưới tam giác có các cạnh màu đỏ được liên kết với nhau (Lưới tam giác này được chọn theo người dùng đã lưu vào file số liệu chọn tam giác(Hình 2.4)) (Hình 3.21). Tại mỗi tam giác tại vị trí trọng tâm là ký hiệu của biến dạng xoay, ký hiệu này tùy thuộc vào giá trị của biến dạng xoay mà được thể hiện khác nhau. Khi phóng to một góc bản đồ ta sẽ quan sát rõ hơn cách thể hiện biến dạng xoay trong một tam giác (Hình 3.23). Hình 3.21: Lưới tam giác thể hiện biến dạng xoay Trong đó các ký hiệu của biến dạng xoay trong hình 3.21 có ý nghĩa sau (Hình 3.22): -1 -3 -5 <-5 +1 +3 +5 >+5 Ngược chiều kim đồng hồ Đơn vị (nano radian/năm) Cùng chiều kim đồng hồ Đơn vị (nano radian/năm) Hình 3.22: Ký hiệu biến dạng xoay Hình 3.23: Phóng to một góc bản đồ của hình 3.21 Hình 3.21 thể hiện kết quả hiển thị trên cửa sổ bản đồ của Mapinfo bằng kết quả của hiển thị lưới tam giác và thể hiện tốc độ xoay.Cùng đó chương trình cũng xuất một file dữ liệu kết quả của tính toán tốc độ biến dạng xoay và sai số của nó, file này có tên mặc định là “ketqua.txt” được lưu vào đường dẫn có chứa file dữ liệu đầu vào. File dữ liệu kết quả này cho ta biết các thông số về tên tam giác được chọn, kinh độ,vĩ độ trọng tâm của tam giác đó, giá trị biến dạng xoay và sai số của nó trong tam giác được tính. File dữ liệu kết quả được minh họa ở hình 3.24 : Hình 3.24: File kết quả tính biến dạng xoay và sai số Ở hình 3.21 thể hiện lưới tam giác cùng ký hiệu thể hiện tốc độ biến dạng xoay của khu vực tính toán, vấn đề đặt ra là chèn một nền bản đồ thực tế để minh họa cho khu vực nghiên cứu.Trong phần đầu chương 3 đã có mô tả dữ liệu đầu vào gồm có một ảnh số mô hình độ cao (DEM) của khu vực Biển Đông và khu vực lân cận. Nhiệm vụ bây giờ là đưa file ảnh lên cửa sổ Mapinfo làm nền cho kết quả sau việc chạy chương trình.Dưới đây là trình tự các bước thực hiện: Sau khi chạy chương trình đã có kết quả được hiển thị trên cửa sổ bản đồ trong Mapinfo, tiếp theo ta sẽ mở một Table có chứa ảnh số mô hình độ cao đã được Register (đăng ký). Đầu tiên từ thanh menu chính của Mapinfo ta chọn File\Open (Hình 3.25) một hộp thoại sẽ xuất hiện chọn đường dẫn tới file Table có chứa dữ liệu bản đồ mô hình số độ cao, ta chọn Open (Hình 3.26) lúc này cửa sổ bản đồ hiện thị bản đồ mô hình số độ cao cùng lưới tam giác trong đó (Hình 3.27). Hình 3.25: Menu mở một Table trong Mapinfo Hình 3.26: Hộp thoại chọn đường dẫn tới Table cần mở Hình 3.27: Lưới tam giác trên bản đồ mô hình số độ cao Khi đã có một kết quả cuối cùng trên hình 3.27 ta sẽ in bản đồ với những tỷ lệ khác nhau và tùy trên những bản giấy có khổ in khác nhau tùy thuộc vào lựa chọn của người dùng, những công cụ này có hỗ trợ sẵn trên Mapinfo. CHƯƠNG 4: ĐÁNH GIÁ VÀ PHÂN TÍCH KẾT QUẢ CHƯƠNG TRÌNH ĐẠT ĐƯỢC 4.1 ƯU ĐIỂM VÀ HẠN CHẾ CỦA CHƯƠNG TRÌNH 4.1.1 ƯU ĐIỂM Chương trình chạy nhanh và ổn định trên nền của phần mềm Mapinfo Giao diện dễ nhìn, phần mềm tương đối dễ sử dụng đối với người dùng Kết quả tính toán biến dạng xoay có độ chính xác cao (phù hợp với mục tiêu tính toán đề ra) Các số liệu đầu ra mang tính thực tế cao (vừa xuất luôn ra cửa sổ dữ liệu kiểu bản đồ và file dữ liệu kết quả) 4.1.2 HẠN CHẾ Chương trình vẫn chạy dựa trên là một tool của Mapinfo, không chạy trực tiếp trên nền Window (do vậy cần phải cài đặt Mapinfo trước khi sử dụng) Vẫn chưa bắt được hết các lỗi về dữ liệu cũng như lỗi hiển thị Chương trình vẫn còn dạng sơ khai, chưa có những công cụ để lựa chọn thuộc tính trong việc nhập cũng như xuất dữ liệu Kết quả tính sai số vẫn còn chưa chuẩn xác. Trên là những hạn chế trong chương trình, tuy nhiên những hạn chế này là do hạn hẹp về thời gian cũng như kiến thức, nếu có thời gian tiếp tục nghiên cứu đề tài này em tin tưởng rằng trong tương lai gần sẽ khắc phục được những hạn chế nói trên. 4.2 PHÂN TÍCH ĐÁNH GIÁ KẾT QUẢ ĐẠT ĐƯỢC Để đánh giá kết quả đạt được của chương trình, ta so sánh kết quả của chương trình tính được với kết quả tính của bộ phần mềm QOCA, kết quả so sánh này được thể hiện trong bảng 4.1 : STT Tên tam giác Kinh độ trọng tâm (degere) Vỹ độ trọng tâm (degere) Biến dạng xoay tính theo chương trình (radian/năm) Biến dạng xoay tính theo QOCA (radian/năm) 1 TG_01 105.712 20.8883 4.53437e-009 4.53e-09 2 TG_02 106.942 23.448 -9.18381e-010 -1.01e-09 3 TG_03 110.121 20.716 1.7459e-009 1.77 e-09 4 TG_04 113.122 20.9073 1.60446e-009 1.61 e-09 5 TG_05 115.038 23.4457 3.71338e-009 3.71 e-09 6 TG_06 108.891 18.1563 6.90789e-009 6.88 e-09 7 TG_07 111.094 15.2567 8.76603e-009 8.97 e-09 8 TG_08 114.464 16.3217 4.53523e-009 5.55 e-09 9 TG_09 109.162 13.586 -1.21725e-009 -1.18 e-09 10 TG_10 109.174 10.6477 4.36526e-009 1.23 e-09 11 TG_11 108.221 7.15567 -4.71115e-009 -4.81 e-09 12 TG_12 108.967 4.546 -1.77868e-009 -1.81 e-09 13 TG_13 112.751 5.75267 -2.45351e-009 -2.49 e-09 14 TG_14 116.071 8.827 3.363e-010 2.83 e-10 15 TG_15 118.087 12.0503 -5.83877e-008 -5.85 e-08 16 TG_16 117.378 15.589 1.29965e-009 1.53 e-09 17 TG_17 119.468 17.9527 -6.91522e-008 -7.18 e-08 18 TG_18 119.628 20.4197 -1.19375e-008 - 19 TG_19 119.757 22.5123 2.00909e-008 - 20 TG_20 118.598 23.3163 -3.48413e-009 - Bảng 4.1: Bảng so sánh kết quả biến dạng xoay với phần mềm QOCA Nhìn vào bảng so sánh kết quả tính biến dạng xoay trong chương trình ta thấy các tam giác có số thứ tự từ 1-17 là có sự lựa chọn về tam giác địa động lực là giống nhau nên ta chỉ so sánh kết quả tính được trong những tam giác này. Kết quả tính theo phần mềm QOCA được thể hiện trong chuyên đề tiến sĩ : “BIẾN DẠNG KIẾN TẠO HIỆN ĐẠI KHU VỰC BIỂN ĐÔNG VIỆT NAM THEO SỐ LIỆU DỊCH CHUYỂN GPS” của nghiên cứu sinh Nguyễn Văn Hướng.Theo PGS.TS Phan Trọng Trịnh-Viện Địa Chất thì các kết quả này nằm trong sự chênh lệch e-10 nên có thể chấp nhận đối với chương trình. Và kết quả mang độ chính xác tương đối cao. Trừ điểm tam giác TG_10 thì độ chênh lệch là tương đối lớn (3.12e-09) tuy vậy kết quả này vẫn có thể chập nhận được bởi vẫn nằm trong phạm vi sai số. Về đánh giá sai số, do kết quả tính toán của chương trình còn khác biệt khá lớn với kết quả tính trên phần mềm QOCA do vậy em không đưa vào so sánh, tuy vậy phần tính toán sai số là phần tương đối phức tạp nên hiện tại em chưa thể hoàn thành phần tính toán sai số này. Đánh giá chung thì chương trình đã đạt được mục tiêu đề ra là tính biến dạng xoay trong một tam giác địa động lực, và kết quả tính toán của nó có thể đưa vào sử dụng trong thực tế. KẾT LUẬN VÀ KIẾN NGHỊ Chương trình theo nhận định chung đã đáp ứng được yêu cầu tính biến dạng xoay và sai số của nó trong một tam giác địa động lực. Chương trình tương đối dễ sử dụng và dễ hiểu đối với người dùng. Kết quả của nó mang độ chính xác và tin cậy cao. Tuy nhiên hạn chế về thời gian cũng như kiến thức còn hạn hẹp nên kết quả này vẫn chưa được hiệu chỉnh tuy nhiên nó cũng đáp ứng được mục đích của tính biến dạng xoay trong một tam giác địa động lực. Chương trình vẫn chưa đa dạng trong phần lựa chọn các công cụ (như việc chọn màu chữ, cỡ chữ, đường, font... vẫn để chế độ mặc định khách quan của người lập trình viên). Tuy vậy chương trình vẫn dừng lại ở tính biến dạng xoay cho một tam giác, chưa tính được đối với các đa giác lớn hơn (tứ giác, ngũ giác...) và việc chọn tam giác phải mang tính chất thủ công, chưa tự động chọn được lưới tam giác.Và tính biến dạng còn thiếu phần nội suy, đó là tại bất kỳ đâu trong lưới tính biến dạng có thể xác định được giá trị của biến dạng xoay chứ không phải chỉ ở mỗi trọng tâm tam giác tính được. Tất cả những yếu tố trên đều là những hạn chế của chương trình, tuy nhiên để khắc phục được nó cần những kiến thức chuyên sâu về ngôn ngữ lập trình Mapbasic, sử dụng phần mềm Mapinfo, kiến thức về trắc địa, địa thống kê,cơ học, toán học...và cần một thời gian tương đối dài để thục hiện. Do sự hiểu biết có hạn của mình và thời gian hạn hẹp nên em chưa thể khắc phục được những điểm hạn chế này. Nếu còn thời gian tiếp tục nghiên cứu về đề tài này em có những hướng phát triển chương trình như sau: Xây dựng chương trình trên một nền tảng riêng biệt có thể chạy trực tiếp trên Window mà không phụ thuộc vào các phần mềm khác (Mapinfo). Điều này đòi hỏi một kiến thức trắc địa thâm sâu vì nếu tính trên nền tảng riêng như vậy đòi hỏi phải tự xây dựng một hàm tính khoảng cách giữa 2 điểm bất kỳ trên trái đất và trên những hệ tọa độ chiếu khác nhau (Điều này thực hiện trên Mapinfo rất dễ dàng, đây chính là ưu điểm của nó). Chương trình xây dựng sẽ nghiên cứu tính nhiều giá trị biến dạng kiến tạo trong vỏ Trái Đất chứ không phải biến dạng xoay, như biến dạng chính, biến dạng trượt,... và nghiên cứu tính biến dạng trong một đa giác bất kỳ chứ không phải trong một tam giác. Nghiên cứu thuật toán Delaunay để có thể lựa chọn các đa giác một cách tự động mang độ chính xác cao trong lựa chọn tính toán biến dạng. Nghiên cứu phương pháp nội suy Kringing để có thể tính biến dạng tại bất kỳ vị trí nào trong lưới tính biến dạng. Và nghiên cứu các phương pháp nội suy khác để áp dụng cho từng khu vực có điều kiện khác nhau một cách hợp lý. Một vấn đề nữa cần nghiên cứu đó là hiệu chỉnh biến dạng theo tỷ lệ của tam giác địa động lực,.... Để hoàn thành được đề tài tốt nghiệp “ Nghiên cứu tính biến dạng xoay trong một tam giác địa động lực” này em xin chân thành cám ơn PGS Phan Trọng Trịnh, trưởng phòng Địa Động Lực – Viện Địa Chất, người đã hướng dẫn chỉ bảo tận tình giúp em hoàn thành đề tài tốt nghiệp của mình một cách tốt nhất. Cùng đó em cũng xin cám ơn các thầy các cô trong bộ môn Tin Học Địa Chất đã tạo điều kiện cho em hoàn thành tốt đồ án tốt nghiệp của mình, một lần nữa em xin chân thành cám ơn!

Các file đính kèm theo tài liệu này:

  • docxLuận văn- Nghiên cứu lập trình tính biến dạng xoay trong một tam giác địa động lực.docx