怎样用VB对粒子散射实验的过程进行模拟,怎样动态地显示出来,怎样建立接收屏去接收这些散射的粒子,又怎样使电脑对接收到的粒子进行自动统计出来?

解决方案 »

  1.   

    哦,是这样呀
    240  HGR
    250  HCOLOR=3
    260  HPLOT 5,90
    270  HPLOT 7,88 TO 7,86 TO 1,86 TO 1,94 TO 7,92
    280  HPLOT 65,70 TO 65,110 TO 60,110 TO 60,70 TO 65,70
    290  HCOLOR=3
    300  GOSUB 800
    310  IF I>1 THEN GO TO 390
    320  C1=198:C2=90
    330  R0=90
    340  FOR X1=-R0 TO R0
    350  Y1=INT(SQR(R0^2-X1^2))
    360  HPLOT C1+X1,C2+Y1
    370  HPLOT C1+X1,C2-Y1
    380  NEXT X1
    390  FOR J=1 TO 55
    400  HCOLOR=3
    410  HPLOT 5+J,90
    420  HCOLOR=0
    430  HPLOT 5+J-1,90
    440  NEXT J
    450  K=INT(Y)
    460  IF F<0.5 THEN K=-INT(Y)
    470  FOR L=1 TO INT(X)
    480  IF INT(X)=0 THEN X=1
    485  L1=90+L*(K/INT(X))
    490  HPLOT95+L,L1
    500  HCOLOR=0
    510  HPLOT 95+L-1,90+(L-1)*(K/INT(X))
    520  HPLOT 95+L,L1
    530  HCOLOR=3
    540  NEXT L
    550  IF INT(Y)=0 THEN Y=1
    560  HPLOT C1+O*X2,C2+K/INT(Y)*Y2
    570  FOR U=0 TO 20
    580  D(U)=U*9 
    590  NEXT U
    600  IF L1=D(10) THEN V=10:GOTO 629
    605  IF L1>D(10) THEN GOTO 620
    610  FOR V=0 TO 9
    615  IF L1<D(V) THEN NEXT
    618  GOTO629
    620  FOR U=11 TO 20
    625  IF L1>D(U) THEN NEXT U
    628  V=20-U
    629  S(V)=S(V)+1
    630  PRINT TAB(20);"***";INT(ATN(ABS(10-V)*9/INT(X))*180/3.1415926);"=";S(V);"***"
    640  HCOLOR=0
    650  GOSUB 800
    660  NEXT I
    670  FOR V=1 TO 10
    680  PRINT INT(ATN(ABS(10-V)*9/INT(X))*180/3.1415926);"=";S(V);"___"
    690  NEXT V
    695  PRINT"REFLELTED";V1
    700  GOTO 120
    800  IF INT(X)=0 THEN X=1
    805  HPLOT 65+INT(X),0 TO 65+INT(X),180
    810  FOR G=0 TO 180 STEP 9
    820  HPLOT 65+INT(X),G TO 67+INT(X),G
    830  NEXT G
    840  RETURN
    上面的程序中的绘图命令在VB中用不了,应该怎样将其转换为VB中的绘图语句,使其能在VB中运行。请各位大虾指点指点,本菜鸟感激不尽!!
      

  2.   

    应用到的公式是  dω/dΩ=(1/4πε)^2(2Z^2/Mv^2)^2*nt/R(sinθ/2)^4
    程序要模拟的是一束粒子与靶碰撞后发生散射,射到接收屏上;对接收屏进行划分区域,对射到各个区域上的粒子进行分别统计,然后将结果打印出来。再次希望各位大虾能帮助我这个菜菜鸟。
      

  3.   

    应用到的公式是  dω/dΩ=(1/4πε)^2(2Z^2/Mv^2)^2*nt/R(sinθ/2)^4
    程序要模拟的是一束粒子与靶碰撞后发生散射,射到接收屏上;对接收屏进行划分区域,对射到各个区域上的粒子进行分别统计,然后将结果打印出来。再次希望各位大虾能帮助我这个菜菜鸟。
      

  4.   

    应用到的公式是  dω/dΩ=(1/4πε)^2(2Z^2/Mv^2)^2*nt/R(sinθ/2)^4
    程序要模拟的是一束粒子与靶碰撞后发生散射,射到接收屏上;对接收屏进行划分区域,对射到各个区域上的粒子进行分别统计,然后将结果打印出来。再次希望各位大虾能帮助我这个菜菜鸟。
      

  5.   

    Option Explicit
    Dim HCOLOR As LongDim lastx As Long
    Dim lasty As LongDim x As Long
    Dim i As Long
    Dim g As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False)
        If bset Then
            lastx = xx
            lasty = yy
            Me.PSet (lastx, lasty), HCOLOR
        Else
            Me.Line (lastx, lasty)-(xx, yy), HCOLOR
            lastx = xx
            lasty = yy
        End If
    End SubPrivate Sub sub800()
        If Int(x) = 0 Then
            x = 1
        End If
        HPLOT 65 + Int(x), 0, True
        HPLOT 65 + Int(x), 180
        For g = 0 To 180 Step 9
            HPLOT 65 + Int(x), g, True
            HPLOT 67 + Int(x), g
        Next g
    End SubPrivate Sub Command1_Click()    '哦,是这样呀
        'HGR
        'HCOLOR = 3
        HCOLOR = vbRed
        
        HPLOT 5, 90, True
        HPLOT 7, 88
        HPLOT 7, 86
        HPLOT 1, 86
        HPLOT 1, 94
        HPLOT 7, 92
        
        HPLOT 65, 70, True
        HPLOT 65, 110
        HPLOT 60, 110
        HPLOT 60, 70
        HPLOT 65, 70
        
        HCOLOR = vbRed
        Call sub800
        
        #If 0 Then
    310          If i > 1 Then GoTo 390
    320          C1 = 198: C2 = 90
    330          R0 = 90
    340          For X1 = -R0 To R0
    350          Y1 = Int(Sqr(R0 ^ 2 - X1 ^ 2))
    360          HPLOT C1 + X1, C2 + Y1
    370          HPLOT C1 + X1, C2 - Y1
    380          Next X1
    390          For j = 1 To 55
    400          HCOLOR = 3
    410          HPLOT 5 + j, 90
    420          HCOLOR = 0
    430          HPLOT 5 + j - 1, 90
    440          Next j
    450          K = Int(y)
    460          If F < 0.5 Then K = -Int(y)
    470          For L = 1 To Int(x)
    480          If Int(x) = 0 Then x = 1
    485          L1 = 90 + L * (K / Int(x))
    490          HPLOT95 L, L1
    500          HCOLOR = 0
    510          HPLOT 95 + L - 1, 90 + (L - 1) * (K / Int(x))
    520          HPLOT 95 + L, L1
    530          HCOLOR = 3
    540          Next L
    550          If Int(y) = 0 Then y = 1
    560          HPLOT C1 + O * X2, C2 + K / Int(y) * Y2
    570          For U = 0 To 20
    580          D(U) = U * 9
    590          Next U
    600          If L1 = D(10) Then V = 10: GoTo 629
    605          If L1 > D(10) Then GoTo 620
    610          For V = 0 To 9
    615          If L1 < D(V) Then Next
    618          GOTO629
    620          For U = 11 To 20
    625          If L1 > D(U) Then Next U
    628          V = 20 - U
    629          S(V) = S(V) + 1
    630          Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; S(V); "***"
    640          HCOLOR = 0
    650          GoSub 800
    660          Next i
    670          For V = 1 To 10
    680          Print Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; S(V); "___"
    690          Next V
    695          Print "REFLELTED"; V1
    700          GoTo 120
    #End If
        '上面的程序中的绘图命令在VB中用不了,应该怎样将其转换为VB中的绘图语句,使其能在VB中运行。请各位大虾指点指点,本菜鸟感激不尽!!End SubPrivate Sub Form_Load()
        Me.ScaleMode = 3
    End Sub我也是从gwbasic过来的,怎么这些指令看不懂呢?先写这些,今天先下了。
      

  6.   

    谢谢了jennyvenus !!!!!!
      

  7.   

    'Option Explicit
    Dim HCOLOR As LongDim lastx As Long
    Dim lasty As Long
    Dim d(0 To 100) As Long
    Dim s(0 To 100) As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False)
        If bset Then
            lastx = xx
            lasty = yy
            Me.PSet (lastx, lasty), HCOLOR
        Else
            Me.Line (lastx, lasty)-(xx, yy), HCOLOR
            lastx = xx
            lasty = yy
        End If
    End SubPrivate Sub sub800()
        If Int(x) = 0 Then
            x = 1
        End If
        HPLOT 65 + Int(x), 0, True
        HPLOT 65 + Int(x), 180
        For g = 0 To 180 Step 9
            HPLOT 65 + Int(x), g, True
            HPLOT 67 + Int(x), g
        Next g
    End SubPrivate Sub Command1_Click()label120:
        HCOLOR = vbRed
        
        HPLOT 5, 90, True
        HPLOT 7, 88
        HPLOT 7, 86
        HPLOT 1, 86
        HPLOT 1, 94
        HPLOT 7, 92
        
        HPLOT 65, 70, True
        HPLOT 65, 110
        HPLOT 60, 110
        HPLOT 60, 70
        HPLOT 65, 70
        
        HCOLOR = vbRed
        Call sub800
        
        If i > 1 Then
            GoTo label390
        End If    c1 = 198
        c2 = 90
        r0 = 90
        For x1 = -r0 To r0
            y1 = Int(Sqr(r0 ^ 2 - x1 ^ 2))
            HPLOT c1 + x1, c2 + y1, True
            HPLOT c1 + x1, c2 - y1
        Next x1
    label390:
        For j = 1 To 55
            HCOLOR = vbRed
            HPLOT 5 + j, 90
            HCOLOR = vbGreen
            HPLOT 5 + j - 1, 90
        Next j
        k = Int(y)
        
        If F < 0.5 Then
            k = -Int(y)
        End If
        
        For L = 1 To Int(x)
            If Int(x) = 0 Then
                x = 1
            End If
            L1 = 90 + L * (k / Int(x))
            HPLOT 95 + L, L1
            HCOLOR = vbGreen
            HPLOT 95 + L - 1, 90 + (L - 1) * (k / Int(x))
            HPLOT 95 + L, L1
            HCOLOR = vbRed
        Next L
        
        If Int(y) = 0 Then
            y = 1
        End If
        HPLOT c1 + O * X2, c2 + k / Int(y) * Y2
        
        For U = 0 To 20
            d(U) = U * 9
        Next U
        
        If L1 = d(10) Then
            V = 10
            GoTo label629
        End If
        
        If L1 > d(10) Then
            GoTo label620
        End If
        
        For V = 0 To 9
            If L1 < d(V) Then
                'NEXT
                'V = V + 1
                GoTo LABEL_VVVV
            End If
    LABEL_VVVV:
        Next V
        
        GoTo label629label620:
        For U = 11 To 20
            If L1 > d(U) Then
                'Next U
                'U = U + 1
                GoTo LABEL_UUUU
            End If
            V = 20 - U
    label629:
            s(V) = s(V) + 1
            Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; s(V); "***"
            HCOLOR = vbGreen
            Call sub800
    LABEL_UUUU:
        Next U
        
        For V = 1 To 10
            Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(x)) * 180 / 3.1415926); "="; s(V); "___"
        Next V
        Print "REFLELTED"; V1
        GoTo label120End SubPrivate Sub Form_Load()
        Me.AutoRedraw = True
        Me.ScaleMode = 3
    End Sub
    还有很多错误
      

  8.   

    http://www.waterfriends.com/post/31.html这里面有apple basic的语法,所说还有apple basic的模拟程序,hplot这个函数俺猜错了,看样子是点一个点。
      

  9.   

    我去看了,可是看不懂,还是不懂得怎样改。上面的代码我昨晚还有前面的一小部分没有写上去,本以为自己可以搞定的,现在看来是没办法了,本人实在太菜了。所以把那部分也附上,希望大虾们多多指点10 INPUT"P=";P
    20 INPUT"M=";M
    30 INPUT"Z=";Z
    40 Z1=2
    50 C=6.02E23
    60 E=1.6E-19
    70 R1=1E-8
    80 R=30
    90 INPUT"T=";T
    100 INPUT"W=";W
    110 N=C*P/M
    120INPUT"Q=";Q
    125 IF Q=0 THEN END
    130 FOR I=1 TO Q
    140 F=RND
    150 A=1.44E-7
    160 H = (N * T / 4 * R ^ 2) * ((z1 * Z / 2 * W) ^ 2 * A ^ 2 / F) ^ (1 / 4)
    164 IF H>1 THEN V1=V1+1
    165 IF H>1 THEN PRINT"NO ENOUGH'W'OR TOOTHICK'T'":NEXT I
    170 B=2*ATN(H/SQR(1-H^2))
    180 X=ABS(R*COS(B)):Y=ABS(R*SIN(B))
    190 D=2*3.1415926*RND
    200 O=-1
    210 IF D<90*3.1415926/180 OR D>270*3.1415926/180 THEN O=1
    220 X2=ABS(Y*COS(D)):Y2=ABS(Y*SIN(D))
    230 IF I>1 THEN GOTO 290
      

  10.   

    'Option Explicit
    Dim HCOLOR As LongDim lastx As Long
    Dim lasty As Long
    Dim d(0 To 100) As Long
    Dim s(0 To 100) As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False)
        If bset Then
            lastx = xx
            lasty = yy
            Me.PSet (lastx, lasty), HCOLOR
        Else
            Me.Line (lastx, lasty)-(xx, yy), HCOLOR
            lastx = xx
            lasty = yy
        End If
    End SubPrivate Sub sub800()
        If Int(X) = 0 Then
            X = 1
        End If
        HPLOT 65 + Int(X), 0, True
        HPLOT 65 + Int(X), 180
        For g = 0 To 180 Step 9
            HPLOT 65 + Int(X), g, True
            HPLOT 67 + Int(X), g
        Next g
    End SubPrivate Sub Command1_Click()
        p = InputBox("P=")
        m = InputBox("M=")
        z = InputBox("Z=")
        z1 = 2
        C = 6.02E+23
        E = 1.6E-19
        R1 = 0.00000001
        R = 30
        t = InputBox("T=")
        w = InputBox("W=")
        N = C * p / m
    label120:
        Q = InputBox("Q=")
        If Q = 0 Then
            End
        End If
        For I = 1 To Q
            F = Rnd
            A = 0.000000144
            H = (N * t / 4 * R ^ 2) * ((z1 * z / 2 * w) ^ 2 * A ^ 2 / F) ^ (1 / 4)
            If H > 1 Then
                V1 = V1 + 1
            End If
            If H > 1 Then
                Debug.Print "NO ENOUGH'W'OR TOOTHICK'T'"
            End If
        Next I
        B = 2 * Atn(H / Sqr(1 - H ^ 2))
        X = Abs(R * Cos(B))
        Y = Abs(R * Sin(B))
        dd = 2 * 3.1415926 * Rnd
        O = -1
        If dd < 90 * 3.1415926 / 180 Or dd > 270 * 3.1415926 / 180 Then
            O = 1
        End If
        X2 = Abs(Y * Cos(dd))
        Y2 = Abs(Y * Sin(dd))
        If I > 1 Then
            GoTo label290
        End If
        HCOLOR = vbRed
        
        HPLOT 5, 90, True
        HPLOT 7, 88
        HPLOT 7, 86
        HPLOT 1, 86
        HPLOT 1, 94
        HPLOT 7, 92
        
        HPLOT 65, 70, True
        HPLOT 65, 110
        HPLOT 60, 110
        HPLOT 60, 70
        HPLOT 65, 70
    label290:
        HCOLOR = vbRed
        Call sub800
        
        If I > 1 Then
            GoTo label390
        End If    c1 = 198
        c2 = 90
        r0 = 90
        For X1 = -r0 To r0
            Y1 = Int(Sqr(r0 ^ 2 - X1 ^ 2))
            HPLOT c1 + X1, c2 + Y1, True
            HPLOT c1 + X1, c2 - Y1
        Next X1
    label390:
        For j = 1 To 55
            HCOLOR = vbRed
            HPLOT 5 + j, 90
            HCOLOR = vbGreen
            HPLOT 5 + j - 1, 90
        Next j
        k = Int(Y)
        
        If F < 0.5 Then
            k = -Int(Y)
        End If
        
        For L = 1 To Int(X)
            If Int(X) = 0 Then
                X = 1
            End If
            L1 = 90 + L * (k / Int(X))
            HPLOT 95 + L, L1
            HCOLOR = vbGreen
            HPLOT 95 + L - 1, 90 + (L - 1) * (k / Int(X))
            HPLOT 95 + L, L1
            HCOLOR = vbRed
        Next L
        
        If Int(Y) = 0 Then
            Y = 1
        End If
        HPLOT c1 + O * X2, c2 + k / Int(Y) * Y2
        
        For U = 0 To 20
            d(U) = U * 9
        Next U
        
        If L1 = d(10) Then
            V = 10
            GoTo label629
        End If
        
        If L1 > d(10) Then
            GoTo label620
        End If
        
        For V = 0 To 9
            If L1 < d(V) Then
                'NEXT
                'V = V + 1
                GoTo LABEL_VVVV
            End If
    LABEL_VVVV:
        Next V
        
        GoTo label629label620:
        For U = 11 To 20
            If L1 > d(U) Then
                'Next U
                'U = U + 1
                GoTo LABEL_UUUU
            End If
            V = 20 - U
    label629:
            s(V) = s(V) + 1
            Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "***"
            HCOLOR = vbGreen
            Call sub800
    LABEL_UUUU:
        Next U
        
        For V = 1 To 10
            Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "___"
        Next V
        Print "REFLELTED"; V1
        GoTo label120End SubPrivate Sub Form_Load()
        Me.AutoRedraw = True
        Me.ScaleMode = 3
    End Sub我粗略改完了,没有进行过核对,且不知道那些输入的东西应该输多少,现在运行仍然是溢出。
      

  11.   

    我运行了,但是没有得到想象中的结果。
    Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "***" 和
    Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "___"
    语句没有运行,在窗体上显示出结果。将Debug改成Form1再运行显示的结果都是0.
    我将一组输入的数据给你,你运行看看,P=19,M=197,Z=79,T=0.00000002, W=4000000,Q=200
    我输入后得不到结果可又不懂调试,相信你一定能进行调试的
      

  12.   


    'Option Explicit
    Dim HCOLOR As LongDim lastx As Long
    Dim lasty As Long
    Dim d(0 To 100) As Long
    Dim s(0 To 100) As LongPrivate Sub HPLOT(ByVal xx As Long, ByVal yy As Long, Optional ByVal bset As Boolean = False)
        If bset Then
            lastx = xx
            lasty = yy
            Me.PSet (lastx, lasty), HCOLOR
        Else
            Me.Line (lastx, lasty)-(xx, yy), HCOLOR
            lastx = xx
            lasty = yy
        End If
    End SubPrivate Sub sub800()
        If Int(X) = 0 Then
            X = 1
        End If
        HPLOT 65 + Int(X), 0, True
        HPLOT 65 + Int(X), 180
        For g = 0 To 180 Step 9
            HPLOT 65 + Int(X), g, True
            HPLOT 67 + Int(X), g
        Next g
    End SubPrivate Sub Command1_Click()
        On Error Resume Next
        'p = InputBox("P=")
        P = 19
        'm = InputBox("M=")
        M = 197
        'z = InputBox("Z=")
        Z = 79    z1 = 2
        C = 6.02E+23
        E = 1.6E-19
        R1 = 0.00000001
        R = 30
        't = InputBox("T=")
        T = 0.00000002
        'w = InputBox("W=")
        W = 4000000
        N = C * P / M
        
    label120:
        'Q = InputBox("Q=")
        Q = 200
        If Q = 0 Then
            End
        End If
        For I = 1 To Q
            F = Rnd
            A = 0.000000144
            H = (N * T / 4 * R ^ 2) * ((z1 * Z / 2 * W) ^ 2 * A ^ 2 / F) ^ (1 / 4)
            If H > 1 Then
                V1 = V1 + 1
            End If
            If H > 1 Then
                Debug.Print "NO ENOUGH'W'OR TOOTHICK'T'"
            End If
            DoEvents
        Next I
        B = 2 * Atn(H / Sqr(1 - H ^ 2))
        X = Abs(R * Cos(B))
        Y = Abs(R * Sin(B))
        dd = 2 * 3.1415926 * Rnd
        O = -1
        If dd < 90 * 3.1415926 / 180 Or dd > 270 * 3.1415926 / 180 Then
            O = 1
        End If
        X2 = Abs(Y * Cos(dd))
        Y2 = Abs(Y * Sin(dd))
        If I > 1 Then
            GoTo label290
        End If
        HCOLOR = vbRed
        
        HPLOT 5, 90, True
        HPLOT 7, 88
        HPLOT 7, 86
        HPLOT 1, 86
        HPLOT 1, 94
        HPLOT 7, 92
        
        HPLOT 65, 70, True
        HPLOT 65, 110
        HPLOT 60, 110
        HPLOT 60, 70
        HPLOT 65, 70
    label290:
        HCOLOR = vbRed
        Call sub800
        
        If I > 1 Then
            GoTo label390
        End If    c1 = 198
        c2 = 90
        r0 = 90
        For X1 = -r0 To r0
            Y1 = Int(Sqr(r0 ^ 2 - X1 ^ 2))
            HPLOT c1 + X1, c2 + Y1, True
            HPLOT c1 + X1, c2 - Y1
        Next X1
    label390:
        For j = 1 To 55
            HCOLOR = vbRed
            HPLOT 5 + j, 90
            HCOLOR = vbGreen
            HPLOT 5 + j - 1, 90
        Next j
        k = Int(Y)
        
        If F < 0.5 Then
            k = -Int(Y)
        End If
        
        For L = 1 To Int(X)
            If Int(X) = 0 Then
                X = 1
            End If
            L1 = 90 + L * (k / Int(X))
            HPLOT 95 + L, L1
            HCOLOR = vbGreen
            HPLOT 95 + L - 1, 90 + (L - 1) * (k / Int(X))
            HPLOT 95 + L, L1
            HCOLOR = vbRed
        Next L
        
        If Int(Y) = 0 Then
            Y = 1
        End If
        HPLOT c1 + O * X2, c2 + k / Int(Y) * Y2
        
        For U = 0 To 20
            d(U) = U * 9
        Next U
        
        If L1 = d(10) Then
            V = 10
            GoTo label629
        End If
        
        If L1 > d(10) Then
            GoTo label620
        End If
        
        For V = 0 To 9
            If L1 < d(V) Then
                'NEXT
                'V = V + 1
                GoTo LABEL_VVVV
            End If
    LABEL_VVVV:
        Next V
        
        GoTo label629label620:
        For U = 11 To 20
            If L1 > d(U) Then
                'Next U
                'U = U + 1
                GoTo LABEL_UUUU
            End If
            V = 20 - U
    label629:
            s(V) = s(V) + 1
            Debug.Print Tab(20); "***"; Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "***"
            HCOLOR = vbGreen
            Call sub800
    LABEL_UUUU:
        Next U
        
        For V = 1 To 10
            Debug.Print Int(Atn(Abs(10 - V) * 9 / Int(X)) * 180 / 3.1415926); "="; s(V); "___"
        Next V
        Debug.Print "REFLELTED"; V1
        DoEvents
        GoTo label120End SubPrivate Sub Form_Load()
        Me.AutoRedraw = True
        Me.ScaleMode = 3
    End Sub
    现在每次运行到,    B = 2 * Atn(H / Sqr(1 - H ^ 2))
    就溢出,H极大,我在最前面加了on error resume next,程序运行也没有什么改善。
      

  13.   

    是呀,我也有同感,所以今天我把公式改了一下,将
    H = (N * T / 4 * R ^ 2) * ((z1 * Z / 2 * W) ^ 2 * A ^ 2 / F) ^ (1 / 4)
    改为  H = ((N * T / 16 * R) * ((z1 * Z / W) ^ 2 * A ^ 2 / F)) ^ (1 / 4)
    H值变小了,可是好像不能循环,循环语句好像有点问题。麻烦你再改后试试,然后再修改
      

  14.   

    我工作没完成,得马上弄工作了,要不可能失业了,您不如将问题分解成若干个小问题,比如如何在屏幕上画出一个金原子,如何画出一个a粒子,如何计算两个粒子的受力以及方向,以便让更多人来帮助你。csdn的人很认同专家分,只要你肯给分,问题足够清晰,会有高手出招的。我暂时没时间了,抱歉。