VB坐标转换程序设计.doc
《VB坐标转换程序设计.doc》由会员分享,可在线阅读,更多相关《VB坐标转换程序设计.doc(20页珍藏版)》请在三一文库上搜索。
1、Option ExplicitDim k2#, e2#, dX2#, dY2# Dim x2#, Xx2#, y2#, Yy2# Dim k3#, Ex#, Ey#, Ez#, dX3#, dY3#, dZ3# Dim X3#, Y3#, Z3#, Xx3#, Yy3#, Zz3# Const PI = 3.14159265358979Private Sub Check1_Click() If Check1.Value = 1 Then frmCoorTrans.Height = 5175 ElseIf Check1.Value = 0 Then frmCoorTrans.Height = 4
2、440 End IfEnd SubPrivate Sub cmdBrowFile_Click() CDg1.Filter = 控制点文件 (*.gcp)|*.gcp|所有文件 (*.*)|*.* CDg1.Action = 1 txtFileName.Text = CDg1.FileNameEnd SubPrivate Sub cmdCalc_Click() Dim s As String, iPos%, i%, iCent! Dim n%, x1#(), y1#(), x2#(), y2#() Dim A() As Double, L() As Double, x(1 To 4) As Do
3、uble Dim At#(), Naa#(), W#() Open txtFileName.Text For Input As #1 Line Input #1, s n = Val(s) ReDim x1#(n), y1#(n), x2#(n), y2#(n) For i = 1 To n Line Input #1, s iPos = InStr(s, ,) x1(i) = Val(Left(s, iPos - 1) s = Mid(s, iPos + 1) iPos = InStr(s, ,) y1(i) = Val(Left(s, iPos - 1) s = Mid(s, iPos +
4、 1) iPos = InStr(s, ,) x2(i) = Val(Left(s, iPos - 1) s = Mid(s, iPos + 1) y2(i) = Val(s) Next i Close #1 计算转换参数 ReDim A(1 To 2 * n, 1 To 4) As Double, L(1 To 2 * n) As Double ReDim At(1 To 4, 1 To 2 * n), Naa(1 To 4, 1 To 4), W(1 To 4) Debug.Print 系数矩阵A:For i = 1 To n A(2 * i - 1, 1) = 1: A(2 * i -
5、1, 2) = 0: A(2 * i - 1, 3) = x1(i): A(2 * i - 1, 4) = y1(i) Debug.Print A(2 * i - 1, 1), A(2 * i - 1, 2), A(2 * i - 1, 3), A(2 * i - 1, 4) A(2 * i, 1) = 0: A(2 * i, 2) = 1: A(2 * i, 3) = y1(i): A(2 * i, 4) = -x1(i) Debug.Print A(2 * i, 1), A(2 * i, 2), A(2 * i, 3), A(2 * i, 4) L(2 * i - 1) = x2(i):
6、L(2 * i) = y2(i) Next i Debug.Print 常数向量L: For i = 1 To 2 * n Debug.Print L(i) Next i MatrixTrans A, At Debug.Print A的转置矩阵: ShowMatrix At Matrix_Multy Naa, At, A Debug.Print Naa: ShowMatrix Naa Matrix_Multy W, At, L Debug.Print W: For i = 1 To 4 Debug.Print W(i) Next i MajorInColGuass Naa, W, x Debu
7、g.Print X For i = 1 To 4 Debug.Print x(i) Next i 分离旋转和尺度参数 If Abs(x(3) 0 Then e2 = PI / 2 Else e2 = PI * 3 / 2 End If Else e2 = Atn(x(4) / x(3) 得到的是弧度 If x(3) 0 Then e2 = PI - e2 ElseIf x(3) 0 And x(4) 0 And x(4) 0 Then e2 = PI * 2 + e2 End If End If k2 = x(3) / Cos(e2) 将转换参数写入相应文本框 txtK2 = Str(k2 -
8、 1) e2 = e2 * 180 / PI Dim du%, fen% du = Int(e2): e2 = (e2 - du) * 60 fen = Int(e2): e2 = (e2 - fen) * 60 e2 = Val(Format(e2, 0.00) e2 = du + fen / 100# + e2 / 10000 txtE2 = Str(e2) txtdX2.Text = Str(x(1) txtdY2.Text = Str(x(2)End SubPrivate Sub cmdCalc2_Click() k2 = Val(txtK2.Text) e2 = Val(txtE2.
9、Text) e2 = DoToHu(e2) dX2 = Val(txtdX2.Text) dY2 = Val(txtdY2.Text) x2 = Val(txtX2.Text) y2 = Val(txtY2.Text) Xx2 = (k2 + 1) * (x2 * Cos(e2) + y2 * Sin(e2) + dX2 Yy2 = (k2 + 1) * (y2 * Cos(e2) - x2 * Sin(e2) + dY2 txtXx2.Text = Format(Xx2, 0.0000) txtYy2.Text = Format(Yy2, 0.0000)End SubPrivate Sub
10、cmdCalc3_Click() k3 = Val(txtK3.Text) Ex = Val(txtEx.Text) Ex = DoToHu(Ex) Ey = Val(txtEy.Text) Ey = DoToHu(Ey) Ez = Val(txtEz.Text) Ez = DoToHu(Ez) dX3 = Val(txtdX3.Text) dY3 = Val(txtdY3.Text) dZ3 = Val(txtDz3.Text) X3 = Val(txtX3.Text) Y3 = Val(txtY3.Text) Z3 = Val(txtZ3.Text) Xx3 = (k3 + 1) * (X
11、3 * Cos(Ey) * Cos(Ez) + Y3 * Cos(Ey) * Sin(Ez) - Z3 * Sin(Ey) + dX3 Yy3 = (k3 + 1) * (X3 * (-Cos(Ex) * Sin(Ez) + Sin(Ex) * Sin(Ey) * Cos(Ez) + Y3 * (Cos(Ex) * Cos(Ez) + Sin(Ex) * Sin(Ey) * Sin(Ez) + Z3 * (Sin(Ex) * Cos(Ey) + dY3 Zz3 = (k3 + 1) * (X3 * (Sin(Ex) * Sin(Ez) + Cos(Ex) * Sin(Ey) * Cos(Ez)
12、 + Y3 * (-Sin(Ex) * Cos(Ez) + Cos(Ex) * Sin(Ey) * Sin(Ez) + Z3 * (Cos(Ex) * Cos(Ey) + dZ3 txtXx3.Text = Format(Xx3, 0.0000) txtYy3.Text = Format(Yy3, 0.0000) txtZz3.Text = Format(Zz3, 0.0000)End SubPrivate Sub cmdClear2_Click() txtX2.Text = txtY2.Text = txtXx2.Text = txtYy2.Text = End SubPrivate Sub
13、 cmdClear3_Click() txtX3.Text = txtY3.Text = txtZ3.Text = txtXx3.Text = txtYy3.Text = txtZz3.Text = End SubPrivate Sub cmdconCalc2_Click() k2 = Val(txtK2.Text) e2 = Val(txtE2.Text) e2 = DoToHu(e2) dX2 = Val(txtdX2.Text) dY2 = Val(txtdY2.Text) Xx2 = Val(txtXx2.Text) Yy2 = Val(txtYy2.Text) x2 = (Xx2 -
14、 dX2) * Cos(e2) - (Yy2 - dY2) * Sin(e2) / (k2 + 1) y2 = (Yy2 - dY2) * Cos(e2) + (Xx2 - dX2) * Sin(e2) / (k2 + 1) txtX2.Text = Format(x2, 0.0000) txtY2.Text = Format(y2, 0.0000)End SubPrivate Sub cmdconCalc3_Click() k3 = Val(txtK3.Text) Ex = Val(txtEx.Text) Ex = DoToHu(Ex) Ey = Val(txtEy.Text) Ey = D
15、oToHu(Ey) Ez = Val(txtEz.Text) Ez = DoToHu(Ez) dX3 = Val(txtdX3.Text) dY3 = Val(txtdY3.Text) dZ3 = Val(txtDz3.Text) Xx3 = Val(txtXx3.Text) Yy3 = Val(txtYy3.Text) Zz3 = Val(txtZz3.Text) X3 = (Xx3 - dX3) * Cos(Ey) * Cos(Ez) + (Yy3 - dY3) * (-Cos(Ex) * Sin(Ez) + Sin(Ex) * Sin(Ey) * Cos(Ez) + (Zz3 - dZ3
16、) * (Sin(Ex) * Sin(Ez) + Cos(Ex) * Sin(Ey) * Cos(Ez) / (k3 + 1) Y3 = (Xx3 - dX3) * Cos(Ey) * Sin(Ez) + (Yy3 - dY3) * (Sin(Ex) * Sin(Ey) * Sin(Ez) + Cos(Ex) * Cos(Ez) + (Zz3 - dZ3) * (-Sin(Ex) * Cos(Ez) + Cos(Ex) * Sin(Ey) * Sin(Ez) / (k3 + 1) Z3 = (Xx3 - dX3) * (-Sin(Ey) + (Yy3 - dY3) * Sin(Ex) * Co
17、s(Ey) + (Zz3 - dZ3) * (Cos(Ex) * Cos(Ey) / (k3 + 1) txtX3.Text = Format(X3, 0.0000) txtY3.Text = Format(Y3, 0.0000) txtZ3.Text = Format(Z3, 0.0000)End SubPrivate Sub cmdExit_Click() EndEnd SubPrivate Sub Form_Load() frmCoorTrans.Height = 4440End Sub弧度化为度.分秒的形式:输入弧度值,输出度.分秒(各占两位)Public Function HuToD
18、o(ByVal Hu As Double) As Single Dim du%, fen%, miao% Hu = Hu * 180 / PI du = Fix(Hu) Hu = (Hu - du) * 60 fen = Fix(Hu) Hu = (Hu - fen) * 60 miao = Fix(Hu + 0.5) If miao = 60 Then fen = fen + 1 miao = 0 End If HuToDo = du + fen / 100 + miao / 10000End Function将度.分秒形式化为弧度:输入为度.分秒形式,输出为弧度Public Functio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 坐标 转换 程序设计
链接地址:https://www.31doc.com/p-3313038.html