?? 大擺角有阻尼的擺.frm
字號(hào):
Caption = "0.1"
BeginProperty Font
Name = "宋體"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H000000FF&
Height = 315
Left = 1410
TabIndex = 7
Top = 2220
Width = 645
End
End
Begin VB.Line Line4
BorderColor = &H0000FF00&
X1 = 6450
X2 = 6450
Y1 = 30
Y2 = 3230
End
Begin VB.Line Line3
BorderColor = &H0000FF00&
X1 = 6450
X2 = 12000
Y1 = 1590
Y2 = 1590
End
Begin VB.Line Line2
BorderColor = &H0080FFFF&
BorderStyle = 3 'Dot
X1 = 2940
X2 = 2940
Y1 = 2340
Y2 = 840
End
Begin VB.Image Image1
Appearance = 0 'Flat
Height = 540
Left = 2790
Picture = "大擺角有阻尼的擺.frx":002B
Top = 7260
Width = 540
End
Begin VB.Menu showMnu
Caption = "showMnu"
Visible = 0 'False
Begin VB.Menu readMe
Caption = "課件說(shuō)明…"
End
Begin VB.Menu about
Caption = "關(guān)于本課件…"
End
Begin VB.Menu k1
Caption = "-"
End
Begin VB.Menu showLine
Caption = "顯示振動(dòng)圖線"
Checked = -1 'True
End
Begin VB.Menu change
Caption = "顯示參數(shù)與命令對(duì)話框"
Checked = -1 'True
End
Begin VB.Menu k2
Caption = "-"
End
Begin VB.Menu exitThis
Caption = "退出程序"
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Const PI As Single = 3.1415926
Const g As Single = 9.8 '重力加速度,單位:米/秒/秒
Const k As Single = 3000 '擺長(zhǎng)的換算系數(shù),將緹換算為米,3000緹代表一米
Const x00 As Single = 6450, y00 As Single = 1590 '圖線坐標(biāo)原點(diǎn)
Const h As Single = 1590, w As Single = 5550 '圖線高和寬
Const s As Single = 150, f As Single = 1600 '圖線的疏密度與幅度
Public noStart As Boolean '運(yùn)動(dòng)未開(kāi)始標(biāo)記
Public x000 As Single, y000 As Single '圖線繪圖坐標(biāo)
Public flage As Integer '初始位置,=1在右,=-1在左
Public x0 As Integer, y0 As Integer '坐標(biāo)原點(diǎn)
Public xx As Integer, yy As Integer '保存鼠標(biāo)坐標(biāo)
Public t As Double '時(shí)間計(jì)數(shù)器
Public b As Single '阻尼系數(shù)
Public l As Single, l0 As Single '以米為單位的擺長(zhǎng)和以緹為單位的擺長(zhǎng)
Public p As Single '判別式
Public p1 As Single, p2 As Single '中間變量
Public r1 As Single, r2 As Single '中間變量
Public j0 As Single, j As Single '最大擺幅角和擺角
Public x1 As Single, y1 As Single '繪圖用
Sub compute() '計(jì)算繪圖程序
t = t + Timer1.Interval / 1000 '以秒為單位
l = l0 / k '擺長(zhǎng),以米為單位
b = HScroll1.Value / 100 '取得阻尼系數(shù)
'b= Sqr(g * l) / 5 '若用此行,強(qiáng)制成臨界阻尼
p = 100 * b * b / l / l - 4 * g / l '判別式
p2 = -5 * b / l '根的一部分
If p < 0 Then '虛根,振動(dòng)解
p1 = Sqr(-p) / 2
j = flage * j0 * Exp(p2 * t) * Cos(p1 * t) '擺角
ElseIf p = 0 Then '二重根
j = flage * j0 * Exp(-p2 * t) * (1 + p2 * t) '擺角
Else '兩個(gè)不相等的實(shí)根
p1 = Sqr(p)
r1 = p2 + p1 / 2 '兩個(gè)特征根
r2 = p2 - p1 / 2
j = flage * j0 * ((1 - r1 / p1) * Exp(r1 * t) + _
r1 / p1 * Exp(r2 * t)) '擺角
End If
Form1.Line (x0, y0)-(x1, y1), Form1.BackColor '擦除原來(lái)的擺線
x1 = x0 + l0 * Sin(j) '新擺線坐標(biāo)
y1 = y0 + l0 * Cos(j)
Image1.Left = x1 - Image1.Width / 2 '移動(dòng)擺球
Image1.Top = y1 - Image1.Height / 2
Form1.Line (x0, y0)-(x1, y1), vbRed '畫新擺線
If t = Timer1.Interval / 1000 Then '第一個(gè)線段,特殊處理
CurrentX = x00 '起點(diǎn)坐標(biāo)
CurrentY = y00 - f
Else
CurrentX = x000
CurrentY = y000
End If
'繪制振動(dòng)圖線
If showLine.Checked Then '只有允許畫圖線時(shí)才畫
Form1.Line -(x00 + s * t, y00 - f * j / j0), vbYellow '畫圖線
End If
x000 = x00 + s * t '保存終點(diǎn)坐標(biāo)
y000 = y00 - f * j / j0
Label5.Caption = CStr(j * 180 / PI) '顯示擺角(度)
End Sub
Private Sub about_Click()
Dim say As String
say = say + "“大擺角有阻尼的擺”課件" + Chr(13) + Chr(13)
say = say + "制作:畢廣吉" + Chr(13)
say = say + "天津師范大學(xué)物理與電子信息學(xué)院" + Chr(13)
say = say + "2001年7月" + Chr(13)
say = MsgBox(say, vbOKOnly, "關(guān)于“大擺角有阻尼的擺”課件")
End Sub
Private Sub Check1_Click() '強(qiáng)制
If Check1.Value = 1 Then
HScroll1.Enabled = True '滾動(dòng)條可用
HScroll1.Value = 100 * Sqr(g * l) / 5 '設(shè)定滾動(dòng)條為臨界阻尼的值
Label1.Caption = HScroll1.Value / 100 '顯示
Check1.Enabled = False '本復(fù)選鈕不可用
HScroll1.Enabled = False '滾動(dòng)條不可用
Else
HScroll1.Enabled = True '滾動(dòng)條可用
End If
End Sub
Private Sub change_Click() '顯示/隱去修改參數(shù)對(duì)話框
change.Checked = Not change.Checked '對(duì)鉤取反
Frame1.Visible = change.Checked '是否顯示修改參數(shù)對(duì)話框
End Sub
Private Sub Command1_Click() '“開(kāi)始”按鈕處理
j0 = Atn(Abs((x1 - x0) / (y1 - y0))) '擺角最大值
If showLine.Checked Then '如果顯示振動(dòng)圖線
Line3.x1 = x00 '各坐標(biāo)軸位置
Line3.X2 = x00 + w
Line3.y1 = h
Line3.Y2 = h
Line4.x1 = x00
Line4.X2 = x00
Line4.y1 = 0
Line4.Y2 = h * 2
End If
x000 = x00 '繪圖始點(diǎn)
y000 = y00
Timer1.Enabled = True '打開(kāi)定時(shí)器
Command1.Enabled = False '“開(kāi)始”按鈕不可用
Command2.Enabled = True '“單步”按鈕可用
Command3.Enabled = True '“暫停”按鈕可用
Check1.Enabled = False '強(qiáng)制臨界阻尼不可用
noStart = False '運(yùn)動(dòng)已開(kāi)始
t = 0 '時(shí)間初值,以秒為單位
End Sub
Private Sub Command2_Click() '“單步”按鈕處理
Timer1.Enabled = False '關(guān)閉定時(shí)器
Command3.Caption = "繼續(xù)" '改變“暫停”按鈕標(biāo)題
Call compute '計(jì)算,繪圖
End Sub
Private Sub Command3_Click() '“暫停”按鈕處理
Timer1.Enabled = Not Timer1.Enabled '定時(shí)器可用性取反
Command3.Caption = IIf(Timer1.Enabled, "暫停", "繼續(xù)") '改變“暫停”按鈕標(biāo)題
End Sub
Private Sub Command4_Click() '“退出”按鈕處理
End
End Sub
Private Sub exitThis_Click() '“退出”菜單處理
End
End Sub
Private Sub Form_Load()
Timer1.Interval = 50 '此參數(shù)影響刷新曲線的時(shí)間間隔,單位:毫秒
Form1.Left = 0 '以下四行決定窗體位置和大小
Form1.Top = 0
Form1.Width = Screen.Width
Form1.Height = Screen.Height
x0 = Frame2.Left + Frame2.Width / 2 '計(jì)算坐標(biāo)原點(diǎn)
y0 = Frame2.Top + Line1.y1
Image1.Left = x0 - Image1.Width / 2 '安放擺球
Image1.Top = 7600
Line2.x1 = x0 '安放法線
Line2.X2 = x0
Form1.DrawWidth = 2 '畫線寬度
Form1.Line (x0, y0)-(Image1.Left + Image1.Width / 2, _
Image1.Top + Image1.Height / 2), vbRed '畫初始擺線
HScroll1.Value = 0 '阻尼初始值
Label1.Caption = HScroll1.Value / 100 '顯示阻尼值
Frame1.Visible = change.Checked '修改參數(shù)面板的可見(jiàn)性
l0 = Image1.Top + Image1.Height '以緹為單位的擺長(zhǎng)
l = l0 / k '以米為單位的擺長(zhǎng)
Label3.Caption = CStr(l) '顯示擺長(zhǎng)
Label4.Caption = CStr(2 * PI * Sqr(l / g)) '顯示周期
Label5.Caption = "0" '顯示擺角
Timer1.Enabled = False '關(guān)閉定時(shí)器
Check1.Enabled = False '強(qiáng)制臨界阻尼不可用
noStart = True '運(yùn)動(dòng)未開(kāi)始標(biāo)記
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then '如果右擊
Form1.PopupMenu showMnu '彈出快捷菜單
End If
End Sub
Private Sub Frame1_Click() '單擊修改參數(shù)面板,隱去
change.Checked = False
Frame1.Visible = False
End Sub
Private Sub HScroll1_Change() '水平滾動(dòng)條改變處理
Label1.Caption = HScroll1.Value / 100 '顯示值
End Sub
Private Sub HScroll1_Scroll() '滾動(dòng)條滾蛋處理
Label1.Caption = HScroll1.Value / 100
End Sub
Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 And noStart Then '拖動(dòng)擺球處理
x1 = Image1.Left + Image1.Width / 2
y1 = Image1.Top + Image1.Height / 2
Image1.Left = Image1.Left + X - Image1.Width / 2 '拖動(dòng)后擺球位置
Image1.Top = Image1.Top + Y - Image1.Height / 2
If Image1.Top < y0 - Image1.Height / 2 Then '限制擺球位置范圍
Image1.Top = y0 - Image1.Height / 2
End If
Form1.Line (x0, y0)-(x1, y1), Form1.BackColor '擦掉原來(lái)的擺線
x1 = Image1.Left + Image1.Width / 2 '擺球新坐標(biāo)
y1 = Image1.Top + Image1.Height / 2
Form1.Line (x0, y0)-(x1, y1), vbRed '畫擺線
flage = IIf(x1 > x0, 1, -1) '標(biāo)記擺球的初始位置,=1在右,=-1在左
l0 = Sqr((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)) '新擺長(zhǎng)
l = l0 / k '以米為單位的擺長(zhǎng)
Label3.Caption = CStr(l0 / k) '顯示擺長(zhǎng)
Label4.Caption = CStr(2 * PI * Sqr(l0 / k / g)) '顯示周期
Label5.Caption = Atn((x1 - x0) / (y1 - y0)) * 180 / PI '顯示初始擺角
Command1.Enabled = True '“開(kāi)始”按鈕可用
Check1.Enabled = True '強(qiáng)制臨界阻尼可用
End If
End Sub
Private Sub readMe_Click()
Dim say As String
say = say + "1.從快捷菜單中選擇是否顯示振動(dòng)圖線。" + Chr(13)
say = say + "2.從快捷菜單中選擇是否顯示“參數(shù)與命令”對(duì)話框。" + Chr(13)
say = say + "3.拖動(dòng)擺球至初始位置,此時(shí)“開(kāi)始”按鈕可用。" + Chr(13)
say = say + "4.通過(guò)滑動(dòng)條調(diào)整阻尼的大小。" + Chr(13)
say = say + "5.單擊“開(kāi)始”按鈕,擺開(kāi)始振動(dòng)。此時(shí)仍可通過(guò)滑" + Chr(13)
say = say + " 動(dòng)條調(diào)整阻尼的大小。 " + Chr(13)
say = say + "6.單擊“單步”按鈕以后,每一次單擊前進(jìn)一步。若" + Chr(13)
say = say + " 要繼續(xù),應(yīng)單擊“繼續(xù)”按鈕" + Chr(13)
say = say + "7.單擊“暫停”按鈕后程序暫停,若要繼續(xù),應(yīng)單擊" + Chr(13)
say = say + " “繼續(xù)”按鈕。" + Chr(13)
say = say + "8.調(diào)整參數(shù)和擺球運(yùn)動(dòng)時(shí),在“參數(shù)與命令”對(duì)話框" + Chr(13)
say = say + " 中動(dòng)態(tài)顯示各參數(shù)。" + Chr(13)
say = MsgBox(say, vbOKOnly, "“大擺角有阻尼的擺”課件使用說(shuō)明:")
End Sub
Private Sub showLine_Click() '顯示圖線菜單處理
showLine.Checked = Not showLine.Checked '顯示圖線標(biāo)記取反
Line3.Visible = showLine.Checked '圖線坐標(biāo)軸的可見(jiàn)性
Line4.Visible = showLine.Checked
If Not showLine.Checked Then '如果隱去繪圖區(qū)
Form1.Line (x00 - 10, 0)-(x00 + w + 10, h * 2), 0, BF '遮蓋繪圖區(qū)
End If
End Sub
Private Sub Timer1_Timer() '定時(shí)器處理
Call compute '計(jì)算繪圖
End Sub
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -