[ Top ] [ Study Note ]

嶌幰:  Kreny Leave me message Email:
嵟屻偺峏怴丗December 11 2004 05:10:43.
婱曽偼 ... 偐傜偒傑偟偨丅
Creative Commons License This page is based on
Creative Commons License
揮嵹偡傞偲偒偵丄嶌幰偺柤慜偲壓偺儕儞僋傪昁偢婰擖偟偰偔偩偝偄丅
偙偺儁乕僕偺URL丗http://www.kreny.com/paper/1/venus_code.html

私の作成した軌道計算シミュレーションプログラム コード

' 定义全程变量

Public AU As Double ' 天文单位

Public e As Double ' 轨道离心率

Public a As Double ' 轨道长半径

Public b As Double ' 轨道短半径

Public Pi As Double 'pi

Public sunyear As Double ' 太阳年

Public rate As Long ' 画图的比例尺

 

Private Sub Command1_Click()

' 作地球轨道图

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

e = 0.01671 ' 地球的轨道离心率

a = AU ' 地球的轨道长半径

b = a * Sqr(1 - e ^ 2) ' 短半径换算公式

 

a = a / rate

b = b / rate ' 便于作图 , 作略微修改

 

Do While x <= a And x >= -a ' 限制画椭圆的范围以防止溢出

 

y = Sqr(b ^ 2 - b ^ 2 * x ^ 2 / a ^ 2) ' 转换坐标

 

PSet (x + Line2.X1, y + Line1.Y1)

PSet (x + Line2.X1, -y + Line1.Y1)

PSet (-x + Line2.X1, y + Line1.Y1)

PSet (-x + Line2.X1, -y + Line1.Y1)

'Line (Line2.X1, Line1.Y1)-(-x + Line2.X1, -y + Line1.Y1)

 

x = x + 0.1

Loop

End Sub

 

Private Sub Command3_Click()

 

' 作金星轨道电线图

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

e = 0.00677 ' 金星的轨道离心率

a = 0.72333 * AU ' 金星的轨道长半径

b = a * Sqr(1 - e ^ 2) ' 短半径换算公式

t = 0.615207 * sunyear ' 金星周期

daytime = Text1.Text

 

acount = 100000 ' 计算精读

 

If daytime >= 0 Then

M = 2 * Pi * daytime / t 'E 的近似值 , 即初始的 M( 平均离角 )

Evinus = M

For I = 1 To acount

Evinus = M + e * Sin(Evinus)

Next I

Else

MsgBox "Please write a number that larger than 0", , "Warning!"

Text1.Text = 0

Exit Sub

End If

 

a = a / rate ' 便于作图 , 作略微修改

 

x = Cos(Evinus) * a

y = Sin(Evinus) * a

 

Line (Line2.X1, Line1.Y1)-(x + Line2.X1, -y + Line1.Y1): Print " " + daytime + "day"

End Sub

 

Private Sub Command4_Click()

 

' 作地球轨道电线图

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

e = 0.01671 ' 金星的轨道离心率

a = AU ' 金星的轨道长半径

b = a * Sqr(1 - e ^ 2) ' 短半径换算公式

t = sunyear ' 金星周期

daytime = Text2.Text

 

acount = 100000 ' 计算精读

 

If daytime >= 0 Then

M = 2 * Pi * daytime / t 'E 的近似值 , 即初始的 M( 平均离角 )

Evinus = M

For I = 1 To acount

Evinus = M + e * Sin(Evinus)

Next I

Else

MsgBox "Please write a number that larger than 0", , "Warning!"

Text2.Text = 0

Exit Sub

End If

 

a = a / rate ' 便于作图 , 作略微修改

 

x = Cos(Evinus) * a

y = Sin(Evinus) * a

 

Line (Line2.X1, Line1.Y1)-(x + Line2.X1, -y + Line1.Y1): Print " " + daytime + "day"

End Sub

 

Private Sub Command5_Click()

finnal.Cls

End Sub

 

Private Sub Command6_Click()

Timer1.Enabled = Not Timer1.Enabled

 

If Timer1.Enabled = True Then

finnal.Cls

Command6.Caption = "Stop Imitate!"

Call Command1_Click

Call Command2_Click

Else

Command6.Caption = "Sart Imitate!"

End If

 

End Sub

 

Private Sub coordinate_Click(Index As Integer)

Unload finnal

Load drawcoordinate

drawcoordinate.Show

End Sub

 

Private Sub Form_Load()

Dim daytime As Long: daytime = 0

AU = 1.4959787 * (10 ^ 11) ' 天文单位

Pi = 3.14159265358979 'pi

sunyear = 365.2422 ' 太阳年

 

rate = 40000000 ' 画图比例

Line2.X1 = (Line1.X1 + Line1.X2) / 2 ' 矫正坐标

Line2.X2 = Line2.X1

 

End Sub

 

 

Private Sub Command2_Click()

 

' 作金星轨道图

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

e = 0.00677 ' 金星的轨道离心率

a = 0.72333 * AU ' 金星的轨道长半径

b = a * Sqr(1 - e ^ 2) ' 短半径换算公式

 

a = a / rate

b = b / rate ' 便于作图 , 作略微修改

 

Do While x <= a And x >= -a ' 限制画椭圆的范围以防止溢出

 

y = Sqr(b ^ 2 - b ^ 2 * x ^ 2 / a ^ 2) ' 转换坐标

 

PSet (x + Line2.X1, y + Line1.Y1)

PSet (x + Line2.X1, -y + Line1.Y1)

PSet (-x + Line2.X1, y + Line1.Y1)

PSet (-x + Line2.X1, -y + Line1.Y1)

 

 

x = x + 0.1

Loop

 

End Sub

 

Private Sub ellipse_Click(Index As Integer)

Unload finnal

Load drawellipse

drawellipse.Show

End Sub

 

Private Sub exit_Click()

End

End Sub

 

 

Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then

Text1.Text = Int(Text1.Text) ' 读者输入天数并取整

Call Command3_Click

ElseIf KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then

KeyAscii = 0 ' 取消字符。

Beep ' 发出错误信号。

Else

Text1.Text = Int(Text1.Text) ' 读者输入天数并取整

End If

 

End Sub

 

 

 

Private Sub Text2_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then ' 回车

Text2.Text = Int(Text2.Text) ' 读者输入天数并取整

Call Command4_Click

ElseIf KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then

KeyAscii = 0 ' 取消字符。

Beep ' 发出错误信号。

Else

Text2.Text = Int(Text2.Text) ' 读者输入天数并取整

End If

End Sub

 

Private Sub Timer1_Timer()

Text2.Text = Text2.Text + 3

Text1.Text = Text1.Text + 3

Call Command4_Click

Call Command3_Click

Beep

End Sub

 

Private Sub UpDown1_DownClick()

Text1.Text = Text1.Text - 1

Text1.Text = Int(Text1.Text) ' 读者输入天数并取整

Call Command3_Click

 

End Sub

 

Private Sub UpDown1_UpClick()

Text1.Text = Text1.Text + 1

Text1.Text = Int(Text1.Text) ' 读者输入天数并取整

Call Command3_Click

 

End Sub

 

 

 

Private Sub UpDown2_DownClick()

Text2.Text = Text2.Text - 1

Text2.Text = Int(Text2.Text) ' 读者输入天数并取整

Call Command4_Click

 

End Sub

 

Private Sub UpDown2_UpClick()

Text2.Text = Text2.Text + 1

Text2.Text = Int(Text2.Text) ' 读者输入天数并取整

Call Command4_Click

End Sub

 

Last update: 01/26/2004 20:27
Copyright ® 2003-2004 Yuan Huanglin. All rights reserved.