PageSourceSearch

https://refractiveindex.info/include/reflection.js?ver=2025-01-11

js refractiveindex.info collected 2026-10-01 11:32:28 UTC 6,035 bytes, 132 lines download raw bytes

1function reflection_restore_session(){
2	tmp=parseFloat(sessionStorage.getItem("angle"));
3	if(isNaN(tmp))
4		tmp=0;
5	document.getElementById("angle").value=tmp;
6	
7	sessionStorage.getItem("direction")=="out" ? tmp="out" : tmp="in";
8	document.getElementById(tmp).checked=true;
9	
10	sessionStorage.getItem("r_plot_rp")=="false" ? tmp=false : tmp=true;
11	document.getElementById("r_plot_rp").checked=tmp;
12	
13	sessionStorage.getItem("r_plot_rs")=="false" ? tmp=false : tmp=true;
14	document.getElementById("r_plot_rs").checked=tmp;
15	
16	sessionStorage.getItem("r_plot_r")=="true" ? tmp=true : tmp=false;
17	document.getElementById("r_plot_r").checked=tmp;
18	
19	sessionStorage.getItem("r_plot_logy")=="true" ? tmp=true : tmp=false;
20	document.getElementById("r_plot_logy").checked=tmp;
21	}
22
23function reflection(){
24	document.getElementById("wl_reflectance").innerHTML=document.getElementById("wavelength").value;
25	wl=parseFloat(document.getElementById("wavelength").value);
26	if(!n_defined || wl<wl_n_min || wl>wl_n_max || (n0>=1&&n0<1.01&&k0==0) ){
27		document.getElementById("Reflection_calculator").style.display="none";
28		return;
29	}
30	document.getElementById("Reflection_calculator").style.display="block";
31	n0=n(wl);
32	k0=k(wl);
33	
34	angle=parseFloat(document.getElementById("angle").value);
35	if(isNaN(angle)||angle<0)angle=0;
36	if(angle>90)angle=90;
37	document.getElementById("angle").value=angle;
38	sessionStorage.setItem("angle",angle);
39	
40	direction="in";
41	if(document.getElementById("out").checked)
42		direction="out";
43	sessionStorage.setItem("direction",direction);
44	
45	if(direction=="in"){
46		n1=Complex.one;
47		n0>=0?n2=new Complex(n0,k0):n2=new Complex(-1*n0,k0);//regular or metamaterials with n<0
48	}
49	else{
50		n0>=0?n1=new Complex(n0,k0):n1=new Complex(-1*n0,k0);
51		n2=Complex.one;
52	}
53	sin1=Complex.sin(new Complex(deg2rad(angle),0));
54	sin2=Complex.mult(Complex.div(n1,n2),sin1);//sin2=n1/n2*sin1
55	cos1=Complex.sqrt(Complex.sub(Complex.one,Complex.pow(sin1,2)));
56	cos2=Complex.sqrt(Complex.sub(Complex.one,Complex.pow(sin2,2)));
57	Rs_complex=Complex.div(Complex.sub(Complex.mult(n1,cos1),Complex.mult(n2,cos2)),Complex.add(Complex.mult(n1,cos1),Complex.mult(n2,cos2)) );
58	Rp_complex=Complex.div(Complex.sub(Complex.mult(n2,cos1),Complex.mult(n1,cos2)),Complex.add(Complex.mult(n1,cos2),Complex.mult(n2,cos1)) );
59	Rs=Complex.abs2(Rs_complex);
60	Rp=Complex.abs2(Rp_complex);
61	document.getElementById("Rnp").innerHTML=((Rs+Rp)/2).toPrecision(5);
62	document.getElementById("Rs").innerHTML=Rs.toPrecision(5);
63	document.getElementById("Rp").innerHTML=Rp.toPrecision(5);
64	phi_s=rad2deg(Complex.car2pol(Rs_complex).im);
65	phi_p=rad2deg(Complex.car2pol(Rp_complex).im);
66	document.getElementById("phi_s").innerHTML=phi_s.toFixed(3*(phi_s!=0&&phi_s!=180&&phi_s!=-180));
67	document.getElementById("phi_p").innerHTML=phi_p.toFixed(3*(phi_p!=0&&phi_p!=180&&phi_p!=-180));
68	
69	n_abs=Math.sqrt(Math.pow(n0,2)+Math.pow(k0,2));
70	//Brewster's angle
71	direction=="in"?θ_b=rad2deg(Math.atan(n_abs)):θ_b=rad2deg(Math.atan(1/n_abs));
72	document.getElementById("θ_b").innerHTML=θ_b.toFixed(3);
73	//Critical angle (only for escaping beam)
74	if(direction=="out"){
75		if(n_abs>=1)θ_c=rad2deg(Math.asin(1/n_abs));//conventional materials
76		else θ_c=rad2deg(Math.asin(n_abs));//metamaterials with -1<n<1
77		document.getElementById("θ_c").innerHTML=θ_c.toFixed(3);
78		document.getElementById("CriticalAngle").style.display="inline";
79	}
80	else document.getElementById("CriticalAngle").style.display="none";	
81}
82
83function reflection_plot(){
84	r_plot_rp=document.getElementById('r_plot_rp').checked;
85	sessionStorage.setItem("r_plot_rp",r_plot_rp);
86	r_plot_rs=document.getElementById('r_plot_rs').checked;
87	sessionStorage.setItem("r_plot_rs",r_plot_rs);
88	r_plot_r=document.getElementById('r_plot_r').checked;
89	sessionStorage.setItem("r_plot_r",r_plot_r);
90	r_plot_logy=document.getElementById('r_plot_logy').checked;
91	sessionStorage.setItem("r_plot_logy",r_plot_logy);	
92	Rs_array=new Array();
93	Rp_array=new Array();
94	R_array=new Array();
95	i=0;
96	for(θ=0;θ<=90;θ+=0.1){
97		sin1=Complex.sin(new Complex(deg2rad(θ),0));
98		sin2=Complex.mult(Complex.div(n1, n2),sin1);//sin2=n1/n2*sin1
99		cos1=Complex.sqrt(Complex.sub(Complex.one,Complex.pow(sin1,2)));
100		cos2=Complex.sqrt(Complex.sub(Complex.one,Complex.pow(sin2,2)));
101		Rs_complex=Complex.div(Complex.sub(Complex.mult(n1,cos1),Complex.mult(n2,cos2)),Complex.add(Complex.mult(n1,cos1),Complex.mult(n2,cos2)));
102		Rp_complex=Complex.div(Complex.sub(Complex.mult(n1,cos2),Complex.mult(n2,cos1)),Complex.add(Complex.mult(n1,cos2),Complex.mult(n2,cos1)));
103		Rs=Complex.abs2(Rs_complex);
104		Rp=Complex.abs2(Rp_complex);
105		Rs_array[i]=[θ,Rs];
106		Rp_array[i]=[θ,Rp];
107		R_array[i]=[θ,(Rs+Rp)/2];
108		i++;
109	}
110	r_plot_logy ? y_axis_type='logarithmic' : y_axis_type='linear';
111	chart=new Highcharts.Chart({
112		chart:{renderTo:'r_plot_container',type:'line',zoomType:'xy'},
113		plotOptions:{line:{marker:{enabled:false}}},
114		title:{text:0},
115		xAxis:{title:{enabled:true,text:'Angle of incidence, deg.'},gridLineWidth:1,min:0,max:90.01,tickInterval:10},
116		yAxis:{title:{text:'Reflectance'},lineWidth:1,max:1,type:y_axis_type},
117		//yAxis:{title:{text:'Reflectance'},lineWidth:1,min:0,max:1,tickInterval:0.2},
118		tooltip:{shared:true,crosshairs:true,
119			formatter:function(){				
120				var s='<b>'+this.x.toFixed(1)+'°</b>';
121				$.each(this.points,function(i,point){s+='<br/>'+point.series.name+': '+point.y.toFixed(5);});
122				return s;
123			 }
124		},
125		//legend:{layout:'vertical',align:'left',verticalAlign:'top',x:60,y:0,floating:true,borderWidth:0},
126		legend:{enabled:false},
127		credits:{href:"https://refractiveindex.info",text:"RefractiveIndex.INFO",position:{align:'right',x:-25,verticalAlign:'top',y:30},style:{fontFamily:'cursive',fontSize:'10'}},
128		exporting:{filename:"reflectance",},
129		navigation:{buttonOptions:{verticalAlign:'bottom',y:0}},
130		series:[{name:'P-polarized',color:'#AA4643',data:Rp_array,visible:r_plot_rp},{name:'S-polarized',color:'#4572A7',data:Rs_array,visible:r_plot_rs},{name:'Non-polarized',color:'#89A54E',data:R_array,visible:r_plot_r}]
131	});
132}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.