Billede:Prisms with high and low dispersion.png
Fra Wikipedia, den frie encyklopædi
Størrelse af vist billede: 398 × 599 pixel
Image in higher resolution (640 × 964 pixel, file size: 224 KB, MIME type: image/png)
Denne fil er fra Wikimedia Commons, en samling af åbent indhold som Wikimedia Foundation er vært for. Beskrivelsen fra siden med beskrivelse af billedet er vist nedenfor. |
[edit] Summary
Español: Dispersión de la luz en dos prismas de distinto material.
Two pictures of optical prisms; one (above) with a high degree of optical dispersion, and one (below) with a low dispersion. For each image, a different setting of the "Disp" variable in the code below to have each image show a different amount of optical dispersion.
Simulated using computer graphics, rendered using the Persistence of Vision Raytracer. Everything made from scratch by Peo, originally for use in a few articles in danish Wikipedia.
The code below was used to render each prism, and the two images was subsequently merged into this image in a photomanipulation application.
global_settings { max_trace_level 64 max_intersections 1000 } // "Disp" variable: Amount of dispersion: Looks reasonable // from 2 (less) thru 6 (more dispersion), including both: #declare Disp=6; light_source {<-100,50,-30> color rgb .3} light_source {<-150,120,-100> color rgb .3} camera { location <-4,5,-9> look_at <3,-2,0> angle 60 } #local L1a = tan(Disp/180*pi); #local L1b = 1.05+L1a*1.13; #local L2a = -tan(Disp/180*pi); #local L2b = .739+L2a*1.308; #local SPLx = (L2b-L1b)/(L1a-L2a); // Center of radial rainbow pattern in the part of #local SPLy = L1a*SPLx+L1b; // the light beam that's inside the prism. #local TOPx = (3-L1b)/(L1a+1.73205087569); #local TOPy = L1a*TOPx+L1b; #local BOTx = (3-L2b)/(L2a+1.73205087569); #local BOTy = L2a*BOTx+L2b; #local TOPa = tan(radians(2*Disp-30)); #local TOPb = TOPy-TOPa*TOPx;
#local BOTa = tan(radians(-2*Disp-30)); #local BOTb = BOTy-BOTa*BOTx;
#local OUTx = (BOTb-TOPb)/(TOPa-BOTa); #local OUTy = BOTa*OUTx+BOTb; #local txtOff=texture {pigment {color rgb 1}} // Texture for unlit walls #local txtFLT=texture {pigment { // Radial pattern to fake the "rainbow- radial // illuminated" part of the wall and floor. color_map { [0.00 color rgb <.7,(1-Disp/10),1>] // Colors vary from all white [0.20 color rgb <(1-Disp/10),(1-Disp/10),1>] // to the rainbow of saturated [0.40 color rgb <(1-Disp/10),1,1>] // colors, depending on "Disp" [0.60 color rgb <(1-Disp/10),1,(1-Disp/10)>] // setting. [0.80 color rgb <1,1,(1-Disp/10)>] [1.00 color rgb <1,(1-Disp/10),(1-Disp/10)>] } frequency int(90/Disp+.5) // Agular width - causes discrete intervals in width! } finish {ambient .4}} #local txtSTR=texture { // This texture encloses the above, "ranbow-illuminated" radial // texture with zones at the red and purple ends where the texture_map { // rainbow "fades out" into the invisible, and thus appa- [0.00 txtOff] // rently unlit parts of the floor and walls. [0.01 txtFLT] [Disp/90-.01 txtFLT] [Disp/90 txtOff] [1.00 txtOff] } rotate <90,0,-30-2*Disp> translate <OUTx,OUTy,0> } union { // The floor and walls in the scenery: plane {<0,1,0>,-3.001} // Floor plane {<-1,0,0>,-10} // Wall struck by colored light plane {<0,0,-1>,-15} // Unlit wall in the background texture { // This texture is the rainbow band in txtSTR inside a gradient z // small strip along the triangular surfaces of the texture_map { // prism, surrounded by zones where the light fades out [0.000 txtOff] // into the dark gray, "unlit" texture. [0.004 txtSTR] [0.016 txtSTR] [0.020 txtOff] [1.000 txtOff] } translate <0,0,-.01> scale <1,1,200> } } difference { // The prism itself box {<-10,-3,-2>,<10,3,2>} // Shape made from a box, "cut" into plane {<0,-1,0>,-1.5 rotate <0,0,60>} // shape using two planes at 60* angles. plane {<0,-1,0>,-1.5 rotate <0,0,-60>} hollow on // Media stuff: The prism has an index pigment {color rgbt <.8,1,.9,.7>} // of refraction (ior) of 1.66, and finish {phong 1 reflection .1 ambient .3} // disperses colors according to the interior {ior 1.66 dispersion 1+Disp/100} // "Disp" variable. } difference { // The narrow "sheet" of white light entering the prism from the left: box {<-10,-.1,-1.5>,<1,.1,1.5> rotate <0,0,26.099> translate <-1,1,0>} plane {<0,1,0>,1.5001 rotate <0,0,60>} // Box "cut" into shape with a plane. hollow on // Media stuff: The beam shape itself is invisible, but pigment {color rgbt 1} // contains an emitting media, giving the beam the interior { // "fuzzy", translucent look. media { intervals 10 samples 1,1 confidence 0.9 variance 1.0/128 ratio 0.9 emission rgb .6 method 3 } } } difference { // Part of the light beam inside the prism: box {<-2,-2,-1.5>,<5,2,1.5>} // Box cut to shape plane {<0,-1,0>,0 rotate <0,0,Disp> translate <-1.13,1.05,0>} // with planes, ac- plane {<0,1,0>,0 rotate <0,0,-Disp> translate <-1.308,0.739,0>} // cording to the plane {<0,-1,0>,-1.499 rotate <0,0,60>} // "Disp" variable plane {<0,-1,0>,-1.499 rotate <0,0,-60>} hollow on // Media stuff: The shape itself is invisible inside pigment {color rgbt <1,1,1,1>} // the prism since it has the same ior; 1.66 finish {ambient .7} interior { ior 1.66 dispersion 1+Disp/100 media { intervals 10 // number of intervals used for sampling [10] samples 1,1 // minimum and maximum number of samples taken per interval [1,1] confidence 0.9 // statistic parameter higher->better quality [0.9] variance 1.0/128 // statistic parameter lower->better quality [1.0/128] ratio 0.9 // distribution between lit and unlit areas [0.9] emission rgb<1,.95,.85>*.4 method 3 // adaptive sampling density { radial color_map { // Color spectrum in the beam inside the prism: [0.00 color rgb <1,(1-Disp/10),(1-Disp/10)>*(1.5-.05*Disp)] [0.20 color rgb <1,1,(1-Disp/10)> *(1.5-.05*Disp)] [0.40 color rgb <(1-Disp/10),1,(1-Disp/10)>*(1.5-.05*Disp)] [0.60 color rgb <(1-Disp/10),1,1> *(1.5-.05*Disp)] [0.80 color rgb <(1-Disp/10),(1-Disp/10),1>*(1.5-.05*Disp)] [1.00 color rgb <1,(1-Disp/10),1> *(1.5-.05*Disp)] } frequency int(180/Disp+.5) rotate <-90,0,-Disp> translate <SPLx,SPLy,0> } } } } difference { // Part of the light beam exiting at the right-hand side of the prism: box {<-5,-500,-1.5>,<500,5,1.5>} // Box cut to sha- plane {<0,1,0>,1.5001 rotate <0,0,-60>} // pe using three plane {<0,-1,0>,0 rotate <0,0,2*Disp-30> translate <TOPx,TOPy,0>} // planes. plane {<0,1,0>,0 rotate <0,0,-2*Disp-30> translate <BOTx,BOTy,0>} hollow on // Media stuff: Like the entering beam, this one's pigment {color rgbt <1,1,1,1>} // shape is invisible, but contains emitting media finish {ambient .7} // showing the rainbow "band" of colors interior { media { intervals 10 samples 1,1 confidence 0.9 variance 1.0/128 ratio 0.9 emission rgb<1,.95,.85>*.4 method 3 density { radial color_map { // Color spectrum in the beam leaving the prism: [0.00 color rgb <1,(1-Disp/10),(1-Disp/10)>*(.4-.01*Disp)] [0.20 color rgb <1,1,(1-Disp/10)> *(.4-.01*Disp)] [0.40 color rgb <(1-Disp/10),1,(1-Disp/10)>*(.4-.01*Disp)] [0.60 color rgb <(1-Disp/10),1,1> *(.4-.01*Disp)] [0.80 color rgb <(1-Disp/10),(1-Disp/10),1>*(.4-.01*Disp)] [1.00 color rgb <.7,(1-Disp/10),1> *(.4-.01*Disp)] } frequency int(90/Disp+.5) rotate <-90,0,-30-2*Disp> translate <OUTx,OUTy,0> } } } }
Billedehenvisninger
De følgende sider henviser til dette billede: