POV-Ray : Newsgroups : povray.advanced-users : Double-slit experiment : Re: Double-slit experiment Server Time
28 Jul 2024 10:14:25 EDT (-0400)
  Re: Double-slit experiment  
From: Chris B
Date: 3 Feb 2006 12:20:34
Message: <43e390e2@news.povray.org>
"Walid" <wha### [at] onlinefr> wrote in message 
news:web.43e36ccd4080b391666c08b10@news.povray.org...
>> >> Is it possible to simulate electrons interference with povray?
>> >> If yes, I would appreciate the help of someone on this topic?
>
> OK, let's forget about the "waves" interference part. Is it possible
> to simulate the "particle" interference where particles are randomly
> generating patterns of interference on a screen.
>
> Thanks
> Walid
>

Hi Walid,
I might be missing the point, but it seems to me that if you just want to 
create a pattern on a surface that replicates an interference pattern, then 
I can see two ways to do that in POV-Ray.

1. Use a function to create a pigment - I suspect it would be possible to 
work out a function that uses the difference between the distance to one 
slit and the distance to the other, then takes the remainder after dividing 
that difference by the 'wavelength', returning a bright value where the 
remainder is zero or equal to the 'wavelength' and fading to dark where the 
remainder is half the wavelength.

2. Just position objects at the points of impact on the screen - If you 
wanted a scatter of bright dots representing individual locations, you could 
generate a random series of positions on a surface, then use the same sort 
of calculation to determine whether you are going to show that dot or not.

The following example uses the second approach, with a series of spheres 
being generated on an imaginary screen. The difference between the lengths 
of the two potential paths is used to define how likely a dot is to be made 
on the screen.

Hope this helps,
Regards,
Chris B.


camera {location <0,500,500> look_at <0,200,0>}
light_source{<   0,   0,-400> rgb 3}

#local SlitSeparation  = 7;
#local SlitWidth       = 3.5;
#local Wavelength      = 1;

box {<                         -500,-200,-500>
  <-SlitSeparation/2-SlitWidth/2,200,-501>
  pigment {color rgb <0,1,1>}
}
box {<-SlitSeparation/2+SlitWidth/2,-200,-500>
  < SlitSeparation/2-SlitWidth/2,200,-501>
  pigment {color rgb <0,1,1>}
}
box {< SlitSeparation/2+SlitWidth/2,-200,-500>
  <                          500,200,-501>
  pigment {color rgb <0,1,1>}
}

cylinder {<   0,   0,-1251>,<   0,   0,-1450>,8
  texture {pigment {color rgb <1,0,1>}
  finish {ambient rgb <1,0,1>}}
}
cylinder {<   0,   0,-1250>,<   0,   0,-1251>,5
  texture {pigment {color rgb <1,1,0>}
  finish {ambient rgb 10*<1,1,0>}}
}

#local MySphere = sphere {0,1
  texture {pigment {color rgb <1,1,0>}
  finish {ambient rgb 3*<1,1,0>}}
}

#local I = 1;
#local MySeed = seed(1);
#while (I<20000)
  #local XCoord = 600 * (rand(MySeed)-0.5);
  #local YCoord = 400 * (rand(MySeed)-0.5);
  #local Difference = 
vlength(<XCoord,0,0>-<-SlitSeparation,0,-500>)-vlength(<XCoord,0,0>-<SlitSeparation,0,-500>);
  #local FringeDisplacement = 
abs(abs(mod(Difference,Wavelength)/Wavelength)*2-1);
  #if (rand(MySeed)<FringeDisplacement)
    object {MySphere translate <XCoord,YCoord,0>}
    #local I = I + 1;
  #end
#end


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.