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

📄 form1.frm

📁 一款电场线的教学软件可以自定义电荷多少
💻 FRM
📖 第 1 页 / 共 2 页
字号:
            Else
                min = Calculate_U(i, j)
            End If
        Next j
    Next i
    For k = 0 To 5
        For i = 0 To Picture1.ScaleWidth Step 5
            For j = 0 To Picture1.ScaleHeight Step 5
                If Abs(Calculate_U(i, j) - min + (max - min) * k / 5) <= Abs(Calculate_U(3000, 2000) - Calculate_U(3000, 2005)) Then
                    Picture1.PSet (i, j), QBColor(1)
                End If
            Next j
        Next i
    Next k
End Sub

Private Sub Draw_E()
    For i = 0 To n - 1
        If qq(i).q = 0 Then
            MsgBox "电量不能为零!!!!!"
            Exit Sub
        End If
    Next i
    Picture1.Cls
    Call Draw_Q
    m = 3000
    ds = 75
    Dim gx, gy, DX, DY As Double
    ReDim Rr_E(n), ex_E(n), ey_E(n)
    Picture1.DrawWidth = linewidth
    For i = 0 To n - 1
        For k = 0 To 35
            qq(i).x(k) = qq(i).qx + R * Cos(k * pi / 18 - pi / 36)
            qq(i).y(k) = qq(i).qy - R * Sin(k * pi / 18 - pi / 36)
        Next k
    Next i
    For i = 0 To n - 1
        If qq(i).q > 0 Then
            For k = 0 To 35
                gx = 0#
                gy = 0#
                For j = 0 To m
                    gx = 0#
                    gy = 0#
                    For t = 0 To n - 1
                        Rr_E(t) = Sqr((qq(i).x(k) - qq(t).qx) ^ 2 + (qq(i).y(k) - qq(t).qy) ^ 2)
                        ex_E(t) = qq(t).q * (qq(i).x(k) - qq(t).qx) / Rr_E(t) ^ 3
                        ey_E(t) = qq(t).q * (qq(i).y(k) - qq(t).qy) / Rr_E(t) ^ 3
                        gx = gx + ex_E(t)
                        gy = gy + ey_E(t)
                    Next t
                    e = Sqr(gx ^ 2 + gy ^ 2)
                    DX = ds * gx / e
                    DY = ds * gy / e
                    qq(i).x(k) = qq(i).x(k) + DX
                    qq(i).y(k) = qq(i).y(k) + DY
                    If IsPointValued(i, k) Then
                        Picture1.PSet (qq(i).x(k), qq(i).y(k)), QBColor(1)
                        If qq(i).x(k) < 0 Or qq(i).x(k) > Picture1.ScaleWidth Or qq(i).y(k) < 0 Or qq(i).y(k) > Picture1.ScaleHeight Then
                            ds = 200
                        Else: ds = 75
                        End If
                    End If
                Next j
            Next k
        End If
    Next i
End Sub

Private Function IsPointValued(ByVal ii As Integer, ByVal kk As Integer) As Boolean
    If qq(ii).x(kk) > 0 And qq(ii).x(kk) < Picture1.ScaleWidth And qq(ii).y(kk) > 0 And qq(ii).y(kk) < Picture1.ScaleHeight Then
        IsPointValued = True
    End If
    For j = 0 To n - 1
        If (qq(ii).x(kk) - qq(j).qx) ^ 2 + (qq(ii).y(kk) - qq(j).qy) ^ 2 < (R + 40) ^ 2 Then
            IsPointValued = False
        End If
    Next j
End Function

Private Function Min_cmp(ByVal x As Double, ByVal y As Double) As Double
    If x < y Then
        Min_cmp = x
    Else
        Min_cmp = y
    End If
End Function

Private Function Max_cmp(ByVal x As Double, ByVal y As Double)
    If x >= y Then
        Max_cmp = x
    Else
        Max_cmp = y
    End If
End Function

Private Sub Draw_U3()
    Dim density As Integer, u As Double
    density = 4
    Dim max, min, limit As Double
    max = Calculate_U(0, 0)
    min = Calculate_U(0, 0)
    Dim i As Integer
    Dim j As Integer
    For i = 0 To Picture1.ScaleWidth Step 10
        For j = 0 To Picture1.ScaleHeight Step 10
            If Calculate_U(i, j) >= max Then
                max = Calculate_U(i, j)
            Else
                min = Calculate_U(i, j)
            End If
        Next j
    Next i
    For i = 1 To density
        u = min + (max - min) * i / (density + 2)
        For j = 20 To 5980 Step 20
            For k = 20 To 3980 Step 20
                limit = Min_cmp(Abs(Calculate_U(j + 20, k) - u), Abs(Calculate_U(j - 20, k) - u))
                limit = Min_cmp(limit, Abs(Calculate_U(j, k + 20) - u))
                limit = Min_cmp(limit, Abs(Calculate_U(j, k - 20) - u))
                If Abs(Calculate_U(j, k) - u) < 0.00000000001 And IsPointValued(j, k) Then
                    Picture1.PSet (j, k), QBColor(10)
                End If
            Next k
        Next j
    Next i
End Sub

Private Sub Draw_U2()
    Dim pos_index, neg_index, density, m As Integer
    Dim U_X1(), U_Y1(), U_X2(), U_Y2() As Double
    ReDim Rr_U(n), ex_U(n), ey_U(n)
    Dim gx, gy, DX, DY As Double
    pos_index = 0
    neg_index = 0
    density = 6
    m = 150
    ds = 20
    For i = 1 To n - 1
        If qq(i).q >= qq(pos_index).q Then
            pos_index = i
        End If
        If qq(i).q < qq(pos_index).q Then
            neg_index = i
        End If
    Next i
    ReDim U_X1(density), U_Y1(density), U_X2(density), U_Y2(density)
    For i = 1 To density
        U_X1(i - 1) = qq(pos_index).qx + (qq(neg_index).qx - qq(pos_index).qx) * i / (density + 1)
        U_Y1(i - 1) = qq(pos_index).qy + (qq(neg_index).qy - qq(pos_index).qy) * i / (density + 1)
        U_X2(i - 1) = qq(pos_index).qx + (qq(neg_index).qx - qq(pos_index).qx) * i / (density + 1)
        U_Y2(i - 1) = qq(pos_index).qy + (qq(neg_index).qy - qq(pos_index).qy) * i / (density + 1)
    Next i
    For i = 0 To density - 1
        For j = 0 To m
            gx = 0#
            gy = 0#
            For t = 0 To n - 1
                    Rr_U(t) = Sqr((qq(t).qx - U_X1(i)) ^ 2 + (qq(t).qy - U_Y1(i)) ^ 2)
                    ex_U(t) = qq(t).q * (U_X1(i) - qq(t).qx) / Rr_U(t) ^ 3
                    ey_U(t) = qq(t).q * (U_Y1(i) - qq(t).qy) / Rr_U(t) ^ 3
                    gx = gx + ex_U(t)
                    gy = gy + ey_U(t)
            Next t
            e = Sqr(gx ^ 2 + gy ^ 2)
            DX = -ds * gy / e
            DY = ds * gx / e
            U_X1(i) = U_X1(i) + DX
            U_Y1(i) = U_Y1(i) + DY
            gx = 0#
            gy = 0#
            For t = 0 To n - 1
                    Rr_U(t) = Sqr((qq(t).qx - U_X2(i)) ^ 2 + (qq(t).qy - U_Y2(i)) ^ 2)
                    ex_U(t) = qq(t).q * (U_X2(i) - qq(t).qx) / Rr_U(t) ^ 3
                    ey_U(t) = qq(t).q * (U_Y2(i) - qq(t).qy) / Rr_U(t) ^ 3
                    gx = gx + ex_U(t)
                    gy = gy + ey_U(t)
            Next t
            e = Sqr(gx ^ 2 + gy ^ 2)
            DX = ds * gy / e
            DY = -ds * gx / e
            U_X2(i) = U_X2(i) + DX
            U_Y2(i) = U_Y2(i) + DY
           Rem If IsPointValued(Int(U_X1(i)), Int(U_Y1(i))) Then
                Picture1.PSet (Int(U_X1(i)), Int(U_Y1(i))), QBColor(10)
                Picture1.PSet (Int(U_X2(i)), Int(U_Y2(i))), QBColor(10)
           Rem End If
        Next j
    Next i
End Sub


Private Function Exist_pos() As Boolean
    Exist_pos = False
    For i = 0 To n - 1
    If qq(i).q > 0 Then
        Exist_pos = True
    End If
    Next i
End Function

Private Function Exist_neg() As Boolean
    Exist_neg = False
    For i = 0 To n - 1
    If qq(i).q < 0 Then
        Exist_neg = True
    End If
    Next i
End Function

Private Function Exist_pos_neg() As Boolean
    Exist_pos_neg = False
    If Exsit_pos And Exsit_neg Then
        Exist_pos_neg = True
    End If
End Function

Private Function Between_pos(ByVal x As Double, ByVal y As Double, ByVal nn As Integer) As Boolean
    Between_pos = False
    If nn >= 3 Then
        For i = 1 To nn - 1
        If (Calculate_U(x, y) >= u_pos(i) And Calculate_U(x, y) <= u_pos(i + 1)) Or (Calculate_U(x, y) <= u_pos(i) And Calculate_U(x, y) >= u_pos(i + 1)) Then
            Between_pos = True
        End If
        Next i
    End If
End Function

Private Function Between_neg(ByVal x As Double, ByVal y As Double, ByVal nn As Integer) As Boolean
    Between_neg = False
    If nn >= 3 Then
        For i = 1 To nn - 1
        If (Calculate_U(x, y) >= u_neg(i) And Calculate_U(x, y) <= u_neg(i + 1)) Or (Calculate_U(x, y) <= u_neg(i) And Calculate_U(x, y) >= u_neg(i + 1)) Then
            Between_neg = True
        End If
        Next i
    End If
End Function

Private Function U_MIN(ByVal i As Integer) As Integer
    min = Calculate_U(qq(i).qx, qq(i).qy - 200)
    Index = 1
    If min > Calculate_U(qq(i).qx, qq(i).qy + 200) Then
    min = Calculate_U(qq(i).qx, qq(i).qy + 200)
    Index = 2
    End If
    If min > Calculate_U(qq(i).qx - 200, qq(i).qy) Then
    min = Calculate_U(qq(i).qx - 200, qq(i).qy)
    Index = 3
    End If
    If min > Calculate_U(qq(i).qx + 200, qq(i).qy) Then
    min = Calculate_U(qq(i).qx + 200, qq(i).qy)
    Index = 4
    End If
    U_MIN = Index
End Function

Private Function U_MAX(ByVal i As Integer) As Integer
    max = Calculate_U(qq(i).qx, qq(i).qy - 200)
    Index = 1
    If max < Calculate_U(qq(i).qx, qq(i).qy + 200) Then
    min = Calculate_U(qq(i).qx, qq(i).qy + 200)
    Index = 2
    End If
    If max < Calculate_U(qq(i).qx - 200, qq(i).qy) Then
    min = Calculate_U(qq(i).qx - 200, qq(i).qy)
    Index = 3
    End If
    If max < Calculate_U(qq(i).qx + 200, qq(i).qy) Then
    min = Calculate_U(qq(i).qx + 200, qq(i).qy)
    Index = 4
    End If
    U_MAX = Index
End Function

Private Sub Draw_U()
    For i = 0 To n - 1
        If qq(i).q = 0 Then
            MsgBox "电量不能为零!!!!!"
            Exit Sub
        End If
    Next i
    Picture1.DrawWidth = linewidth
    ReDim u_pos(0), u_neg(0) As Double
    Dim un_pos, un_neg As Integer
    Dim x, y As Double
    un_pos = 0
    un_neg = 0
    m = 1000
    ds = 25
    For i = 0 To n - 1
    If qq(i).q > 0 Then
        start = U_MIN(i)
        Select Case start
        Case 1
            start_x = qq(i).qx
            start_y = qq(i).qy - 200
        Case 2
            start_x = qq(i).qx
            start_y = qq(i).qy + 200
        Case 3
            start_x = qq(i).qx - 200
            start_y = qq(i).qy
        Case 4
            start_x = qq(i).qx + 200
            start_y = qq(i).qy
        End Select
        Radius = 1000
        For j = 0 To 4
            If un_pos <= 2 Or j <= 1 Or (Not Between_pos(start_x, start_y, un_pos)) Then
                    x = start_x
                    y = start_y
                    For k = 0 To m
                        gx = 0#
                        gy = 0#
                        For t = 0 To n - 1
                            Rr = Sqr((qq(t).qx - x) ^ 2 + (qq(t).qy - y) ^ 2)
                            ex = qq(t).q * (x - qq(t).qx) / Rr ^ 3
                            ey = qq(t).q * (y - qq(t).qy) / Rr ^ 3
                            gx = gx + ex
                            gy = gy + ey
                        Next t
                        e = Sqr(gx ^ 2 + gy ^ 2)
                        DX = -ds * gy / e
                        DY = ds * gx / e
                        x = x + DX
                        y = y + DY
                        Picture1.PSet (Int(x), Int(y)), QBColor(10)
                    Next k
                    un_pos = un_pos + 1
                    ReDim Preserve u_pos(un_pos)
                    u_pos(un_pos) = Calculate_U(start_x, start_y)
                    gx = 0#
                    gy = 0#
                    For t = 0 To n - 1
                        Rr = Sqr((qq(t).qx - start_x) ^ 2 + (qq(t).qy - start_y) ^ 2)
                        ex = qq(t).q * (start_x - qq(t).qx) / Rr ^ 3
                        ey = qq(t).q * (start_y - qq(t).qy) / Rr ^ 3
                        gx = gx + ex
                        gy = gy + ey
                    Next t
                    e = Sqr(gx ^ 2 + gy ^ 2)
                    DX = -Radius * gy / e
                    DY = Radius * gx / e
                    start_x = start_x + DX
                    start_y = start_y + DY
                    
            End If
        Next j
    Else
        start = U_MAX(i)
        Select Case start
        Case 1
            start_x = qq(i).qx
            start_y = qq(i).qy - 200
        Case 2
            start_x = qq(i).qx
            start_y = qq(i).qy + 200
        Case 3
            start_x = qq(i).qx - 200
            start_y = qq(i).qy
        Case 4
            start_x = qq(i).qx + 200
            start_y = qq(i).qy
        End Select
        Radius = 1000
        For j = 0 To 4
            If un_neg <= 2 Or j <= 1 Or (Not Between_neg(start_x, start_y, un_neg)) Then
                    x = start_x
                    y = start_y
                    For k = 0 To m
                        gx = 0#
                        gy = 0#
                        For t = 0 To n - 1
                            Rr = Sqr((qq(t).qx - x) ^ 2 + (qq(t).qy - y) ^ 2)
                            ex = qq(t).q * (x - qq(t).qx) / Rr ^ 3
                            ey = qq(t).q * (y - qq(t).qy) / Rr ^ 3
                            gx = gx + ex
                            gy = gy + ey
                        Next t
                        e = Sqr(gx ^ 2 + gy ^ 2)
                        DX = -ds * gy / e
                        DY = ds * gx / e
                        x = x + DX
                        y = y + DY

                            Picture1.PSet (Int(x), Int(y)), QBColor(10)


                    Next k
                    un_neg = un_neg + 1
                    ReDim Preserve u_neg(un_neg)
                    u_neg(un_neg) = Calculate_U(start_x, start_y)
                    gx = 0#
                    gy = 0#
                    For t = 0 To n - 1
                        Rr = Sqr((qq(t).qx - start_x) ^ 2 + (qq(t).qy - start_y) ^ 2)
                        ex = qq(t).q * (start_x - qq(t).qx) / Rr ^ 3
                        ey = qq(t).q * (start_y - qq(t).qy) / Rr ^ 3
                        gx = gx + ex
                        gy = gy + ey
                    Next t
                    e = Sqr(gx ^ 2 + gy ^ 2)
                    DX = -Radius * gy / e
                    DY = Radius * gx / e
                    start_x = start_x + DX
                    start_y = start_y + DY
                    
            End If
        Next j
    
    End If
    Next i
End Sub
Rem ####################################################################################




Private Sub Command4_Click()
    Me.Hide
    Load Form4
    Form4.Visible = True
End Sub
Rem ####################################################################################





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -