二重スリット実験

結局、力は万有引力であり、楕円軌道を基本と考え、それが加速されたものとして
電子が左右のどちらかのスリットを通って、回転しつつ進むと、考えれば
電子は粒子であり、スリットの干渉縞の説明となる

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





戻る