⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 线电荷的电场.frm

📁 动态演示线电荷的电场,visual basic.
💻 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 + -