📄 线电荷的电场.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 + -