二重スリット実験
結局、力は万有引力であり、楕円軌道を基本と考え、それが加速されたものとして
電子が左右のどちらかのスリットを通って、回転しつつ進むと、考えれば
電子は粒子であり、スリットの干渉縞の説明となる
DoubleSlitExperiment.zip
二重スリット実験サンプルソース
二重スリット実験
ソースコード抜粋
Public Class Form1
Private elr As Euler = New Euler
Private rd As New MyRandom
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim canvas As New Bitmap(PictureBox.Width, PictureBox.Height)
Dim gPic As Graphics = Graphics.FromImage(canvas)
gPic.Dispose()
Me.PictureBox.Image = canvas
Timer1.Start()
End Sub
Private Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick
UpdateFrame()
End Sub
Private Sub UpdateFrame()
Dim canvas As Bitmap = PictureBox.Image
Dim gPic As Graphics = Graphics.FromImage(canvas)
Dim d As Double = 1.0
Dim a As Double = rd.XORSRandom(0, 1) * d - d / 2.0
Dim b As Double = rd.XORSRandom(0, 200) / 100.0 - 1.0
Dim er As Double = 1.0
Dim vth As Double = Math.PI / 180.0
Dim el As New Vector(3)
Dim vl As New Vector(3)
Dim th1 As Double = rd.XORSRandom(0, 359) * 180.0 / Math.PI
Dim th2 As Double = rd.XORSRandom(0, 359) * 180.0 / Math.PI
Dim th3 As Double = (rd.XORSRandom(0, 90) - 45) * 180.0 / Math.PI
Dim th01 As Double = rd.XORSRandom(0, 359) * 180.0 / Math.PI
Dim th02 As Double = rd.XORSRandom(0, 359) * 180.0 / Math.PI
Dim dt As Double = 1.0
Dim dbl1(2) As Double
dbl1(0) = 0.0 '0.1 * Math.Sin(th3)
dbl1(1) = 0.0
dbl1(2) = 1.0
vl = New Vector(dbl1)
Dim dbl2(2) As Double
dbl2(0) = a
dbl2(1) = b
dbl2(2) = 0.0
el = New Vector(dbl2)
elr.InitEuler(el, vl, th1, th2, th01, th02, vth, er, dt)
Dim x As New Vector(3)
Dim t As Double
For t = 0.0 To 12.0 Step dt
elr.Euler()
Dim p As Vector
Dim dbl3(2) As Double
dbl3(0) = er
dbl3(1) = 0.0
dbl3(2) = 0.0
p = New Vector(dbl3)
x = elr.el + p.RotAxis(x.UnitVec(1), elr.th1).RotAxis(x.UnitVec(0), elr.th2)
If 10.0 <= x.x(2) Then
Exit For
End If
Next
gPic.FillRectangle(Brushes.White, CType(x.x(0) / 5.0 * 180, Integer) + 180, CType(x.x(1) / 5.0 * 180, Integer) + 180, 2, 2)
'適用
gPic.Dispose()
Me.PictureBox.Image = canvas
End Sub
End Class
Class Euler
Public el As Vector
Public vl As Vector
Public vth As Double
Public th1 As Double
Public th2 As Double
Public dt As Double
Public er As Double
Public th01 As Double
Public th02 As Double
Public Sub InitEuler(ByVal pel As Vector, ByVal pvl As Vector, ByVal pth1 As Double, ByVal pth2 As Double, ByVal pth01 As Double, ByVal pth02 As Double, ByVal pvth As Double, ByVal per As Double, ByVal pdt As Double)
Me.el = pel.Clone()
Me.vl = pvl.Clone()
Me.vth = pvth
Me.th1 = pth1
Me.th2 = pth2
Me.th01 = pth01
Me.th02 = pth02
Me.er = per
Me.dt = pdt
End Sub
Public Sub Euler()
el = el + (vl * dt)
th1 = th1 + (vth * dt)
If th1 < 0.0 Then
th1 = th1 + 2.0 * Math.PI
End If
If 2.0 * Math.PI < th1 Then
th1 = th1 - 2.0 * Math.PI
End If
th2 = th2 + (vth * dt)
If th2 < 0.0 Then
th2 = th2 + 2.0 * Math.PI
End If
If 2.0 * Math.PI < th2 Then
th2 = th2 - 2.0 * Math.PI
End If
End Sub
End Class