1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu, xây dựng một số chức năng vẽ phổ biến trong biên tập bản đồ

98 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT NGUYỄN THÙY TRÂM NGHI£N CøU, X¢Y DùNG MéT Sè CHøC N¡NG VÏ PHæ BIÕN TRONG BI£N TËP BảN Đồ Chuyờn ngnh: K thut Trc a Mó s: 60.52.85 LUẬN VĂN THẠC SĨ KỸ THUẬT NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Trần Thùy Dương HÀ NỘI – 2013 i 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 luận văn trung thực chưa cơng bố cơng trình khác Tác giả luận văn Nguyễn Thùy Trâm ii MỤC LỤC Trang phụ bìa Trang LỜI CAM ĐOAN .i MỤC LỤC ii Danh mục hình vẽ iv MỞ ĐẦU Chương TỔNG QUAN VỀ KỸ THUẬT LẬP TRÌNH TRONG VIỆC XÂY DỰNG MỘT HỆ THỐNG BIÊN TẬP ĐỒ HỌA 1.1 Đánh giá chức vẽ AutoCad MicroStation 1.2 Tổng quan đối tượng lập trình hướng đối tượng 1.2.1 Đối tượng 1.2.2 Kiểu liệu – biến 1.2.3 Phân loại liệu 1.3 Quy trình xây dựng hệ thống đồ họa 1.3.1 Mô hình hóa đối tượng 1.3.2 Xây dựng hệ thống hiển thị 10 Chương XÂY DỰNG CÁC HÀM THUẬT TOÁN CƠ BẢN 16 2.1 Các hàm thuật toán 16 2.1.1 Hàm tính Atan2 16 2.1.2 Hàm đổi góc từ Độ phút giây sang Radian 17 2.1.3 Hàm tọa độ cực 18 2.1.4 Xác định điểm nằm phía đoạn thẳng 19 2.1.5 Kiểm tra giao hai đoạn thẳng 20 2.1.6 Điểm nằm đa giác 21 2.1.7 Xác định giao điểm hai đoạn thẳng 22 2.2 Một số hàm thuật toán ứng dụng địa 23 2.2.1 Xác định diện tích chu vi đất 23 2.2.2 Tính tâm đất 25 2.2.3 Thuộc tính đất 25 2.2.4 Cập nhật thơng tin thuộc tính đất xã, khu đo 26 Chương XÂY DỰNG MỘT SỐ CHỨC NĂNG VẼ PHỔ BIẾN .27 iii 3.1 Mô tả chức vẽ 27 3.1.1 Vẽ đối tượng điểm 27 3.1.2 Vẽ đường thẳng 27 3.1.3 Vẽ cung tròn (Arc) 29 3.1.4 Vẽ đường tròn (Circle) 36 3.2 Thiết kế giao diện chương trình 38 3.2.1 Thiết kế giao diện 38 3.2.2 Giao diện chương trình 42 KẾT LUẬN VÀ KIẾN NGHỊ 56 TÀI LIỆU THAM KHẢO 57 PHỤ LỤC 58 iv Danh mục hình vẽ Hình 2.1 Phương pháp tọa độ cực .18 Hình 2.2 Xác định điểm nằm phía đoạn thẳng 19 Hình 2.3 Kiểm tra giao hai đoạn thẳng 20 Hình 2.4 Xác định giao điểm hai đoạn thẳng 22 Hình 2.5 Tính diện tích chu vi đất .24 Hình 3.1 Vẽ đường thẳng Line …………………………………………… 27 Hình 3.2 Vẽ đối tượng Polyline …………………………………………….29 Hình 3.3 Các thuộc tính cung trịn …………………………………… 30 Hình 3.4 Vẽ cung trịn qua điểm ……………………………………….31 Hình 3.5 Vẽ cung trịn qua điểm đầu, tâm, điểm cuối ……………………32 Hình 3.6 Vẽ cung trịn qua điểm đầu, tâm góc tâm …………………33 Hình 3.7 Vẽ cung tròn qua điểm đầu, tâm chiều dài dây cung ……… 34 Hình 3.8 Vẽ cung trịn qua điểm đầu, điểm cuối, góc tâm …………… 35 Hình 3.9 Vẽ đường trịn biết tâm bán kính ………………………………36 Hình 3.10 Vẽ đường trịn biết tâm đường kính ………………………….37 Hình 3.11 Vẽ đường trịn qua điểm ……………………………………38 Hình 3.12 Cửa sổ chọn đặt tên Project ………………………………… 39 Hình 3.13 Cửa sổ chọn “Microsoft Common Dialog Control 6.0” …………39 Hình 3.14 Cửa sổ chọn kiểu font chữ cho FrmView ……………………… 40 Hình 3.15 Cửa sổ tạo menu cho chương trình ………………………………41 Hình 3.16 Giao diện chương trình ……………………………….42 v Hình 3.17 Giao diện chức Vẽ đất ……………………………… 47 Hình 3.18 Giao diện chức Vẽ ranh giới khu đo …………………… 47 Hình 3.19 Giao diện chức Thuộc tính đất ………………… 49 Hình 3.20 Giao diện chức Thuộc tính khu đo ……………….50 Hình 3.21 Giao diện chức Cập nhật biến động số đất ………… 52 Hình 3.22 Giao diện thơng tin đất ……………………………… 53 Hình 3.23 Giao diện chức cập nhật thông tin đất ……………55 MỞ ĐẦU TÍNH CẤP THIẾT CỦA ĐỀ TÀI Hiện nay, mơi trường đồ họa quan trọng cần thiết thành lập đồ số Trong thực tế sản xuất, biên tập đồ sử dụng chủ yếu hai phần mềm đồ họa AutoCad Microstation, đặc biệt phần mềm Microstation sử dụng chủ yếu biên tập đồ Thực tế, đối tượng đồ họa AutoCad, Microstation phong phú phục vụ đa cho nhiều ngành với mục đích sử dụng khác trình biên tập đồ phục vụ chun ngành có nhiều đối tượng khơng cần thiết, số đối tượng phục vụ cho đồ chun ngành khơng ứng dụng Vì việc xây dựng môi trường đồ họa tập trung chức vẽ nhất, tần suất sử dụng cao cần thiết Đề tài luận văn “Nghiên cứu, xây dựng số chức vẽ phổ biến biên tập đồ” đưa nghiên cứu nhằm đáp ứng yêu cầu Do thời gian có hạn nên nội dung luận văn tập trung nghiên cứu xây dựng đối tượng phục vụ biên tập đồ địa MỤC TIÊU NGHIÊN CỨU Đề tài đưa nhằm xây dựng số chức vẽ phổ biến có tần suất sử dụng cao biên tập đồ nhằm nâng cao hiệu suất sử dụng, rút ngắn thao tác trình thực PHẠM VI NGHIÊN CỨU Phạm vi nghiên cứu luận văn bao gồm: + Các chức biên tập đối tượng dạng vùng địa chính, đặc biệt đối tượng đất + Tập trung vẽ số đối tượng địa NỘI DUNG NGHIÊN CỨU Nội dung nghiên cứu luận văn tập trung vào chức vẽ từ phần mềm AutoCad MicroStation với ứng dụng công cụ thành lập đồ chuyên ngành mà cụ thể đồ Địa PHƯƠNG PHÁP NGHIÊN CỨU Về phương pháp nghiên cứu, tiến hành nghiên cứu lý thuyết từ phần mềm đồ họa khác, mơ hình hóa tốn thực lập trình thử nghiệm Ý NGHĨA KHOA HỌC VÀ THỰC TIỄN CỦA ĐỀ TÀI Ý nghĩa khoa học: Việc nghiên cứu làm sở để xây dựng hệ thống biên tập đồ họa phục vụ đồ chuyên ngành Ý nghĩa thực tiễn: Mục đích nghiên cứu nhằm tăng hiệu biên tập nhờ việc rút ngắn thao tác CẤU TRÚC CỦA LUẬN VĂN Luận văn bao gồm phần mở đầu, chương, phần kết luận trình bày 58 trang phần phụ lục LỜI CẢM ƠN Luận văn: “Nghiên cứu, xây dựng số chức vẽ phổ biến biên tập đồ” thực trường Đại học Mỏ - Địa chất khoảng thời gian từ tháng 08 năm 2012 đến tháng 04 năm 2013 Để thực luận văn ngồi nỗ lực thân, tơi xin chân thành cảm ơn TS Trần Thùy Dương, người trực tiếp hướng dẫn, giúp đỡ, đóng góp nhiều ý kiến quý báu trình chọn nghiên cứu đề tài này, thầy mơn Địa tận tình giúp đỡ tơi suốt q trình thực luận văn Tôi xin chân thành cảm ơn lãnh đạo Công ty Trắc địa Bản đồ, Cục Bản đồ- Bộ Tổng tham mưu, đồng nghiệp giúp đỡ tạo điều kiện cho tơi hồn thành luận văn thời hạn Xin trân trọng cảm ơn! Chương TỔNG QUAN VỀ KỸ THUẬT LẬP TRÌNH TRONG VIỆC XÂY DỰNG MỘT HỆ THỐNG BIÊN TẬP ĐỒ HỌA 1.1 Đánh giá chức vẽ AutoCad MicroStation Vai trò phần mềm AutoCad MicroStation biên tập đồ nói chung đồ Địa nói riêng quan trọng cần thiết Tuy nhiên, sử dụng để biên tập đồ chun ngành cơng cụ phần mềm khơng hồn tồn đáp ứng yêu cầu để biên tập, là: - Một số chức không sử dụng đến đồ chuyên ngành mà phục vụ cho ngành khác như: Dimension (ứng dụng chủ yếu vẽ kỹ thuật), Solid (trên công cụ Draw), - Một số chức phục vụ cho đồ chuyên ngành, đặc biệt đồ địa khơng ứng dụng như: Đối tượng đất ngồi thuộc tính cịn kèm theo đường bao, taluy quanh đất, Vì cần xây dựng hệ thống nghiên cứu đối tượng đặc thù chuyên ngành giúp tăng tốc biên tập đối tượng, quản lý đối tượng Phương tiện công cụ để xây dựng hệ thống ngôn ngữ Visual Basic 6.0 – công cụ thực nghiệm tốt 1.2 Tổng quan đối tượng lập trình hướng đối tượng 1.2.1 Đối tượng Các liệu thị kết hợp vào đơn vị đầy đủ tạo nên đối tượng Đơn vị tương đương với chương trình đối tượng chia thành hai phận chính: phần phương thức (method) phần thuộc tính (Properties) Trong thực tế, phương thức 78 If rYmax < DS_Lines(i).rY1 Then rYmax = DS_Lines(i).rY1 If rXmin > DS_Lines(i).rX2 Then rXmin = DS_Lines(i).rX2 If rYmin > DS_Lines(i).rY2 Then rYmin = DS_Lines(i).rY2 If rXmax < DS_Lines(i).rX2 Then rXmax = DS_Lines(i).rX2 If rYmax < DS_Lines(i).rY2 Then rYmax = DS_Lines(i).rY2 Next For i = To CirclesCount With DS_Circles(i) If rXmin > rX1 - rR1 Then rXmin = rX1 - rR1 If rYmin > rY1 - rR1 Then rYmin = rY1 - rR1 If rXmax < rX1 + rR1 Then rXmax = rX1 + rR1 If rYmax < rY1 + rR1 Then rYmax = rY1 + rR1 End With Next Dim P1 As POINT_2D, P2 As POINT_2D, rEnd1 As Double For i = To ArcsCount With DS_Arcs(i) If rStart1 < rEnd1 Then rEnd1 = rEnd1 If pi_2 > rStart1 And pi_2 < rEnd1 Then If rYmax < rY1 + rR1 Then rYmax = rY1 + rR1 End If 79 If pi > rStart1 And pi < rEnd1 Then If rXmin > rX1 - rR1 Then rXmin = rX1 - rR1 End If If * pi_2 > rStart1 And * pi_2 < rEnd1 Then If rYmin > rY1 - rR1 Then rYmin = rY1 - rR1 End If Else rEnd1 = rEnd1 + pi2 If pi_2 > rStart1 Then If rYmax < rY1 + rR1 Then rYmax = rY1 + rR1 Else If pi_2 < rEnd1 Then If rYmax < rY1 + rR1 Then rYmax = rY1 + rR1 End If End If If pi > rStart1 Then If rXmin > rX1 - rR1 Then rXmin = rX1 - rR1 Else If pi < rEnd1 Then If rXmin > rX1 - rR1 Then rXmin = rX1 - rR1 End If End If 80 If * pi_2 > rStart1 Then If rYmin > rY1 - rR1 Then rYmin = rY1 - rR1 Else If * pi_2 < rEnd1 Then If rYmin > rY1 - rR1 Then rYmin = rY1 - rR1 End If End If If pi2 > rStart1 And pi2 < rEnd1 Then If rXmax < rX1 + rR1 Then rXmax = rX1 + rR1 End If End If P1.rX1 = rX1 + rR1 * Cos(.rStart1) P1.rY1 = rY1 + rR1 * Sin(.rStart1) P2.rX1 = rX1 + rR1 * Cos(.rEnd1) P2.rY1 = rY1 + rR1 * Sin(.rEnd1) If rXmin > P1.rX1 Then rXmin = P1.rX1 If rYmin > P1.rY1 Then rYmin = P1.rY1 If rXmax < P1.rX1 Then rXmax = P1.rX1 If rYmax < P1.rY1 Then rYmax = P1.rY1 If rXmin > P2.rX1 Then rXmin = P2.rX1 If rYmin > P2.rY1 Then rYmin = P2.rY1 If rXmax < P2.rX1 Then rXmax = P2.rX1 81 If rYmax < P2.rY1 Then rYmax = P2.rY1 End With Next Dim j As Long For i = To PolylinesCount For j = To DS_Polylines(i).VertexsCount If rXmin > DS_Polylines(i).DS_Vertexs(j).rX1 Then rXmin = DS_Polylines(i).DS_Vertexs(j).rX1 If rYmin > DS_Polylines(i).DS_Vertexs(j).rY1 Then rYmin = DS_Polylines(i).DS_Vertexs(j).rY1 If rXmax < DS_Polylines(i).DS_Vertexs(j).rX1 Then rXmax = DS_Polylines(i).DS_Vertexs(j).rX1 If rYmax < DS_Polylines(i).DS_Vertexs(j).rY1 Then rYmax = DS_Polylines(i).DS_Vertexs(j).rY1 Next Next For i = To ParcelsCount For j = To DS_Parcels(i).SoDinh If rXmin > DS_Parcels(i).DS_Dinh(j).rX1 Then rXmin = Then rYmin = DS_Parcels(i).DS_Dinh(j).rX1 If rYmin > DS_Parcels(i).DS_Dinh(j).rY1 DS_Parcels(i).DS_Dinh(j).rY1 82 If rXmax < DS_Parcels(i).DS_Dinh(j).rX1 Then rXmax = Then rYmax = DS_Parcels(i).DS_Dinh(j).rX1 If rYmax < DS_Parcels(i).DS_Dinh(j).rY1 DS_Parcels(i).DS_Dinh(j).rY1 Next Next For i = To CommuncesCount For j = To DS_Communces(i).SoDinh If rXmin > DS_Communces(i).DS_Dinh(j).rX1 Then rXmin = DS_Communces(i).DS_Dinh(j).rX1 If rYmin > DS_Communces(i).DS_Dinh(j).rY1 Then rYmin = DS_Communces(i).DS_Dinh(j).rY1 If rXmax < DS_Communces(i).DS_Dinh(j).rX1 Then rXmax = DS_Communces(i).DS_Dinh(j).rX1 If rYmax < DS_Communces(i).DS_Dinh(j).rY1 Then rYmax = DS_Communces(i).DS_Dinh(j).rY1 Next Next End Sub * Add đối tượng Private Sub AddPoint(rX1 As Double, rY1 As Double) PointsCount = PointsCount + ReDim Preserve DS_Points(PointsCount) 83 DS_Points(PointsCount).rX1 = rX1 DS_Points(PointsCount).rY1 = rY1 AddEnt TP_POINT, PointsCount End Sub Private Sub AddLine(rX1 As Double, rY1 As Double, rX2 As Double, rY2 As Double) LinesCount = LinesCount + ReDim Preserve DS_Lines(LinesCount) DS_Lines(LinesCount).rX1 = rX1 DS_Lines(LinesCount).rY1 = rY1 DS_Lines(LinesCount).rX2 = rX2 DS_Lines(LinesCount).rY2 = rY2 AddEnt TP_LINE, LinesCount End Sub Private Sub AddRay(rX1 As Double, rY1 As Double, rDirX1 As Double, rDirY1 As Double) RaysCount = RaysCount + ReDim Preserve DS_Rays(RaysCount) DS_Rays(RaysCount).rX1 = rX1 DS_Rays(RaysCount).rY1 = rY1 DS_Rays(RaysCount).rDirX1 = rDirX1 DS_Rays(RaysCount).rDirY1 = rDirY1 84 AddEnt TP_RAY, RaysCount End Sub Private Sub AddXLine(rX1 As Double, rY1 As Double, rDirX1 As Double, rDirY1 As Double) XLinesCount = XLinesCount + ReDim Preserve DS_XLines(XLinesCount) DS_XLines(XLinesCount).rX1 = rX1 DS_XLines(XLinesCount).rY1 = rY1 DS_XLines(XLinesCount).rDirX1 = rDirX1 DS_XLines(XLinesCount).rDirY1 = rDirY1 AddEnt TP_XLINE, XLinesCount End Sub Private Sub AddVertex(rX1 As Double, rY1 As Double) VertexsCount = VertexsCount + ReDim Preserve DS_Vertexs(VertexsCount) DS_Vertexs(VertexsCount).rX1 = rX1 DS_Vertexs(VertexsCount).rY1 = rY1 End Sub Private Sub AddPolyline(CloseFlg As Boolean, DS_Vertexs() As POINT_2D, Optional VertexsCount As Long) PolylinesCount = PolylinesCount + ReDim Preserve DS_Polylines(PolylinesCount) 85 DS_Polylines(PolylinesCount).CloseFlg = CloseFlg DS_Polylines(PolylinesCount).DS_Vertexs = DS_Vertexs DS_Polylines(PolylinesCount).VertexsCount = VertexsCount VertexsCount = 0: ReDim DS_Vertexs(0) AddEnt TP_POLYLINE, PolylinesCount End Sub Private Sub AddCommunce(DS_Dinh() As POINT_2D, SoDinh As Long) CommuncesCount = CommuncesCount + ReDim Preserve DS_Communces(CommuncesCount) DS_Communces(CommuncesCount).DS_Dinh = DS_Dinh DS_Communces(CommuncesCount).SoDinh = SoDinh DS_Communces(CommuncesCount).Chuvi = Chuvi(DS_Dinh, SoDinh) DS_Communces(CommuncesCount).Dientich = SoDinh) ' cap nhat ds_thuaid vao xa vua hinh TimDS_ThuaID_CuaXa CommuncesCount SoDinh = 0: ReDim DS_Dinh(0) AddEnt TP_COMMUNCE, CommuncesCount End Sub * Thao tác KeyPress Private Sub PicView_KeyPress(KeyAscii As Integer) Dientich(DS_Dinh, 86 If KeyAscii = vbKeyReturn Then If Lenh = "Select Objects" Then SoLan = MsgBox n_ID Exit Sub End If If Lenh = "Polyline" Then PicView.Line (vX1, vY1)-(vX2, vY2) AddPolyline False, DS_Vertexs, VertexsCount rCurX = rX(vX1): rCurY = rY(vY1) SoLan = Exit Sub End If If Lenh = "RanhGioiXa" Then PicView.Line (vX1, vY1)-(vX2, vY2), vbRed PicView.Line (vX1, vY1)-(vXd, vYd), vbRed AddCommunce DS_Vertexs, VertexsCount rCurX = rX(vX1): rCurY = rY(vY1) SoLan = Exit Sub End If End If 87 If KeyAscii = Asc("c") Then 'c If Lenh = "Polyline" Then PicView.Line (vX1, vY1)-(vX2, vY2) PicView.Line (vX1, vY1)-(vXd, vYd) AddPolyline True, DS_Vertexs, VertexsCount rCurX = rX(vXd): rCurY = rY(vYd): rCurDirection = Atan2(vY1 vYd, vXd - vX1) SoLan = Exit Sub End If If Lenh = "RanhGioiXa" Then PicView.Line (vX1, vY1)-(vX2, vY2), vbRed PicView.Line (vX1, vY1)-(vXd, vYd), vbRed AddCommunce DS_Vertexs, VertexsCount rCurX = rX(vXd): rCurY = rY(vYd): rCurDirection = Atan2(vY1 vYd, vXd - vX1) SoLan = Exit Sub End If If KeyAscii = Asc("C") Then PicView_KeyPress Asc("c") If KeyAscii = vbKeySpace Then PicView_KeyPress vbKeyReturn End Sub 88 *Hàm thuật toán số đối tượng - Vẽ cung tròn (Start, End, Angle) Private Sub Arc_SEA(ByVal vX1 As Long, ByVal vY1 As Long, ByVal vX2 As Long, ByVal vY2 As Long, ByVal rAngle As Double, _ vXc As Long, vYc As Long, vRc As Long, Optional rStartC As Double, Optional rEndC As Double) Dim rBeta As Double, vR1 As Double rBeta = Atan2(vY1 - vY2, vX2 - vX1) vR1 = Sqr((vX2 - vX1) * (vX2 - vX1) + (vY2 - vY1) * (vY2 - vY1)) If Sin(0.5 * rAngle) Then vRc = 0.5 * vR1 / Sin(0.5 * rAngle) Else vRc = 32000 End If rAngle = 0.5 * (pi - rAngle) rBeta = rBeta - rAngle + pi vXc = vX2 + vRc * Cos(rBeta) vYc = vY2 - vRc * Sin(rBeta) rStartC = Atan2(vYc - vY1, vX1 - vXc) rEndC = Atan2(vYc - vY2, vX2 - vXc) PicView.Circle (vXc, vYc), vRc, , rStartC, rEndC End Sub 89 - Vẽ cung tròn (Start, End, Direction) Private Function Arc_SED(ByVal vX1 As Long, ByVal vY1 As Long, ByVal vX2 As Long, ByVal vY2 As Long, ByVal rDirection As Double, _ vXc As Long, vYc As Long, vRc As Long, Optional rStartC As Double, Optional rEndC As Double) As Long Dim rBeta As Double, vR1 As Double, rAngle As Double rBeta = Atan2(vY1 - vY2, vX2 - vX1) rAngle = * (rBeta - rDirection) vR1 = Sqr((vX2 - vX1) * (vX2 - vX1) + (vY2 - vY1) * (vY2 - vY1)) If Abs(Sin(0.5 * rAngle)) > 0.000016 * vR1 Then vRc = 0.5 * vR1 / Sin(0.5 * rAngle) Else vRc = 32000 End If rAngle = 0.5 * (pi - rAngle) rBeta = rBeta - rAngle + pi vXc = vX2 + vRc * Cos(rBeta) vYc = vY2 - vRc * Sin(rBeta) If vRc > Then rStartC = Atan2(vYc - vY1, vX1 - vXc) rEndC = Atan2(vYc - vY2, vX2 - vXc) Arc_SED = 90 Else vRc = -vRc rEndC = Atan2(vYc - vY1, vX1 - vXc) rStartC = Atan2(vYc - vY2, vX2 - vXc) Arc_SED = -1 End If PicView.Circle (vXc, vYc), vRc, , rStartC, rEndC End Function - Vẽ cung tròn (Start, End, Radius) Private Sub Arc_SER(ByVal vX1 As Long, ByVal vY1 As Long, ByVal vX2 As Long, ByVal vY2 As Long, ByVal vRc As Long, _ vXc As Long, vYc As Long, Optional rStartC As Double, Optional rEndC As Double) Dim rBeta As Double, rAngle As Double, SinrA_2 As Double, CosrA_2 As Double, vR1 As Long rBeta = Atan2(vY1 - vY2, vX2 - vX1) vR1 = Sqr((vX2 - vX1) * (vX2 - vX1) + (vY2 - vY1) * (vY2 - vY1)) SinrA_2 = 0.5 * vR1 / vRc: CosrA_2 = Sqr(1 - SinrA_2 * SinrA_2) rAngle = * Atan2(SinrA_2, CosrA_2) rAngle = 0.5 * (pi - rAngle) rBeta = rBeta - rAngle + pi vXc = vX2 + vRc * Cos(rBeta) 91 vYc = vY2 - vRc * Sin(rBeta) rStartC = Atan2(vYc - vY1, vX1 - vXc) rEndC = Atan2(vYc - vY2, vX2 - vXc) PicView.Circle (vXc, vYc), vRc, , rStartC, rEndC End Sub - Vẽ cung tròn (3 Points) Private Sub Arc_3P(ByVal vX1 As Long, ByVal vY1 As Long, ByVal vXm As Long, ByVal vYm As Long, ByVal vX2 As Long, ByVal vY2 As Long, _ vXc As Long, vYc As Long, vRc As Long, Optional rStartC, Optional rEndC) Dim rBeta As Double, vR1 As Double, rAngle As Double, CosrA As Double, SinrA As Double Dim vR2 As Double, vR3 As Double If vCcw(vX1, vY1, vXm, vYm, vX2, vY2) = Then vXc = vX1: vYc = vY1 vX1 = vX2: vY1 = vY2 vX2 = vXc: vY2 = vYc End If vR1 = Sqr((vX2 - vX1) * (vX2 - vX1) + (vY2 - vY1) * (vY2 - vY1)) vR2 = Sqr((vXm - vX2) * (vXm - vX2) + (vYm - vY2) * (vYm - vY2)) vR3 = Sqr((vXm - vX1) * (vXm - vX1) + (vYm - vY1) * (vYm - vY1)) If vR2 = Then Exit Sub: If vR3 = Then Exit Sub 92 CosrA = 0.5 * (vR2 * vR2 + vR3 * vR3 - vR1 * vR1) / (vR2 * vR3) SinrA = Sqr(1 - CosrA * CosrA) rAngle = Atan2(SinrA, CosrA) rAngle = * (pi - rAngle) rBeta = Atan2(vY1 - vY2, vX2 - vX1) If Sin(0.5 * rAngle) Then vRc = 0.5 * vR1 / Sin(0.5 * rAngle) Else vRc = 32000 End If rAngle = 0.5 * (pi - rAngle) rBeta = rBeta - rAngle + pi vXc = vX2 + vRc * Cos(rBeta) vYc = vY2 - vRc * Sin(rBeta) If IsMissing(rStartC) And IsMissing(rEndC) Then PicView.Circle (vXc, vYc), vRc Else rStartC = Atan2(vYc - vY1, vX1 - vXc) rEndC = Atan2(vYc - vY2, vX2 - vXc) PicView.Circle (vXc, vYc), vRc, , rStartC, rEndC End If End Sub ... cho đồ chun ngành khơng ứng dụng Vì việc xây dựng môi trường đồ họa tập trung chức vẽ nhất, tần suất sử dụng cao cần thiết Đề tài luận văn ? ?Nghiên cứu, xây dựng số chức vẽ phổ biến biên tập đồ? ??... đất Trong trình sử dụng gắn với thực tế bổ sung thêm thuộc tính khác Mã lệnh hàm thể mục [2.2] phần phụ lục 27 Chương XÂY DỰNG MỘT SỐ CHỨC NĂNG VẼ PHỔ BIẾN 3.1 Mô tả chức vẽ Các bước xây dựng chức. .. đo 26 Chương XÂY DỰNG MỘT SỐ CHỨC NĂNG VẼ PHỔ BIẾN .27 iii 3.1 Mô tả chức vẽ 27 3.1.1 Vẽ đối tượng điểm 27 3.1.2 Vẽ đường thẳng 27 3.1.3 Vẽ cung tròn (Arc)

Ngày đăng: 24/05/2021, 08:14

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w