⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module1.bas

📁 本程序所反应的是在测量中被广泛应用的全球定位系统(Global Position System)在空间中的形象以及基本的工作原理。GPS由三部分组成:空间部分、地面控制系统以及用户部分。
💻 BAS
📖 第 1 页 / 共 2 页
字号:
    z3d(1) = linz
    
    '沿Z轴旋转
    linx = x3d(1)
    liny = y3d(1)
    linz = z3d(1)
    x3d(1) = linx * Cos(zzhuanjiao * pi / 180) - liny * Sin(zzhuanjiao * pi / 180)
    y3d(1) = linx * Sin(zzhuanjiao * pi / 180) + liny * Cos(zzhuanjiao * pi / 180)
    z3d(1) = linz
     '沿X轴旋转
    linx = x3d(1)
    liny = y3d(1)
    linz = z3d(1)
    x3d(1) = linx
    y3d(1) = liny * Cos(qingjiao * pi / 180) - linz * Sin(qingjiao * pi / 180)
    z3d(1) = liny * Sin(qingjiao * pi / 180) + linz * Cos(qingjiao * pi / 180)
    
    x2d(1) = zbchangex(x3d(1), y3d(1), z3d(1), sita, fai, rou, d)
    y2d(1) = zbchangey(x3d(1), y3d(1), z3d(1), sita, fai, rou, d)
    
    
    k = 0    '标记数组STLTX等的二维下标
    For j = 0 To 360 Step 3
    
       '画卫星
       If j = 0 Or j = 90 Or j = 180 Or j = 270 Then
          qishi = j + qishi1(i / 60 * 3 + j / 90) + stltqishi '存放不同时刻每条轨道上第一颗卫星的起始角,为了使屏幕布满卫星所以每条轨道上的第一颗卫星的起始角不一样,差个i
          k = k + 1
          
          stltx(i / 60, k) = orbit * Sin(qishi * pi / 180) * Cos(i * pi / 180)
          stlty(i / 60, k) = orbit * Sin(qishi * pi / 180) * Sin(i * pi / 180)
          stltz(i / 60, k) = orbit * Cos(qishi * pi / 180)
          stltx1(i / 60, k) = stltx(i / 60, k)
          stltx1(i / 60, k) = stltx(i / 60, k)
          stltx1(i / 60, k) = stltx(i / 60, k)
          
          
          linx = stltx(i / 60, k)
          liny = stlty(i / 60, k)
          linz = stltz(i / 60, k)
          stltx(i / 60, k) = linx * Cos(-i * pi / 180) - liny * Sin(-i * pi / 180)
          stlty(i / 60, k) = linx * Sin(-i * pi / 180) + liny * Cos(-i * pi / 180)
          stltz(i / 60, k) = linz
    
          linx = stltx(i / 60, k)
          liny = stlty(i / 60, k)
          linz = stltz(i / 60, k)
          stltx(i / 60, k) = linx
          stlty(i / 60, k) = liny * Cos(-35 * pi / 180) - linz * Sin(-35 * pi / 180)
          stltz(i / 60, k) = liny * Sin(-35 * pi / 180) + linz * Cos(-35 * pi / 180)
    
          linx = stltx(i / 60, k)
          liny = stlty(i / 60, k)
          linz = stltz(i / 60, k)
          stltx(i / 60, k) = linx * Cos(i * pi / 180) - liny * Sin(i * pi / 180)
          stlty(i / 60, k) = linx * Sin(i * pi / 180) + liny * Cos(i * pi / 180)
          stltz(i / 60, k) = linz
       
          '沿Z轴旋转
          linx = stltx(i / 60, k)
          liny = stlty(i / 60, k)
          linz = stltz(i / 60, k)
          stltx(i / 60, k) = linx * Cos(zzhuanjiao * pi / 180) - liny * Sin(zzhuanjiao * pi / 180)
          stlty(i / 60, k) = linx * Sin(zzhuanjiao * pi / 180) + liny * Cos(zzhuanjiao * pi / 180)
          stltz(i / 60, k) = linz
          '沿X轴旋转
          linx = stltx(i / 60, k)
          liny = stlty(i / 60, k)
          linz = stltz(i / 60, k)
          stltx(i / 60, k) = linx
          stlty(i / 60, k) = liny * Cos(qingjiao * pi / 180) - linz * Sin(qingjiao * pi / 180)
          stltz(i / 60, k) = liny * Sin(qingjiao * pi / 180) + linz * Cos(qingjiao * pi / 180)
       
          stlt2dx = zbchangex(stltx(i / 60, k), stlty(i / 60, k), stltz(i / 60, k), sita, fai, rou, d)
          stlt2dy = zbchangey(stltx(i / 60, k), stlty(i / 60, k), stltz(i / 60, k), sita, fai, rou, d)
          Form1.Picture1.DrawStyle = 0
          For tt = -2750000 / rou1 / 2 To 2750000 / rou1 / 2 Step 10
             Form1.Picture1.Line (stlt2dx + 2 * 2750000 / rou1, stlt2dy + tt)-(stlt2dx - 2 * 2750000 / rou1, stlt2dy + tt), QBColor(9)
          Next tt
          For tt = 1 To 2750000 / rou1 Step 10
             Form1.Picture1.Circle (stlt2dx, stlt2dy), tt, QBColor(2)
          Next tt
          stltx2(i / 60, k) = stlt2dx
          stlty2(i / 60, k) = stlt2dy
       End If
       
       
       
       
       
       '画轨道
       Form1.Picture1.DrawStyle = 2
       x3d(2) = orbit * Sin(j * pi / 180) * Cos(i * pi / 180)
       y3d(2) = orbit * Sin(j * pi / 180) * Sin(i * pi / 180)
       z3d(2) = orbit * Cos(j * pi / 180)
       
       linx = x3d(2)
       liny = y3d(2)
       linz = z3d(2)
       x3d(2) = linx * Cos(-i * pi / 180) - liny * Sin(-i * pi / 180)
       y3d(2) = linx * Sin(-i * pi / 180) + liny * Cos(-i * pi / 180)
       z3d(2) = linz
    
       linx = x3d(2)
       liny = y3d(2)
       linz = z3d(2)
       x3d(2) = linx
       y3d(2) = liny * Cos(-35 * pi / 180) - linz * Sin(-35 * pi / 180)
       z3d(2) = liny * Sin(-35 * pi / 180) + linz * Cos(-35 * pi / 180)
    
       linx = x3d(2)
       liny = y3d(2)
       linz = z3d(2)
       x3d(2) = linx * Cos(i * pi / 180) - liny * Sin(i * pi / 180)
       y3d(2) = linx * Sin(i * pi / 180) + liny * Cos(i * pi / 180)
       z3d(2) = linz
       
       '沿Z轴旋转
       linx = x3d(2)
       liny = y3d(2)
       linz = z3d(2)
       x3d(2) = linx * Cos(zzhuanjiao * pi / 180) - liny * Sin(zzhuanjiao * pi / 180)
       y3d(2) = linx * Sin(zzhuanjiao * pi / 180) + liny * Cos(zzhuanjiao * pi / 180)
       z3d(2) = linz
       '沿X轴旋转
       linx = x3d(2)
       liny = y3d(2)
       linz = z3d(2)
       x3d(2) = linx
       y3d(2) = liny * Cos(qingjiao * pi / 180) - linz * Sin(qingjiao * pi / 180)
       z3d(2) = liny * Sin(qingjiao * pi / 180) + linz * Cos(qingjiao * pi / 180)
       
       x2d(2) = zbchangex(x3d(2), y3d(2), z3d(2), sita, fai, rou, d)
       y2d(2) = zbchangey(x3d(2), y3d(2), z3d(2), sita, fai, rou, d)
       
       Form1.Picture1.Line (x2d(1), y2d(1))-(x2d(2), y2d(2)), QBColor(8)
       x2d(1) = x2d(2)
       y2d(1) = y2d(2)
    Next j
    
       
 Next i
 Form1.Picture1.DrawStyle = 0
 
 
 
' '画自转轴
' Form1.Picture1.DrawWidth = 2
' x3d(1) = 0
' y3d(1) = 0
' z3d(1) = 8000
' '沿Z轴旋转
' linx = x3d(1)
' liny = y3d(1)
' linz = z3d(1)
' x3d(1) = linx * Cos(zzhuanjiao * pi / 180) - liny * Sin(zzhuanjiao * pi / 180)
' y3d(1) = linx * Sin(zzhuanjiao * pi / 180) + liny * Cos(zzhuanjiao * pi / 180)
' z3d(1) = linz
' '沿X轴旋转
' linx = x3d(1)
' liny = y3d(1)
' linz = z3d(1)
' x3d(1) = linx
' y3d(1) = liny * Cos(qingjiao * pi / 180) - linz * Sin(qingjiao * pi / 180)
' z3d(1) = liny * Sin(qingjiao * pi / 180) + linz * Cos(qingjiao * pi / 180)
' x2d(1) = zbchangex(x3d(1), y3d(1), z3d(1), sita, fai, rou, d)
' y2d(1) = zbchangey(x3d(1), y3d(1), z3d(1), sita, fai, rou, d)
'
' x3d(2) = 0
' y3d(2) = 0
' z3d(2) = -8000
' '沿Z轴旋转
' linx = x3d(2)
' liny = y3d(2)
' linz = z3d(2)
' x3d(2) = linx * Cos(zzhuanjiao * pi / 180) - liny * Sin(zzhuanjiao * pi / 180)
' y3d(2) = linx * Sin(zzhuanjiao * pi / 180) + liny * Cos(zzhuanjiao * pi / 180)
' z3d(2) = linz
' '沿X轴旋转
' linx = x3d(2)
' liny = y3d(2)
' linz = z3d(2)
' x3d(2) = linx
' y3d(2) = liny * Cos(qingjiao * pi / 180) - linz * Sin(qingjiao * pi / 180)
' z3d(2) = liny * Sin(qingjiao * pi / 180) + linz * Cos(qingjiao * pi / 180)
' x2d(2) = zbchangex(x3d(2), y3d(2), z3d(2), sita, fai, rou, d)
' y2d(2) = zbchangey(x3d(2), y3d(2), z3d(2), sita, fai, rou, d)
' 'Form1.Picture1.Line (x2d(1), y2d(1))-(x2d(2), y2d(2)), vbWhite
 
 
 If pic1control = 1 Then
   Dim locationx1 As Double, locationy1 As Double, locationz1 As Double
   linx = locationx
   liny = locationy
   linz = locationz
   locationx1 = linx
   locationy1 = liny * Cos(qingjiao * pi / 180) + linz * Sin(qingjiao * pi / 180)
   locationz1 = -liny * Sin(qingjiao * pi / 180) + linz * Cos(qingjiao * pi / 180)


   linx = locationx1
   liny = locationy1
   linz = locationz1
   locationx1 = linx * Cos(zzhuanjiao * pi / 180) + liny * Sin(zzhuanjiao * pi / 180)
   locationy1 = -linx * Sin(zzhuanjiao * pi / 180) + liny * Cos(zzhuanjiao * pi / 180)
   locationz1 = linz
   Form1.Label2.Caption = locationx1
   Form1.Label3.Caption = locationy1
   Form1.Label4.Caption = locationz1
   Form1.Label1.Caption = "在惯性坐标系中的三维坐标:"
  





   xx2d = zbchangex(locationx1, locationy1, locationz1, sita, fai, rou, d)
   yy2d = zbchangey(locationx1, locationy1, locationz1, sita, fai, rou, d)
   
   

'   If xx2d <> picx And yy2d <> picy Then
'     linx = -locationx
'     liny = locationy
'     linz = locationz
'     locationx1 = linx
'     locationy1 = liny * Cos(qingjiao * pi / 180) + linz * Sin(qingjiao * pi / 180)
'     locationz1 = -liny * Sin(qingjiao * pi / 180) + linz * Cos(qingjiao * pi / 180)
'
'
'     linx = locationx1
'     liny = locationy1
'     linz = locationz1
'     locationx1 = linx * Cos(zzhuanjiao * pi / 180) + liny * Sin(zzhuanjiao * pi / 180)
'     locationy1 = -linx * Sin(zzhuanjiao * pi / 180) + liny * Cos(zzhuanjiao * pi / 180)
'     locationz1 = linz
'     Form1.Label2.Caption = locationx1
'     Form1.Label3.Caption = locationy1
'     Form1.Label4.Caption = locationz1
'     Form1.Label1.Caption = "在惯性坐标系中的三维坐标:"
'
'
'
'
'
'
'     xx2d = zbchangex(locationx1, locationy1, locationz1, sita, fai, rou, d)
'     yy2d = zbchangey(locationx1, locationy1, locationz1, sita, fai, rou, d)
'   End If
   Form1.Picture1.DrawStyle = 0
   Form1.Picture1.DrawWidth = 2
   For ii = 1 To 4
      Form1.Picture1.DrawWidth = 2
      Form1.Picture1.Line (stltx2(stlti(ii), stltj(ii)), stlty2(stlti(ii), stltj(ii)))-(xx2d, yy2d), vbYellow
   Next ii
   Form1.Picture1.Line (xx2d, yy2d + 50)-(xx2d - 50, yy2d - 25), vbRed
   Form1.Picture1.Line -(xx2d + 50, yy2d - 25), vbRed
   Form1.Picture1.Line -(xx2d, yy2d + 50), vbRed
 End If
 Form1.Picture1.DrawWidth = 1
 
 
End Sub
Public Function zbchangex(X As Double, Y As Double, z As Double, sita As Double, fai As Double, rou As Double, d As Double)
 '得到由三维坐标转换成的二维坐标的X
 xe = -X * Sin(sita) + Y * Cos(sita)
 ye = -X * Cos(sita) * Cos(fai) - Y * Sin(sita) * Cos(fai) + z * Sin(fai)
 ze = -X * Cos(sita) * Sin(fai) - Y * Sin(sita) * Sin(fai) - z * Cos(fai) + rou
 sx = d * xe / ze
 sy = d * ye / ze
 zbchangex = sx
End Function
Public Function zbchangey(X As Double, Y As Double, z As Double, sita As Double, fai As Double, rou As Double, d As Double)
 '得到由三维坐标转换成的二维坐标的Y
 xe = -X * Sin(sita) + Y * Cos(sita)
 ye = -X * Cos(sita) * Cos(fai) - Y * Sin(sita) * Cos(fai) + z * Sin(fai)
 ze = -X * Cos(sita) * Sin(fai) - Y * Sin(sita) * Sin(fai) - z * Cos(fai) + rou
 sx = d * xe / ze
 sy = d * ye / ze
 zbchangey = sy
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -