Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 123 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
123
Dung lượng
4,67 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT NGUYỄN VĂN LÂM NGHIÊN CỨU THUẬT TOÁN BÌNH SAI MẠNG LƯỚI CÁC ĐIỂM GIAO CẮT VÀ ỨNG DỤNG TRONG XỬ LÝ SỐ LIỆU ĐO CAO VỆ TINH TRÊN BIỂN ĐÔNG Ngành: Kỹ thuật trắc địa - đồ Mã số: 60520503 LUẬN VĂN THẠC SĨ KỸ THUẬT NGƯỜI HƯỚNG DẪN KHOA HỌC TS Nguyễn Văn Sáng HÀ NỘI - 2015 LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu riêng tơi Các số liệu kết đưa luận văn hoàn toàn trung thực Các kết nghiên cứu luận văn chưa công bố cơng trình nghiên cứu hay luận văn khác./ Hà Nội, ngày 16 tháng năm 2015 TÁC GIẢ LUẬN VĂN Nguyễn Văn Lâm MỤC LỤC Trang phụ bìa Trang DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG BIỂU DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ MỞ ĐẦU 1 Tính cấp thiết đề tài Đối tượng phạm vi nghiên cứu Mục đích đề tài Nội dung nhiệm vụ đề tài Phương pháp nghiên cứu Kết nghiên cứu đề tài Ý nghĩa khoa học thực tiễn đề tài Cấu trúc luận văn CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ ĐO CAO VỆ TINH 1.1 Khái quát chung 1.2 Các loại vệ tinh đo cao 1.3 Ứng dụng đo cao vệ tinh 32 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT BÌNH SAI MẠNG LƯỚI ĐIỂM GIAO CẮT TRONG ĐO CAO VỆ TINH 50 2.1 Khái niệm chung vết quét đo cao vệ tinh 50 2.2 Xác định vị trí chênh lệch độ cao điểm giao cắt 52 2.3 Lý thuyết bình sai mạng lưới điểm giao cắt 62 CHƯƠNG 3: THỰC NGHIỆM TÍNH TỐN 68 3.1 Giới thiệu khu vực số liệu thực nghiệm 68 3.2 Lựa chọn phương pháp xác định vị trí điểm giao cắt 69 3.3 Xây dựng chương trình bình sai điểm giao cắt 78 3.4 Tính tốn thực nghiệm 81 KẾT LUẬN VÀ KIẾN NGHỊ 89 DANH MỤC CÁC CƠNG TRÌNH CỦA TÁC GIẢ 90 TÀI LIỆU THAM KHẢO 91 PHỤ LỤC 94 DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT AGC AVISO CLS Cnes CryoSat CorSSH DOT Doris EGM EM ENVISAT ERM ERS ESA EumetSat GeoSat GFO GPS ICESat NASA NOAA MDT MSS RADS RMS SLA SSH SST SWH Automatic Gain Control Archiving, Validation and Interpretation of Satellite Oceanographic data Collecte Localisation Satellite Centre National d'Études Spatiales Cryosphere Satellite Corrected Sea Surface Height Dynamic Ocean Topography Doppler Orbitography and Radiopositioning Integrated by Satellite Earth Gravity Model ElectroMagnetic Environmental Satellite Exact Repeat Mission European Remote Sensing Satellite European Space Agency The European Organisation for the Exploitation of Meteorological Satellites Geodetic Satellite Geosat Follow-On Global Positioning System Ice, Cloud and land Elevation Satellite National Aeronautics and Space Administration National Oceanic and Atmospheric Administration Mean Dynamic Topography Mean Sea Surface Radar Altimeter Database System Root Mean Square Sea Level Anomaly Sea Surface Height Sea Surface Temperature Significant Wave Height DANH MỤC CÁC BẢNG BIỂU Bảng 1.1 Một số thông tin vệ tinh GeoSat (Nguồn: AVISO) Bảng 1.2 Các tham số quỹ đạo đặc trưng vệ tinh ERS-1 (Nguồn: AVISO) Bảng 1.3 Các tham số quỹ đạo đặc trưng vệ tinh EnviSat (Nguồn: AVISO) 19 Bảng 1.4 Các tham số quỹ đạo đặc trưng vệ tinh Saral (Nguồn: AVISO) 26 Bảng 3.1 Độ lệch tọa độ gần điểm giao cắt so với tọa độ xác 72 Bảng 3.2 Độ lệch tọa độ gần hai phương pháp so với tọa độ xác 74 DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ Hình 1.1 Xác định độ cao mặt biển công nghệ đo cao vệ tinh (Nguồn: internet) Hình 1.2 Vệ tinh GEOSAT (Nguồn: AVISO) Hình 1.3 Vệ tinh ERS-1 (Nguồn: AVISO) Hình 1.4 Quỹ đạo vệ tinh ERS-1 (Nguồn: AVISO) Hình 1.5 Vệ tinh đo cao TOPEX/POSEIDON (Nguồn: AVISO) 10 Hình 1.6 Một số thiết bị vệ tinh T/P (Nguồn: AVISO) 11 Hình 1.7 Quỹ đạo chuyển động vệ tinh T/P (Nguồn: AVISO) 13 Hình 1.8 Vệ tinh GFO (Nguồn: AVISO) 14 Hình 1.9 Vệ tinh Jason-1 thiết bị (Nguồn: AVISO) 15 Hình 1.10 Vệ tinh EnviSat (Nguồn: AVISO) 17 Hình 1.11 Một số thiết bị vệ tinh EnviSat (Nguồn: AVISO) 19 Hình 1.12 Quỹ đạo chuyển động vệ tinh EnviSat (Nguồn: AVISO) 20 Hình 1.13 Vệ tinh CRYOSAT (Nguồn: AVISO) 21 Hình 1.14 Mơ quan trắc vệ tinh CRYOSAT (Nguồn: AVISO) 22 Hình 1.15 Vệ tinh HY-2 trình thử nghiệm (Nguồn: AVISO) 23 Hình 1.16 Vệ tinh SARAL (Nguồn: AVISO) 24 Hình 1.17 Các thiết bị vệ tinh SARAL (Nguồn: AVISO) 25 Hình 1.18 Tên lửa đẩy DENTAL-2 (Nguồn: Báo Dân trí) 26 Hình 1.19 Vệ tinh SENTINEL-3 (Nguồn: AVISO) 28 Hình 1.20 Vệ tinh JASON-3 (Nguồn: AVISO) 28 Hình 1.21 Vệ tinh JASON-CS (Nguồn: AVISO) 30 Hình 1.22 Vệ tinh CFOSAT (Nguồn: AVISO) 30 Hình 1.23 Vệ tinh SWOT (Nguồn: AVISO) 31 Hình 1.24 Khả ứng dụng đo cao từ vệ tinh (Nguồn: ESA) 32 Hình 1.25 Đo sâu đáy biển ứng dụng liệu đo cao vệ tinh (Nguồn: Cnes) 33 Hình 1.26 Dị thường trọng lực địa hình bề mặt đáy biển (Nguồn: NOAA/Scripps Institution of Oceanography) 34 Hình 1.27 Bề mặt nước biển trung bình (Nguồn: CLS) 35 Hình 1.28 Dữ liệu đo cao vệ tinh dùng địa vật lý (Nguồn: Legos) 35 Hình 1.29 Đo cao vệ tinh quan trắc sóng thần (Nguồn: CEA/CLS) 36 Hình 1.30 Nghiên cứu lưu thông đại dương (Nguồn: University of Washington) 37 Hình 1.31 Hải lưu tính tốn từ số liệu đo cao vệ tinh 1992-2004 (Nguồn: AVISO)38 Hình 1.32 Nhiệt độ đại dương tính từ mơ hình Mercator (Nguồn: Mercator Ocean) 38 Hình 1.33 Mực nước biển sử dụng liệu đo cao vệ tinh (Nguồn: Mercator Ocean) 39 Hình 1.34 Mơ hình thủy triều FES99 từ liệu đo cao vệ tinh (Nguồn: Legos/CNRS) 40 Hình 1.35 Sự thay đổi mực nước biển tính từ liệu đo cao vệ tinh (Nguồn: Legos/CNRS) 40 Hình 1.36 Sự tăng mực nước biển trung bình sử dụng liệu đo cao vệ tinh (Nguồn: University of Colorado at Boulder) 41 Hình 1.37 Tốc độ di chuyển băng Nam cực từ liệu đo cao vệ tinh ERS-1 (Nguồn: Legos) 42 Hình 1.38 Xác định bề dày băng Bắc cực sử dụng liệu đo cao từ vệ tinh ERS (Nguồn: University College London/Center for Polar Observation and Modelling) 42 Hình 1.39 Xác định dự báo El Nino dựa vào số liệu vệ tinh (Nguồn: AVISO) 43 Hình 1.40 Mực nước hồ Bắc Aral (trái) hồ Nam Aral (phải) đo vệ tinh T/P năm 1992 (Nguồn: Cnes/Legos) 44 Hình 1.41 Sự thay đổi hệ số tán xạ đất (Nguồn: Legos/CNRS) 45 Hình 1.42 Mực nước sông Amazon (1993-2003) từ vệ tinh T/P tuyến 63 (ảnh trái) hình ảnh tuyến 63 vệ tinh qua Amazon Rio Negro (ảnh phải) (Nguồn: Legos) 46 Hình 1.43 Nghiên cứu vùng ven biển Aegean sử dụng số liệu vệ tinh Jason-1 46 Hình 1.44 Độ cao sóng trung bình tính tốn từ số liệu đo cao vệ tinh (Nguồn: Southampton Oceanography Center) 47 Hình 1.45 Quan trắc lượng mưa sử dụng số liệu đo cao vệ tinh khu vực gần bờ Tây Châu Phi (Nguồn: National Oceanography Center, Southampton/ Phòng thí nghiệm Appleton, Rutherford) 49 Hình 1.46 Sử dụng ảnh hồng ngoại NOAA GOES-12 kết hợp số liệu đo cao vệ tinh để quan trắc tốc độ gió, độ cao sóng dị thường độ cao mực nước biển Katrina (Nguồn: NOAA/Altimetrics LLC) 49 Hình 2.1 Mơ vết quét đo cao vệ tinh 50 Hình 2.2 Mối quan hệ SSH, N h 51 Hình 2.3 Vị trí điểm giao cắt xác 54 Hình 2.4 Xác định điểm giao cắt theo phương pháp tọa độ khơng gian 55 Hình 2.5 Xác định giao điểm hai đường thẳng 57 Hình 2.6 Xác định trực tiếp tọa độ điểm giao cắt 59 Hình 2.7 Chênh lệch độ cao điểm giao cắt 60 Hình 2.8 Quy trình xác định trực tiếp vị trí điểm giao cắt 62 Hình 2.9 Chênh lệch độ cao trước bình sai (hình trên) sau bình sai (hình dưới) điểm giao cắt số liệu đo cao từ vệ tinh Geosat (bên trái) ERS-1 (bên phải) 66 Hình 2.10 Tần suất phân bố chênh lệch độ cao điểm giao cắt sau bình sai liệu vệ tinh đo cao ERS-1 67 Hình 3.1 Biển Đơng khu vực Đơng Nam Á (Nguồn: internet) 68 Hình 3.2 Các vùng có nguy tranh chấp Biển Đơng (Nguồn: Wikipedia) 69 Hình 3.3 Giao diện chương trình “Xác định vị trí điểm giao cắt” 70 Hình 3.4 Mạng lưới điểm giao cắt chu kỳ 86 vệ tinh EnviSat 71 Hình 3.5 Giao diện chương trình “Bình sai mạng lưới điểm giao cắt xử lý số liệu đo cao vệ tinh” 78 Hình 3.6 Sơ đồ khối chương trình 79 Hình 3.7 Chênh lệch độ cao điểm giao cắt trước bình sai 85 Hình 3.8 Chênh lệch độ cao điểm giao cắt sau bình sai 85 Hình 3.9 Chênh lệch độ cao điểm giao cắt trước bình sai 86 Hình 3.10 Chênh lệch độ cao điểm giao cắt sau bình sai 86 Hình 3.11 Giá trị độ cao mặt biển trước bình sai 87 Hình 3.12 Giá trị độ cao mặt biển sau bình sai 87 If RadioButton3.Checked = True Then ReDim STuyen(Tuyen, dem), bb(Tuyen, dem), l(Tuyen, dem), g(Tuyen, dem), Xd(Tuyen) Tentuyen(Tuyen, dem), Yd(Tuyen), Zd(Tuyen), Xc(Tuyen), Yc(Tuyen), Zc(Tuyen), Rc(Tuyen) ReDim AA(3, 3), LL(3, 1), AT(3, 3), ATL(3, 1) For n = To Tuyen For k = To Sdiem(n) i = TachXau(STuyen(n, k), XCC, " ") Tentuyen(n, k) = XCC(1) bb(n, k) = Val(XCC(2)) * Math.PI / 180 l(n, k) = Val(XCC(3)) * Math.PI / 180 g(n, k) = Val(XCC(6)) Next Next For n = To Tuyen Xd(n) = Math.Cos(bb(n, 1)) * Math.Cos(l(n, 1)) : Yd(n) = Math.Cos(bb(n, 1)) * Math.Sin(l(n, 1)) : Zd(n) = Math.Sin(bb(n, 1)) Xc(n) = Math.Cos(bb(n, Sdiem(n))) * Math.Cos(l(n, Sdiem(n))) : Yc(n) = Math.Cos(bb(n, Sdiem(n))) * Math.Sin(l(n, Sdiem(n))) : Zc(n) = Math.Sin(bb(n, Sdiem(n))) Rc(n) = Math.Sqrt((Xc(n) - Xd(n)) ^ + (Yc(n) - Yd(n)) ^ + (Zc(n) - Zd(n)) ^ 2) Next i = For n = To Tuyen For k = To Tuyen If k = n Then GoTo AA(1, 1) = Xd(k) : AA(2, 1) = Yd(k) : AA(3, 1) = Zd(k) AA(1, 2) = (Xc(k) - Xd(k)) / Rc(k) : AA(2, 2) = (Yc(k) - Yd(k)) / Rc(k) : AA(3, 2) = (Zc(k) - Zd(k)) / Rc(k) AA(1, 3) = (Xc(n) - Xd(n)) / Rc(n) : AA(2, 3) = (Yc(n) - Yd(n)) / Rc(n) : AA(3, 3) = (Zc(n) - Zd(n)) / Rc(n) LL(1, 1) = Xd(n) : LL(2, 1) = Yd(n) : LL(3, 1) = Zd(n) ChuyenViMT(AA, AT) NhanMT(AT, AA, R) NhanMT(AT, LL, ATL) NGHICHDAO(R, Q) NhanMT(Q, ATL, x) b1 = Xd(n) + x(3, 1) * (Xc(k) - Xd(k)) / Rc(k) c1 = Yd(n) + x(3, 1) * (Yc(k) - Yd(k)) / Rc(k) d1 = Zd(n) + x(3, 1) * (Zc(k) - Zd(k)) / Rc(k) xx = Math.Sqrt(b1 ^ + c1 ^ + d1 ^ 2) a1 = Math.Asin(d1 / xx) If (a1 > bb(n, 1) And a1 < bb(n, Sdiem(n))) Or (a1 < bb(n, 1) And a1 > bb(n, Sdiem(n))) Or (a1 > bb(k, 1) And a1 < bb(k, Sdiem(k))) Or (a1 < bb(k, 1) And a1 > bb(k, Sdiem(k))) Then i = i + ReDim Preserve BGC1(i), LGC1(i), Daxet1(i) BGC1(i) = a1 LGC1(i) = Math.PI - Math.Asin(c1 / (xx * Math.Sqrt(1 - (d1 / xx) ^ 2))) Daxet1(i) = Ten(n) & " - " & Ten(k) End If 6: Next Next For n = To i - m = TachXau(Daxet1(n), XCC, " - ") Dong = XCC(1) : Dong1 = Mid(XCC(2), 3) For k = n + To i m = TachXau(Daxet1(k), XCC, " - ") If Mid(XCC(2), 3) = Dong And XCC(1) = Dong1 Then For dem = k To i - HoanDoiText(Daxet1(dem), Daxet1(dem + 1)) HoanDoi(BGC1(dem), BGC1(dem + 1)) HoanDoi(LGC1(dem), LGC1(dem + 1)) Next End If Next Next For n = To i - m = TachXau(Daxet1(n), XCC, " - ") Dong = XCC(1) : Dong1 = Mid(XCC(2), 3) For k = n + To i m = TachXau(Daxet1(k), XCC, " - ") If Mid(XCC(2), 3) = Dong And XCC(1) = Dong1 Then dem1 = k - GoTo End If Next Next 7: dem = For i = To dem1 m = TachXau(Daxet1(i), XCC, " - ") Dong = XCC(1) : Dong1 = Mid(XCC(2), 3) For n = To Tuyen If Ten(n) = Dong Then For k = To Sdiem(n) - If (bb(n, k) < BGC1(i) And bb(n, k + 1) > BGC1(i)) Or (bb(n, k) > BGC1(i) And bb(n, k + 1) < BGC1(i)) Then phi1 = bb(n, k) : l1 = l(n, k) : g1 = g(n, k) phi2 = bb(n, k + 1) : l2 = l(n, k + 1) : g2 = g(n, k + 1) End If Next End If If Ten(n) = Dong1 Then For k = To Sdiem(n) - If (bb(n, k) < BGC1(i) And bb(n, k + 1) > BGC1(i)) Or (bb(n, k) > BGC1(i) And bb(n, k + 1) < BGC1(i)) Then phi3 = bb(n, k) : l3 = l(n, k) : g3 = g(n, k) phi4 = bb(n, k + 1) : l4 = l(n, k + 1) : g4 = g(n, k + 1) End If Next End If Next a1 = (phi1 * (l2 - l1) - l1 * (phi2 - phi1)) / (phi2 - phi1) b1 = (phi3 * (l4 - l3) - l3 * (phi4 - phi3)) / (phi4 - phi3) c1 = (l2 - l1) / (phi2 - phi1) d1 = (l4 - l3) / (phi4 - phi3) xx = (a1 - b1) / (c1 - d1) : yy = c1 * xx - a1 delta = Math.Sqrt((xx - phi1) ^ + (yy - l1) ^ 2) If Math.Sqrt((xx - phi2) ^ + (yy - l2) ^ 2) > delta Then delta = Math.Sqrt((xx - phi2) ^ + (yy - l2) ^ 2) If Math.Sqrt((xx - phi3) ^ + (yy - l3) ^ 2) > delta Then delta = Math.Sqrt((xx phi3) ^ + (yy - l3) ^ 2) If Math.Sqrt((xx - phi4) ^ + (yy - l4) ^ 2) > delta Then delta = Math.Sqrt((xx phi4) ^ + (yy - l4) ^ 2) If delta < Val(TxtKC.Text) * Math.PI / 180 Then dem = dem + : ReDim Preserve BGC(dem), LGC(dem), Daxet(dem), GGC(dem) BGC(dem) = xx : LGC(dem) = yy : Daxet(dem) = Daxet1(i) xx = (g1 * l2 - g2 * l1) / (phi1 * l2 - phi2 * l1) yy = (g1 * phi2 - g2 * phi1) / (l1 * phi2 - l2 * phi1) a1 = xx * BGC(dem) + yy * LGC(dem) xx = (g3 * l4 - g4 * l3) / (phi3 * l4 - phi4 * l3) yy = (g3 * phi4 - g4 * phi3) / (l3 * phi4 - l4 * phi3) b1 = xx * BGC(dem) + yy * LGC(dem) GGC(dem) = a1 - b1 Label10.Text = "Đã xác định điểm giao cắt thứ: " & dem Label10.Refresh() Else GoTo End If 8: Next TxtKQ.AppendText(Space(30) & "KẾT QUẢ XÁC ĐỊNH VỊ TRÍ ĐIỂM GIAO CẮT TRONG ĐO CAO VỆ TINH" & vbCrLf) TxtKQ.AppendText(Space(30) & " BẰNG PHƯƠNG PHÁP TỌA ĐỘ KHÔNG GIAN" & vbCrLf & vbCrLf & vbCrLf) TxtKQ.AppendText(Space(48) & "TỌA ĐỘ CỦA CÁC ĐIỂM GIAO CẮT" & vbCrLf & vbCrLf) TxtKQ.AppendText(Space(48) & "Biên độ kiểm tra: " & TxtKC.Text & " (độ)" & vbCrLf & vbCrLf) TxtKQ.AppendText("*" & New String("=", 104) & "*" & vbCrLf) TxtKQ.AppendText("| Cung | Tọa độ gần | Tọa độ xác |" & vbCrLf) TxtKQ.AppendText("| giao | Độ vĩ B(độ) | Độ kinh L(độ) | Độ vĩ B(độ) | Độ kinh L(độ) | dh(mGal) |" & vbCrLf) TxtKQ.AppendText("| -+ -+ -+ -+ + |" & vbCrLf) For i = To dem m = TachXau(Daxet(i), XCC, " - ") Dong = XCC(1) : Dong1 = Mid(XCC(2), 3) For k = To dem1 If Daxet1(k) = Daxet(i) Then xx = FormatNumber(BGC1(k) * 180 / Math.PI, 5) : yy = FormatNumber(LGC1(k) * 180 / Math.PI, 5) GoTo End If Next 9: TxtKQ.AppendText("|" & RSet(Dong, 8) & " - " & LSet(Dong1, 8) & "|" & RSet(CStr(xx), 15) & "|" & RSet(CStr(yy), 19) & "|") xx = FormatNumber(BGC(i) * 180 / Math.PI, 5) : yy = FormatNumber(LGC(i) * 180 / Math.PI, 5) : a1 = FormatNumber(GGC(i), 5) TxtKQ.AppendText(RSet(CStr(xx), 15) & "|" & RSet(CStr(yy), 19) & "|" & RSet(CStr(a1), 12) & "|" & vbCrLf) Next TxtKQ.AppendText("*" & New String("=", 104) & "*" & vbCrLf & vbCrLf & vbCrLf) TxtKQ.AppendText(Space(20) & "Tổng số điểm giao cắt: " & dem & " (điểm)" & vbCrLf & vbCrLf & vbCrLf) End If ' Xac dinh truc tiep If RadioButton2.Checked = True Then Label10.Text = "Bắt đầu tìm điểm giao cắt" : Label10.Refresh() : GroupBox1.Refresh() TxtKQ.AppendText(vbCrLf & Space(35) & "THÔNG TIN VỀ CÁC ĐIỂM GIAO CẮT" & vbCrLf) TxtKQ.AppendText("*" & New String("=", 79) & "*" & vbCrLf) TxtKQ.AppendText("| Điểm | Các điểm lân cận | Điểm giao cắt |" & vbCrLf) TxtKQ.AppendText("|g.cắt | Tên | Tọa độ x(m) | Tọa độ y(m) | Tọa độ x(m) | Tọa độ y(m) |" & vbCrLf) TxtKQ.AppendText("| + + + + + -|" & vbCrLf) Label10.Text = "Đang phân tích tuyến đo cao " : Label10.Refresh() : GroupBox1.Refresh() GC = For n = To Tuyen - For i = n + To Tuyen For m = To Sdiem(n) - dem = TachXau(STuyen(n, m), XCC, " ") Ten2 = XCC(1) : xx = Val(XCC(2)) : yy = Val(XCC(3)) : g5 = Val(XCC(4)) dem1 = TachXau(STuyen(n, m + 1), XCC, " ") Ten1 = XCC(1) : xtb = Val(XCC(2)) : ytb = Val(XCC(3)) : BDo = Val(XCC(4)) a1 = xx - xtb : b1 = ytb - yy : c1 = yy * xtb - ytb * xx If Math.Sqrt(a1 ^ + b1 ^ 2) > Val(TxtKC.Text) Then GoTo 10 For k = To Sdiem(i) - dem = TachXau(STuyen(i, k), XCC, " ") Dong = XCC(1) : xmin = Val(XCC(2)) : ymin = Val(XCC(3)) : g1 = Val(XCC(4)) dem1 = TachXau(STuyen(i, k + 1), XCC, " ") Dong1 = XCC(1) : xmax = Val(XCC(2)) : ymax = Val(XCC(3)) : bdochuan = Val(XCC(4)) a2 = xmin - xmax : b2 = ymax - ymin : c2 = ymin * xmax - ymax * xmin If (Math.Sqrt(a2 ^ + b2 ^ 2) > Val(TxtKC.Text)) Or _ (Math.Sqrt(((xx + xtb) / - (xmin + xmax) / 2) ^ + ((yy + ytb) / - (ymin + ymax) / 2) ^ 2) > Val(TxtKC.Text)) Then GoTo 11 D = a1 * b2 - a2 * b1 If D Then Dx = (c2 * b1 - c1 * b2) : Dx = Dx / D Dy = (a2 * c1 - a1 * c2) : Dy = Dy / D If (Dx > ymin And Dx < ymax And Dy > xx And Dy < xtb) Or (Dx > ymin And Dx < ymax And Dy > xtb And Dy < xx) _ Or (Dx > ymax And Dx < ymin And Dy > xx And Dy < xtb) Or (Dx > ymax And Dx < ymin And Dy > xtb And Dy < xx) Then GC = GC + Label10.Text = "Đã tìm điểm giao cắt thứ: " & GC : Label10.Refresh() b4 = (g5 * xtb - BDo * xx) / (yy * xtb - ytb * xx) a4 = (g5 * ytb - BDo * yy) / (xx * ytb - yy * xtb) xtb = a4 * Dy + b4 * Dx dem = TachXau(STuyen(n, m), XCC, " ") : Dong = XCC(1) b4 = (g1 * xmax - bdochuan * xmin) / (ymin * xmax - ymax * xmin) = (g1 * ymax - bdochuan * ymin) / (xmin * ymax - ymin * xmax) ytb = a4 * Dy + b4 * Dx ReDim Preserve BGC(GC), LGC(GC), GGC(GC), Daxet(GC) BGC(GC) = Dy : LGC(GC) = Dx : GGC(GC) = xtb - ytb g2 = FormatNumber(LGC(GC), 5) : g3 = FormatNumber(BGC(GC), 5) a1 = FormatNumber(GGC(GC), 5) : xtb = FormatNumber(xtb, 5) : ytb = FormatNumber(ytb, 5) g2 = FormatNumber(Dx, 5) : g3 = FormatNumber(Dy, 5) : a1 = FormatNumber(a1, 5) TxtKQ.AppendText("|" & Space(6) & "|" & RSet(XCC(1), 12) & "|" & RSet(XCC(2), 14) & "|" & RSet(XCC(3), 14) & "|" & Space(14) & "|" & Space(14) & "|" & vbCrLf) dem = TachXau(STuyen(n, m + 1), XCC, " ") TxtKQ.AppendText("|" & LSet(CStr(gc), 6) & "|" & RSet(XCC(1), 12) & "|" & RSet(XCC(2), 14) & "|" & RSet(XCC(3), 14) & "|" & RSet(CStr(g3), 14) & "|" & RSet(CStr(g2), 14) & "|" & vbCrLf) dem = TachXau(STuyen(i, k), XCC, " ") : Dong1 = XCC(1) : Daxet(gc) = Dong & " " & Dong1 TxtKQ.AppendText("|" & Space(6) & "|" & RSet(XCC(1), 12) & "|" & RSet(XCC(2), 14) & "|" & RSet(XCC(3), 14) & "|" & Space(14) & "|" & Space(14) & "|" & vbCrLf) dem = TachXau(STuyen(i, k + 1), XCC, " ") TxtKQ.AppendText("|" & Space(6) & "|" & RSet(XCC(1), 12) & "|" & RSet(XCC(2), 14) & "|" & RSet(XCC(3), 14) & "|" & Space(14) & "|" & Space(14) & "|" & vbCrLf) TxtKQ.AppendText("| + + + + -+ |" & vbCrLf) End If End If 11: Next k 10: Next m Next i Next n TxtKQ.AppendText(vbCrLf & Space(37) & "Tổng số điểm giao cắt: " & GC & vbCrLf & vbCrLf) End If KT = Hour(Now) & "h:" & Minute(Now) & "':" & Second(Now) & """" TxtKQ.AppendText(Space(15) & "Thời điểm bắt đầu tính tốn: " & BD & vbCrLf) TxtKQ.AppendText(Space(15) & "Thời điểm kết thúc tính tốn: " & KT & vbCrLf & vbCrLf) Label10.Text = "Xác định xong điểm giao cắt" Label10.Refresh() TacGia(Me.TxtKQ, TextBox1.Text) Button3.Enabled = True PHỤ LỤC Mã lệnh “Chương trình Bình sai mạng lưới điểm giao cắt xử lý số liệu đo cao vệ tinh” 1: If OFD.FileName = "" Then MsgBox("Bạn cần nhập File số liệu", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Thiếu số liệu") Exit Sub End If Label10.Text = "Đang phân tích tuyến đo cao " : Label10.Refresh() BD = Hour(Now) & "h:" & Minute(Now) & "':" & Second(Now) & """" & " - " & DateValue(Now) : i = TxtKQ.AppendText(Space(28) & "KẾT QUẢ BÌNH SAI ĐIỂM GIAO CẮT TRONG ĐO CAO VỆ TINH" & vbCrLf & vbCrLf & vbCrLf) Label9.Text = Hour(Now) & ":" & Minute(Now) & ":" & Second(Now) & " - " & DateValue(Now) Label9.Refresh() : TxtKQ.Text = "" : T = "" FileOpen(1, OFD.FileName, OpenMode.Input) Do While Not EOF(1) Dong = LineInput(1) n = TachXau(Dong, XC, " ") If (n = 0) Then GoTo If n < Then MsgBox("Lỗi File số liệu", MsgBoxStyle.Critical, "Sai định dạng") Label10.Text = "Chọn lại số liệu đo" FileClose(1) : Exit Sub End If If n = Then Sodiem = Sodiem + If XC(1) T Then T = XC(1) Tuyen = Tuyen + ReDim Preserve Tuyendo(Tuyen), Sdiem(Tuyen), Ten(Tuyen) Tuyendo(Tuyen) = Dong Ten(Tuyen) = T Else Tuyendo(Tuyen) = Tuyendo(Tuyen) & " + " & Dong End If End If Loop FileClose(1) For n = To Tuyen Sdiem(n) = TachXau(Tuyendo(n), XC, " + ") If Sdiem(n) > dem Then dem = Sdiem(n) Next ReDim STuyen(Tuyen, dem), bb(Tuyen, dem), l(Tuyen, dem), g(Tuyen, dem), TenTuyen(Tuyen, dem), LTB(Tuyen) For n = To Tuyen i = TachXau(Tuyendo(n), XC, " + ") For k = To i m = : m = InStr(XC(k), "+") If m = Then XC(k) = XC(k) Else XC(k) = Mid(XC(k), 2) STuyen(n, k) = XC(k) Next Next ' Mo phong bac hai If RadioB2.Checked = True Then ReDim a(Tuyen), b(Tuyen), c(Tuyen) TxtKQ.AppendText(Space(23) & " KẾT QUẢ BÌNH SAI MẠNG LƯỚI ĐIỂM GIAO CẮT" & vbCrLf) TxtKQ.AppendText(Space(23) & " TRONG XỬ LÝ SỐ LIỆU ĐO CAO VỆ TINH" & vbCrLf & vbCrLf & vbCrLf) TxtKQ.AppendText(Space(23) & "CÁC HỆ SỐ MƠ PHỎNG ĐA THỨC BẬC HAI VÀ ĐỘ CHÍNH XÁC" & vbCrLf) TxtKQ.AppendText(Space(10) & "*" & New String("=", 83) & "*" & vbCrLf) TxtKQ.AppendText(Space(10) & "| Cung | Hệ số a | Hệ số b | Hệ số c | miu | ma | mb | mc |" & vbCrLf) TxtKQ.AppendText(Space(10) & "| + -+ -+ -+ + + + |" & vbCrLf) Label10.Text = "Xác định hệ số đa thức bậc hai" : Label10.Refresh() For n = To Tuyen ReDim AA(Sdiem(n), 3), AT(3, Sdiem(n)), LL(Sdiem(n), 1), V(Sdiem(n), 1), VT(1, Sdiem(n)), Ax(Sdiem(n), 1) For k = To Sdiem(n) i = TachXau(STuyen(n, k), XC, " ") TenTuyen(n, k) = XC(1) bb(n, k) = Val(XC(2)) l(n, k) = Val(XC(3)) : LTB(n) = LTB(n) + l(n, k) g(n, k) = Val(XC(6)) AA(k, 1) = bb(n, k) ^ AA(k, 2) = bb(n, k) AA(k, 3) = LL(k, 1) = -l(n, k) Next LTB(n) = LTB(n) / Sdiem(n) ChuyenViMT(AA, AT) NhanMT(AT, AA, R) NhanMT(AT, LL, AL) NGHICHDAO(R, Q) NhanMT(Q, AL, x) For i = To x(i, 1) = -x(i, 1) Next a(n) = x(1, 1) : b(n) = x(2, 1) : c(n) = x(3, 1) NhanMT(AA, x, Ax) CongMT(Ax, LL, V) ChuyenViMT(V, VT) NhanMT(VT, V, VTV) If Sdiem(n) > Then miu = Math.Sqrt(VTV(1, 1) / (Sdiem(n) - 3)) Else miu = TxtKQ.AppendText(Space(10) & "|" & LSet(Ten(n), 8) & "|") xx = FormatNumber(a(n), 4) TxtKQ.AppendText(RSet(CStr(xx), 11) & "|") xx = FormatNumber(b(n), 4) TxtKQ.AppendText(RSet(CStr(xx), 11) & "|") xx = FormatNumber(c(n), 4) TxtKQ.AppendText(RSet(CStr(xx), 13) & "|") If miu Then xx = FormatNumber(miu, 4) TxtKQ.AppendText(RSet(CStr(xx), 9) & "|") xx = FormatNumber(miu * Math.Sqrt(Q(1, 1)), 4) TxtKQ.AppendText(RSet(CStr(xx), 8) & "|") xx = FormatNumber(miu * Math.Sqrt(Q(2, 2)), 4) TxtKQ.AppendText(RSet(CStr(xx), 8) & "|") xx = FormatNumber(miu * Math.Sqrt(Q(3, 3)), 4) TxtKQ.AppendText(RSet(CStr(xx), 8) & "|" & vbCrLf) Else TxtKQ.AppendText(" - | | | |" & vbCrLf) End If Label10.Text = "Xác định hệ số cung: " & Ten(n) : Label10.Refresh() Next TxtKQ.AppendText(Space(10) & "*" & New String("=", 83) & "*" & vbCrLf & vbCrLf & vbCrLf) Label10.Text = "Bắt đầu xác định vị trí điểm giao cắt" : Label10.Refresh() : GroupBox1.Refresh() TxtKQ.AppendText(Space(35) & "TỌA ĐỘ CỦA CÁC ĐIỂM GIAO CẮT" & vbCrLf & vbCrLf) TxtKQ.AppendText(Space(37) & "Biên độ kiểm tra: " & TxtKC.Text & " (độ)" & vbCrLf & vbCrLf) TxtKQ.AppendText("*" & New String("=", 104) & "*" & vbCrLf) 2: TxtKQ.AppendText("| Cung | Tọa độ gần | Tọa độ xác |" & vbCrLf) TxtKQ.AppendText("| giao | Độ vĩ B(độ) | Độ kinh L(độ) | Độ vĩ B(độ) | Độ kinh L(độ) | dh(m) |" & vbCrLf) TxtKQ.AppendText("| -+ -+ -+ + -+ |" & vbCrLf) i = For n = To Tuyen delta = For k = To Tuyen delta = (b(k) - b(n)) ^ - * (a(k) - a(n)) * (c(k) - c(n)) If delta = Then xx = -(b(k) - b(n)) / (2 * (a(k) - a(n))) If (xx > bb(n, 1) And xx < bb(n, Sdiem(n))) Or (xx < bb(n, 1) And xx > bb(n, Sdiem(n))) Or (xx > bb(k, 1) And xx < bb(k, Sdiem(k))) Or (xx < bb(k, 1) And xx > bb(k, Sdiem(k))) Then i = i + ReDim Preserve BGC1(i), LGC1(i), Daxet1(i) BGC1(i) = xx : LGC1(i) = a(n) * xx ^ + b(n) * xx + c(n) : Daxet1(i) = Ten(n) & " - " & Ten(k) End If End If If delta < Then GoTo If delta > Then xx = (-(b(k) - b(n)) + Math.Sqrt(delta)) / (2 * (a(k) - a(n))) If (xx > bb(n, 1) And xx < bb(n, Sdiem(n))) Or (xx < bb(n, 1) And xx > bb(n, Sdiem(n))) Or (xx > bb(k, 1) And xx < bb(k, Sdiem(k))) Or (xx < bb(k, 1) And xx > bb(k, Sdiem(k))) Then i = i + ReDim Preserve BGC1(i), LGC1(i), Daxet1(i) BGC1(i) = xx : LGC1(i) = a(n) * xx ^ + b(n) * xx + c(n) : Daxet1(i) = Ten(n) & " - " & Ten(k) End If xx = (-(b(k) - b(n)) - Math.Sqrt(delta)) / (2 * (a(k) - a(n))) If (xx > bb(n, 1) And xx < bb(n, Sdiem(n))) Or (xx < bb(n, 1) And xx > bb(n, Sdiem(n))) Or (xx > bb(k, 1) And xx < bb(k, Sdiem(k))) Or (xx < bb(k, 1) And xx > bb(k, Sdiem(k))) Then i = i + ReDim Preserve BGC1(i), LGC1(i), Daxet1(i) BGC1(i) = xx : LGC1(i) = a(n) * xx ^ + b(n) * xx + c(n) : Daxet1(i) = Ten(n) & " - " & Ten(k) End If End If Next Next For n = To i - m = TachXau(Daxet1(n), XC, " - ") Dong = XC(1) : Dong1 = Mid(XC(2), 3) For k = n + To i m = TachXau(Daxet1(k), XC, " - ") If Mid(XC(2), 3) = Dong And XC(1) = Dong1 Then For dem = k To i - HoanDoiText(Daxet1(dem), Daxet1(dem + 1)) HoanDoi(BGC1(dem), BGC1(dem + 1)) HoanDoi(LGC1(dem), LGC1(dem + 1)) Next End If Next Next For n = To i - m = TachXau(Daxet1(n), XC, " - ") Dong = XC(1) : Dong1 = Mid(XC(2), 3) For k = n + To i m = TachXau(Daxet1(k), XC, " - ") If Mid(XC(2), 3) = Dong And XC(1) = Dong1 Then dem1 = k - GoTo End If 3: 4: Next Next gc = Label10.Text = "Chính xác hóa tọa độ điểm giao cắt" : Label10.Refresh() : GroupBox1.Refresh() For i = To dem1 m = TachXau(Daxet1(i), XC, " - ") Dong = XC(1) : Dong1 = Mid(XC(2), 3) For n = To Tuyen If Ten(n) = Dong Then For k = To Sdiem(n) - If (bb(n, k) < BGC1(i) And bb(n, k + 1) > BGC1(i)) Or (bb(n, k) > BGC1(i) And bb(n, k + 1) < BGC1(i)) Then phi1 = bb(n, k) : l1 = l(n, k) : g1 = g(n, k) phi2 = bb(n, k + 1) : l2 = l(n, k + 1) : g2 = g(n, k + 1) End If Next End If If Ten(n) = Dong1 Then For k = To Sdiem(n) - If (bb(n, k) < BGC1(i) And bb(n, k + 1) > BGC1(i)) Or (bb(n, k) > BGC1(i) And bb(n, k + 1) < BGC1(i)) Then phi3 = bb(n, k) : l3 = l(n, k) : g3 = g(n, k) phi4 = bb(n, k + 1) : l4 = l(n, k + 1) : g4 = g(n, k + 1) End If Next End If Next a1 = (phi1 * (l2 - l1) - l1 * (phi2 - phi1)) / (phi2 - phi1) b1 = (phi3 * (l4 - l3) - l3 * (phi4 - phi3)) / (phi4 - phi3) c1 = (l2 - l1) / (phi2 - phi1) d1 = (l4 - l3) / (phi4 - phi3) xx = (a1 - b1) / (c1 - d1) : yy = c1 * xx - a1 delta = Math.Sqrt((xx - phi1) ^ + (yy - l1) ^ 2) If Math.Sqrt((xx - phi2) ^ + (yy - l2) ^ 2) > delta Then delta = Math.Sqrt((xx - phi2) ^ + (yy - l2) ^ 2) If Math.Sqrt((xx - phi3) ^ + (yy - l3) ^ 2) > delta Then delta = Math.Sqrt((xx - phi3) ^ + (yy - l3) ^ 2) If Math.Sqrt((xx - phi4) ^ + (yy - l4) ^ 2) > delta Then delta = Math.Sqrt((xx - phi4) ^ + (yy - l4) ^ 2) If delta < Val(TxtKC.Text) Then gc = gc + : ReDim Preserve BGC(gc), LGC(gc), Daxet(gc), GGC(gc) BGC(gc) = xx : LGC(gc) = yy : Daxet(gc) = Daxet1(i) xx = (g1 * l2 - g2 * l1) / (phi1 * l2 - phi2 * l1) yy = (g1 * phi2 - g2 * phi1) / (l1 * phi2 - l2 * phi1) a1 = xx * BGC(gc) + yy * LGC(gc) xx = (g3 * l4 - g4 * l3) / (phi3 * l4 - phi4 * l3) yy = (g3 * phi4 - g4 * phi3) / (l3 * phi4 - l4 * phi3) b1 = xx * BGC(gc) + yy * LGC(gc) : GGC(gc) = a1 - b1 Label10.Text = "Đã xác định điểm giao cắt thứ: " & gc : Label10.Refresh() Else GoTo End If Next For i = To gc m = TachXau(Daxet(i), XC, " - ") Dong = XC(1) : Dong1 = Mid(XC(2), 3) For k = To dem1 If Daxet1(k) = Daxet(i) Then xx = FormatNumber(BGC1(k), 5) : yy = FormatNumber(LGC1(k), 5) GoTo End If Next 5: Label10.Text = "Đang in điểm giao cắt thứ: " & i : Label10.Refresh() TxtKQ.AppendText("|" & RSet(Dong, 8) & " - " & LSet(Dong1, 8) & "|" & RSet(CStr(xx), 15) & "|" & RSet(CStr(yy), 19) & "|") xx = FormatNumber(BGC(i), 5) : yy = FormatNumber(LGC(i), 5) : a1 = FormatNumber(GGC(i), 5) TxtKQ.AppendText(RSet(CStr(xx), 15) & "|" & RSet(CStr(yy), 19) & "|" & RSet(CStr(a1), 12) & "|" & vbCrLf) Next TxtKQ.AppendText("*" & New String("=", 104) & "*" & vbCrLf) End If ' Tim truc tiep If RadioTT.Checked = True Then Label10.Text = "Bắt đầu tìm điểm giao cắt" : Label10.Refresh() : GroupBox1.Refresh() TxtKQ.AppendText(vbCrLf & Space(35) & "THÔNG TIN VỀ CÁC ĐIỂM GIAO CẮT" & vbCrLf) TxtKQ.AppendText("*" & New String("=", 112) & "*" & vbCrLf) TxtKQ.AppendText("| Điểm | Các điểm lân cận | Điểm giao cắt | delta h |" & vbCrLf) TxtKQ.AppendText("|g.cắt | Tên | Tọa độ x(m) | Tọa độ y(m) | dh(m) | Tọa độ x(m) | Tọa độ y(m) | dh(m) | (m) |" & vbCrLf) TxtKQ.AppendText("| + + + + + -+ + + |" & vbCrLf) Label10.Text = "Đang phân tích tuyến đo cao " : Label10.Refresh() : GroupBox1.Refresh() gc = For n = To Tuyen - For i = n + To Tuyen For m = To Sdiem(n) - dem = TachXau(STuyen(n, m), XC, " ") Ten2 = XC(1) : xx = Val(XC(2)) : yy = Val(XC(3)) : g5 = Val(XC(4)) dem1 = TachXau(STuyen(n, m + 1), XC, " ") Ten1 = XC(1) : xtb = Val(XC(2)) : ytb = Val(XC(3)) : BDo = Val(XC(4)) a1 = xx - xtb : b1 = ytb - yy : c1 = yy * xtb - ytb * xx If Math.Sqrt(a1 ^ + b1 ^ 2) > Val(TxtKC.Text) Then GoTo For k = To Sdiem(i) - dem = TachXau(STuyen(i, k), XC, " ") Dong = XC(1) : xmin = Val(XC(2)) : ymin = Val(XC(3)) : g1 = Val(XC(4)) dem1 = TachXau(STuyen(i, k + 1), XC, " ") Dong1 = XC(1) : xmax = Val(XC(2)) : ymax = Val(XC(3)) : bdochuan = Val(XC(4)) a2 = xmin - xmax : b2 = ymax - ymin : c2 = ymin * xmax - ymax * xmin If (Math.Sqrt(a2 ^ + b2 ^ 2) > Val(TxtKC.Text)) Or _ (Math.Sqrt(((xx + xtb) / - (xmin + xmax) / 2) ^ + ((yy + ytb) / - (ymin + ymax) / 2) ^ 2) > Val(TxtKC.Text)) Then GoTo D = a1 * b2 - a2 * b1 If D Then Dx = (c2 * b1 - c1 * b2) : Dx = Dx / D Dy = (a2 * c1 - a1 * c2) : Dy = Dy / D If (Dx > ymin And Dx < ymax And Dy > xx And Dy < xtb) Or (Dx > ymin And Dx < ymax And Dy > xtb And Dy < xx) Or (Dx > ymax And Dx < ymin And Dy > xx And Dy < xtb) Or (Dx > ymax And Dx < ymin And Dy > xtb And Dy < xx) Then gc = gc + Label10.Text = "Đã tìm điểm giao cắt thứ: " & gc : Label10.Refresh() b4 = (g5 * xtb - BDo * xx) / (yy * xtb - ytb * xx) a4 = (g5 * ytb - BDo * yy) / (xx * ytb - yy * xtb) xtb = a4 * Dy + b4 * Dx dem = TachXau(STuyen(n, m), XC, " ") : Dong = XC(1) b4 = (g1 * xmax - bdochuan * xmin) / (ymin * xmax - ymax * xmin) a4 = (g1 * ymax - bdochuan * ymin) / (xmin * ymax - ymin * xmax) ytb = a4 * Dy + b4 * Dx ReDim Preserve BGC(gc), LGC(gc), GGC(gc), Daxet(gc) BGC(gc) = Dy : LGC(gc) = Dx : GGC(gc) = xtb - ytb g2 = FormatNumber(LGC(gc), 5) : g3 = FormatNumber(BGC(gc), 5) a1 = FormatNumber(GGC(gc), 5) : xtb = FormatNumber(xtb, 5) : ytb = FormatNumber(ytb, 5) g2 = FormatNumber(Dx, 5) : g3 = FormatNumber(Dy, 5) : a1 = FormatNumber(a1, 5) 7: 6: TxtKQ.AppendText("|" & Space(6) & "|" & RSet(XC(1), 12) & "|" & RSet(XC(2), 14) & "|" & RSet(XC(3), 14) _ & "|" & RSet(XC(4), 10) & "|" & Space(14) & "|" & Space(14) & "|" & RSet(CStr(xtb), 10) & "|" & Space(10) & "|" & vbCrLf) dem = TachXau(STuyen(n, m + 1), XC, " ") TxtKQ.AppendText("|" & LSet(CStr(gc), 6) & "|" & RSet(XC(1), 12) & "|" & RSet(XC(2), 14) & "|" & RSet(XC(3), 14) _ & "|" & RSet(XC(4), 10) & "|" & RSet(CStr(g3), 14) & "|" & RSet(CStr(g2), 14) & "|" & Space(10) & "|" & RSet(CStr(a1), 10) & "|" & vbCrLf) dem = TachXau(STuyen(i, k), XC, " ") : Dong1 = XC(1) : Daxet(gc) = Dong & " - " & Dong1 TxtKQ.AppendText("|" & Space(6) & "|" & RSet(XC(1), 12) & "|" & RSet(XC(2), 14) & "|" & RSet(XC(3), 14) _ & "|" & RSet(XC(4), 10) & "|" & Space(14) & "|" & Space(14) & "|" & RSet(CStr(ytb), 10) & "|" & Space(10) & "|" & vbCrLf) dem = TachXau(STuyen(i, k + 1), XC, " ") TxtKQ.AppendText("|" & Space(6) & "|" & RSet(XC(1), 12) & "|" & RSet(XC(2), 14) & "|" & RSet(XC(3), 14) _ & "|" & RSet(XC(4), 10) & "|" & Space(14) & "|" & Space(14) & "|" & Space(10) & "|" & Space(10) & "|" & vbCrLf) TxtKQ.AppendText("| + + + -+ + + + + |" & vbCrLf) End If End If Next k Next m Next i Next n End If TxtKQ.AppendText(vbCrLf & Space(37) & "Tổng số điểm giao cắt: " & gc & vbCrLf & vbCrLf) Label10.Text = "Xác định xong điểm giao cắt" : Label10.Refresh() ' Binh sai diem giao cat CD = TxtKQ.AppendText(vbCrLf & Space(34) & "KẾT QUẢ BÌNH SAI ĐIỂM GIAO CẮT" & vbCrLf & vbCrLf) Label10.Text = "Thành lập hệ phương trình số hiệu chỉnh " : Label10.Refresh() : GroupBox1.Refresh() For n = To Tuyen a1 = Math.Sqrt((bb(n, 1) - bb(n, Sdiem(n))) ^ + (l(n, 1) - l(n, Sdiem(n))) ^ 2) * 108 If a1 > CD Then CD = a1 Next If CD < 2000 Then hang = * Tuyen Else hang = * Tuyen End If Tong = For k = To Tuyen For i = To Sdiem(k) Tong = Tong + g(k, i) Next Next Tong = Tong / Sodiem n = Sodiem + gc ReDim AA(n, hang), x(hang, 1), AT(hang, n), Ax(hang, 1), R(hang, hang), Q(hang, hang), LL(n, 1), P(n, n), ATP(hang, n) For m = To gc dem = TachXau(Daxet(m), XC, " - ") Dong = XC(1) : Dong1 = Mid(XC(2), 3) For n = To Tuyen ' Duoi 2000km If CD < 2000 Then If Ten(n) = Dong Then For k = To Tuyen If Ten(k) = Dong1 Then If Ten(n) = Dong And Ten(k) = Dong1 Then AA(m, * n - 1) = AA(m, * n) = LGC(m) - LTB(k) AA(m, * k - 1) = -1 AA(m, * k) = -(LGC(m) - LTB(n)) LL(m, 1) = GGC(m) End If End If Next k End If End If 'tren 2000km If CD > 2000 Then If Ten(n) = Dong Then For k = To Tuyen If Ten(k) = Dong1 Then If Ten(n) = Dong And Ten(k) = Dong1 Then AA(m, * n - 2) = AA(m, * n - 1) = Math.Sin((LGC(m) - LTB(k)) * Math.PI / 180) AA(m, * n) = Math.Cos((LGC(m) - LTB(k)) * Math.PI / 180) AA(m, * k - 2) = -1 AA(m, * k - 1) = -Math.Sin((LGC(m) - LTB(n)) * Math.PI / 180) AA(m, * k) = -Math.Cos((LGC(m) - LTB(n)) * Math.PI / 180) LL(m, 1) = GGC(m) End If End If Next k End If End If Next n Next m n = gc For k = To Tuyen For i = To Sdiem(k) If TenTuyen(k, i) = Ten(k) Then n = n + AA(n, * k - 1) = AA(n, * k) = l(k, i) - LTB(k) LL(n, 1) = g(k, i) - Tong End If Next i Next k For i = To gc P(i, i) = / Next For i = + gc To Sodiem + gc P(i, i) = Next Label10.Text = "Giải phương trình chuẩn " : Label10.Refresh() : GroupBox1.Refresh() ChuyenViMT(AA, AT) NhanMT(AT, P, ATP) NhanMT(ATP, AA, R) NGHICHDAO(R, Q) NhanMT(ATP, LL, Ax) NhanMT(Q, Ax, x) ReDim Ax1(Sodiem + gc, 1), V(Sodiem + gc, 1), VT(1, Sodiem + gc), VTP(1, Sodiem + gc) NhanMT(AA, x, Ax1) TruMT(Ax1, LL, V) ChuyenViMT(V, VT) NhanMT(VT, P, VTP) NhanMT(VTP, V, VTV) miu = Math.Sqrt(VTV(1, 1) / ((Sodiem + gc) - hang)) k = ReDim Adc(Tuyen), Bdc(Tuyen), Cdc(Tuyen) If CD < 2000 Then For n = To hang Step k = k + Adc(k) = x(n, 1) Bdc(k) = x(n + 1, 1) Next Else For n = To hang Step k = k + Adc(k) = x(n, 1) Bdc(k) = x(n + 1, 1) Cdc(k) = x(n + 2, 1) Next End If TxtKQ.AppendText(vbCrLf & Space(31) & "Sai số trung phương trọng số đơn vị: " & FormatNumber(miu, 5) & vbCrLf) TxtKQ.AppendText(vbCrLf & Space(31) & "CÁC THAM SỐ ĐỘ LỆCH VÀ ĐỘ NGHIÊNG CỦA CÁC CUNG" & vbCrLf) : k = If CD < 2000 Then TxtKQ.AppendText(Space(8) & "*" & New String("=", 89) & "*" & vbCrLf) TxtKQ.AppendText(Space(8) & "| STT | Độ lệch | Độ nghiêng | STT | Độ lệch | Độ nghiêng |" & vbCrLf) TxtKQ.AppendText(Space(8) & "| Cung | a(m) | ma(m) | b(m) | mb(m) | Cung | a(m) | ma(m) | b(m) | mb(m) |" & vbCrLf) TxtKQ.AppendText(Space(8) & "| + + + + | + -+ + + |" & vbCrLf) For i = To Tuyen Step xx = FormatNumber(Adc(i), 4) : delta = FormatNumber(miu * Math.Sqrt(Q(k, k)), 3) TxtKQ.AppendText(Space(8) & "|" & LSet(Ten(i), 8) & "|" & RSet(CStr(xx), 8) & "|" & RSet(CStr(delta), 8) & "|") xx = FormatNumber(Bdc(i), 4) : delta = FormatNumber(miu * Math.Sqrt(Q(k + 1, k + 1)), 3) TxtKQ.AppendText(RSet(CStr(xx), 8) & "|" & RSet(CStr(delta), 8) & "|") If i +