?? 線電荷的電場.frm
字號:
VERSION 5.00
Begin VB.Form Form1
AutoRedraw = -1 'True
BackColor = &H00000000&
BorderStyle = 0 'None
Caption = "線電荷的電場"
ClientHeight = 8745
ClientLeft = 150
ClientTop = 525
ClientWidth = 11880
ControlBox = 0 'False
BeginProperty Font
Name = "MS Sans Serif"
Size = 24
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H00FFFFFF&
LinkTopic = "Form1"
ScaleHeight = 8745
ScaleWidth = 11880
ShowInTaskbar = 0 'False
StartUpPosition = 3 'Windows Default
Begin VB.Frame Frame1
BackColor = &H00000000&
Caption = " 修改參數 "
DragMode = 1 'Automatic
BeginProperty Font
Name = "宋體"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H0000FF00&
Height = 1095
Left = 8310
TabIndex = 0
Top = 6420
Visible = 0 'False
Width = 3315
Begin VB.HScrollBar HScroll1
Height = 200
LargeChange = 20
Left = 360
Max = 400
Min = 100
TabIndex = 1
Top = 660
Value = 100
Width = 2520
End
Begin VB.Label Label3
BackColor = &H00000000&
Caption = "線電荷密度="
BeginProperty Font
Name = "宋體"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H0000FFFF&
Height = 375
Left = 360
TabIndex = 3
Top = 360
Width = 1245
End
Begin VB.Label Label1
BackColor = &H00000000&
Caption = "100"
BeginProperty Font
Name = "宋體"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H000000FF&
Height = 375
Left = 1680
TabIndex = 2
Top = 360
Width = 1455
End
End
Begin VB.Image Image2
Height = 165
Left = 8580
Picture = "線電荷的電場.frx":0000
Top = 5400
Width = 165
End
Begin VB.Image Image1
Height = 165
Left = 5340
Picture = "線電荷的電場.frx":03A3
Top = 5340
Width = 165
End
Begin VB.Menu showMnu
Caption = "showMnu"
Visible = 0 'False
Begin VB.Menu readMe
Caption = "課件說明…"
End
Begin VB.Menu about
Caption = "關于本課件…"
End
Begin VB.Menu k1
Caption = "-"
End
Begin VB.Menu showV
Caption = "顯示等勢線"
Checked = -1 'True
End
Begin VB.Menu showE
Caption = "顯示電場線"
Checked = -1 'True
End
Begin VB.Menu showA
Caption = "顯示坐標軸"
Checked = -1 'True
End
Begin VB.Menu k2
Caption = "-"
End
Begin VB.Menu change
Caption = "顯示修改參數對話框"
Checked = -1 'True
End
Begin VB.Menu k3
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.1415927
Public x1 As Long, x2 As Long '左、右線電荷的X絕對坐標
Public y1 As Long, y2 As Long '左、右線電荷的Y絕對坐標
Public a As Long '兩電荷間距的一半
Public b As Double '線電荷的線電荷密度
Public c1 As Double, c2 As Double '等勢線線族和電場線族的任意常數
Public x0 As Integer, y0 As Integer '初始坐標原點
Public x00 As Integer, y00 As Integer '變化的坐標原點
Public j As Single '坐標軸旋轉角度
Public sm1 As Integer '等勢線疏密度
Public xs1 As Long 'xs1/sm1=等勢線線條數
Function sh(x As Double) As Double '雙曲正弦函數
sh = (Exp(x) - Exp(-x)) / 2
End Function
Function cth(x As Double) As Double '雙曲余切函數
cth = (Exp(2 * x) + 1) / (Exp(2 * x) - 1)
End Function
Function centerVX() As Double '求等勢線圓心X坐標
Dim x As Long
x = a * cth(c1 / 2 / b)
centerVX = x * Cos(j) '等勢線圓心在斜坐標系的X坐標
End Function
Function centerVY() As Double '求等勢線圓心Y坐標
Dim x As Long
x = a * cth(c1 / 2 / b)
centerVY = x * Sin(j) '等勢線圓心在斜坐標系的Y坐標
End Function
Function r1() As Double '求等勢線的半徑
r1 = a / sh(c1 / 2 / b) '等勢線的半徑
End Function
Function centerEX() As Double '求電場線圓心在斜坐標系的X坐標
centerEX = -c2 * Sin(j) '電場線圓心在斜坐標系的X坐標
End Function
Function centerEY() As Double '求電場線圓心在斜坐標系的Y坐標
centerEY = c2 * Cos(j) '電場線圓心在斜坐標系的Y坐標
End Function
Sub lineV() '畫一條特殊的等勢線,即兩電荷連線的垂直平分線
Dim startY As Long, endY As Long
If y1 = y2 Then
Form1.Line (x00, 0)-(x00, 2 * y0), vbRed '豎線
ElseIf x1 = x2 Then
Form1.Line (0, y00)-(2 * x0, y00), vbRed '橫線
Else '斜線
startY = y00 + x00 / Tan(j) '起點
endY = y00 - (Form1.Width - x00) / Tan(j) '終點
Form1.Line (0, startY)-(Form1.Width, endY), vbRed '畫斜線
End If
End Sub
Sub lineE() '畫一條特殊的電場線,即兩電荷的連線及延長線
Dim startY As Long, endY As Long
If y1 = y2 Then
Form1.Line (0, y00)-(2 * x0, y00), vbGreen '橫線
ElseIf x1 = x2 Then
Form1.Line (x00, 0)-(x00, 2 * y0), vbGreen '豎線
Else '斜線
startY = y00 - x00 * Tan(j) '起點
endY = y00 + (Form1.Width - x00) * Tan(j) '終點
Form1.Line (0, startY)-(Form1.Width, endY), vbGreen '畫斜線
End If
End Sub
Sub draw()
Form1.Cls '清除原來的圖形
DrawWidth = 1 '圖形線條寬度
'取得數值
b = HScroll1.Value '線電荷密度
x1 = Image1.Left + Image1.Width / 2 '左線電荷絕對坐標
x2 = Image2.Left + Image2.Width / 2 '右線電荷絕對坐標
y1 = Image1.Top + Image1.Height / 2 '左線電荷絕對坐標
y2 = Image2.Top + Image2.Height / 2 '右線電荷絕對坐標
x00 = (x2 + x1) / 2 '新的坐標原點
y00 = (y2 + y1) / 2
'新的電荷距離的一半
a = Sqr((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)) / 2
If x1 <> x2 Then
j = Atn((y2 - y1) / (x2 - x1)) '坐標軸旋轉角度
Else
j = 3.1415926 / 2 '防止分母為0
End If
'繪制坐標軸
If showA.Checked Then '如果要求繪制坐標軸
Form1.Line (0, y0)-(2 * x0, y0), vbWhite
Form1.Line (x0, 0)-(x0, 2 * y0), vbWhite
End If
'繪制等勢線族
If showV.Checked Then '如果要求繪制等勢線
For c1 = 1 To xs1 Step sm1
'左半族
Form1.Circle (x00 - centerVX(), y00 - centerVY()), r1(), vbRed
'右半族
Form1.Circle (x00 + centerVX(), y00 + centerVY()), r1(), vbRed
Next
Call lineV '一條特殊的等電勢線
End If
'繪制電場線族
If showE.Checked Then '如果要求繪制電場線
For c2 = 0 To 30000 Step 3000 - b * 4 '繪制電場線
If c2 < 8000 Then
Form1.Circle (x00 + centerEX(), y00 + centerEY()), _
Sqr(a * a + c2 * c2), vbGreen '下半族
Form1.Circle (x00 - centerEX(), y00 - centerEY()), _
Sqr(a * a + c2 * c2), vbGreen '上半族
Else
Dim k1 As Single, k2 As Single '下半族畫圓角度范圍
Dim k3 As Single, k4 As Single '上半族畫圓角度范圍
Dim k0 As Single, k00 As Single '中間變量
k0 = Atn(c2 / a) - j
k00 = k0 + Atn(a / c2) * 2
k1 = k0 + IIf(k0 < 0, 2 * PI, 0)
k2 = k00 + IIf(k00 < 0, 2 * PI, 0)
k3 = (PI + k0) - IIf((PI + k0) > 2 * PI, 2 * PI, 0)
k4 = (PI + k00) - IIf((PI + k00) > 2 * PI, 2 * PI, 0)
Form1.Circle (x00 + centerEX(), y00 + centerEY()), _
Sqr(a * a + c2 * c2), vbGreen, k1, k2 '下半族
Form1.Circle (x00 - centerEX(), y00 - centerEY()), _
Sqr(a * a + c2 * c2), vbGreen, k3, k4 '上半族
End If
Next
Call lineE '一條特殊的電場線
End If
End Sub
Private Sub about_Click()
Dim say As String
say = say + "“線電荷的電場”課件" + Chr(13) + Chr(13)
say = say + "制作:畢廣吉" + Chr(13)
say = say + "天津師范大學物理與電子信息學院" + Chr(13)
say = say + "2001年7月" + Chr(13)
say = MsgBox(say, vbOKOnly, "關于“線電荷的電場”課件")
End Sub
Private Sub change_Click() '是否顯示修改參數對話框
change.Checked = Not change.Checked '顯示標記取反
Frame1.Visible = change.Checked '根據標記決定是否顯示修改參數對話框
End Sub
Private Sub exitThis_Click() '結束程序
End
End Sub
Private Sub Form_Load()
'以下幾行設置窗體和坐標系
Form1.Width = Screen.Width
Form1.Height = Screen.Height
Form1.Left = 0
Form1.Top = 0
x0 = Form1.Width / 2 '坐標原點的坐標,畫坐標軸用,保持不變
y0 = Form1.Height / 2
'線電荷位置初始化
x2 = x0 + 2000 '右側電荷的絕對坐標
x1 = x0 - 2000 '左側電荷的絕對坐標
Image1.Left = x1 - Image1.Width / 2
Image2.Left = x2 - Image2.Width / 2
Image1.Top = y0 - Image1.Height / 2
Image2.Top = y0 - Image2.Height / 2
'參數初始化
b = 100 '線電荷密度
c1 = 100 '電勢
sm1 = 60 '等勢線疏密度
xs1 = 50000 'xs1/sm1=等勢線線條數
a = (x2 - x1) / 2 '兩電荷距離的一半
Frame1.Visible = change.Checked '是否打開修改參數對話框
Call draw '繪制
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()
change.Checked = False '去掉顯示修改參數對話框的對鉤
Frame1.Visible = False '關閉顯示修改參數對話框
End Sub
Private Sub HScroll1_Change()
Label1.Caption = HScroll1.Value '改變顯示
Call draw '重繪
End Sub
Private Sub HScroll1_Scroll()
Label1.Caption = HScroll1.Value '改變顯示
Call draw '重繪
End Sub
Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, _
x As Single, y As Single)
If Button = 1 Then '用鼠標左鍵拖動左線電荷
Image1.Left = Image1.Left + x - Image1.Width / 2 '左線電荷位置X
Image1.Top = Image1.Top + y - Image1.Height / 2 '左線電荷位置Y
Call draw '重繪
End If
End Sub
Private Sub Image2_MouseMove(Button As Integer, Shift As Integer, _
x As Single, y As Single)
If Button = 1 Then '用鼠標左鍵拖動左線電荷
Image2.Left = Image2.Left + x - Image2.Width / 2 '右線電荷位置X
Image2.Top = Image2.Top + y - Image2.Height / 2 '右線電荷位置Y
Call draw '重繪
End If
End Sub
Private Sub readMe_Click()
Dim say As String
say = say + "1.從快捷菜單中選擇欲顯示的一種或全部曲線。" + Chr(13)
say = say + "2.從快捷菜單中選擇是否顯示坐標軸。" + Chr(13)
say = say + "3.用鼠標可以任意拖動兩個電荷,全部曲線立即" + Chr(13)
say = say + " 改變。 " + Chr(13)
say = say + "4.通過選擇“顯示修改參數對話框”,可以修改線" + Chr(13)
say = say + " 電荷密度參數。" + Chr(13)
say = MsgBox(say, vbOKOnly, "“線電荷的電場”課件使用說明")
End Sub
Private Sub showA_Click()
showA.Checked = Not showA.Checked '顯示電場線標記取反
Call draw '重繪
End Sub
Private Sub showE_Click()
showE.Checked = Not showE.Checked '顯示電場線標記取反
Call draw '重繪
End Sub
Private Sub showV_Click()
showV.Checked = Not showV.Checked '顯示等電位線標記取反
Call draw '重繪
End Sub
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -