修改vb程序

来源:百度知道 编辑:UC知道 时间:2024/06/18 13:15:31
Private Sub Command1_Click()
Dim I As Long, J As Long, N As Long, T As Integer
Dim x As Single, Y As Single, kl As Single, k2 As Single, k3 As Single, k4 As Single, k As Single, L As Single, r As Single, U As Single, a As Single, b As Single
Const h As Single = 6.63E-34, pi As Single = 3.14, m As Single = 9.1E-31, e As Single = 1.6E-19, D As Single = 0.5
a = Val(Text1.Text)
b = Val(Text2.Text)
U = Val(Text3.Text)
N = Val(Text4.Text)
T = Val(Text5.Text)
r = h / Sqr(2 * m * e * U)
Picture1.Scale (-0.0000001, 0.0000001)-(0.0000001, 0)
Picture1.Cls
For I = 1 To N
x = 0.0000002 * Rnd - 0.0000001
Y = Rnd * 0.0000001
If x <> 0 Then
kl = (pi * a * x) / (r * D)
k2 = (pi * (a + b) * x) / (r * D)
k3 = Sin(k1)
k4 = Cos(k2)
k = (k3 ^ 2) * (k4 ^ 2) / (kl ^ 2)
End If
L = Rnd
If k > L Then
Picture1.PSet (x, Y), RGB(255, 255, 255)
End If
For J =

程序没什么大问题(不过你得先把kl改成k1,不然k3和k是永远的0哦),还要注意如下几点:
①在For I = 1 To N之前,加上一行Randomize,这样可以让每次随机的结果都不一样。
②Picture1的AutoRedraw一定要设置成True,以免程序执行时间过长,被Windows其他程序干扰后,显示不出衍射图像,电子个数设置到100以上就可以慢慢欣赏了,不过最好在Next I后加一句Msgbox "模拟结束!"的提示。
③Picture1.PSet (x, Y), RGB(255, 255, 255) 改成Picture1.PSet (x, Y), RGB(255, 0, 0),效果会更好。

恩。除了k1和kl的问题外,你在循环体内没设DOEVENTS,所以程序会假死。在
For J = 0 To T * 100000
Next J
中增加DOEVENTS
For J = 0 To T * 100000
DOEVENTS
Next J
不过最好延时不要用这种方法,因为这种方法延时时间取决于机器速度。
用API函数sleep:
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
......
for j=0 to t*20
sleep 200
doevents
next j
...

或者用定时器做延时。

1、加上一行Randomize
2、k3 = Sin(k1) 实际应该为k3 = Sin(kl)

解释一下,要怎么弄?