📄 module1.bas
字号:
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 + -