Imagen:Prisms with high and low dispersion.png
De Wikipedia, la enciclopedia libre
![]() | Éste es un fichero de Wikimedia Commons, un depósito de contenido libre hospedado por la Fundación Wikimedia. Más abajo se reproduce su página de descripción con la información sobre su origen y licencia. |
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> } } } }
Enlaces a la imagen
Las siguientes páginas enlazan a esta imagen: