📄 opt_trace.htm
字号:
<HTML> <HEAD> <TITLE>/</TITLE> <META NAME="GENERATOR" CONTENT="HTML-TOOLBOX "> </HEAD> <BODY bgcolor="#FFFFF0"> <HR WIDTH="100%"></P> <CENTER><P><FONT COLOR="#000000"><FONT SIZE=+3>Cross-linked m-file</FONT></FONT></P></CENTER> <CENTER><P><FONT COLOR="#000000"><FONT SIZE=+1></FONT></FONT></P></CENTER> <CENTER><P><FONT COLOR="#000000"><FONT SIZE=+2>opt_trace.m</FONT></FONT></P></CENTER> <CENTER><P><FONT COLOR="#000000"><FONT SIZE=+1>Located in:</FONT></FONT></P></CENTER> <CENTER><P><FONT COLOR="#000000"><FONT SIZE=+1>/home/bjorn/matlab/Optical_bench</FONT></FONT></P></CENTER> <P><HR WIDTH="100%"></P> <P><FONT COLOR="#000000"><FONT SIZE=+2>Function synopsis</FONT></FONT></P> <P><FONT COLOR="#000000"><FONT SIZE=+1> [optelements] = opt_trace(optelements,rays,opt_ops) </FONT></FONT></P> <P><HR WIDTH="100%"></P> <P><FONT COLOR="#000000"><FONT SIZE=+2>Function comments</FONT></FONT></P> <pre> % % OPT_TRACE - ray tracing through optical systems. % This function handles aberationand and attenuation in an optical % lens system. Currently suported optical elements are Lenses, % apertures, grids prisms (without internal reflection), slits, and % transmission grids (only main maximas). Currently unsupported: % Mirrors, beam splitters, diffraction. </pre> <P><HR WIDTH="100%"></P> <P><FONT COLOR="#000000"><FONT SIZE=+1>m-files called by opt_trace.m</FONT></FONT></P> <UL> <LI><A HREF ="opt_intersection.htm">opt_intersection</A></LI> <LI><A HREF ="opt_refraction.htm">opt_refraction</A></LI> <LI><A HREF ="opt_absorption.htm">opt_absorption</A></LI> </UL> <P><HR WIDTH="100%"></P> <P><FONT COLOR="#000000"><FONT SIZE=+1>m-files that call opt_trace.m</FONT></FONT></P> <UL> <LI><A HREF ="Contents.htm">Contents</A></LI> <LI><A HREF ="opt_exempel.htm">opt_exempel</A></LI> </UL> <P><HR WIDTH="100%"></P> <P><FONT COLOR="#000000"><FONT SIZE=+1>All the cross references in the source m-code of opt_trace.m</FONT></FONT></P> <pre> function [optelements] = opt_trace(optelements,rays,opt_ops) % [optelements] = opt_trace(optelements,rays,opt_ops) % % OPT_TRACE - ray tracing through optical systems. % This function handles aberationand and attenuation in an optical % lens system. Currently suported optical elements are Lenses, % apertures, grids prisms (without internal reflection), slits, and % transmission grids (only main maximas). Currently unsupported: % Mirrors, beam splitters, diffraction. % Version: 1.0 % Copyright: Bjorn Gustavsson 20020430 % trace all rays for ii = 1:length(rays) if length(rays(ii).r) & length(rays(ii).e) & rays(ii).I>0 % determine where on the next optical element the ray intersects ri_int = <A HREF ="opt_intersection.htm">opt_intersection</A>(optelements(1),rays(ii)); % calculate: % the line-of-sight after refraction % the reflected intensity (unpolarised) % and the refractive index after the surface [en,refrloss,n_refr] = <A HREF ="opt_refraction.htm">opt_refraction</A>(ri_int,rays(ii),optelements(1)); % calculate the intensity after absorption and reflection I = rays(ii).I*(1-refrloss)*exp(-rays(ii).absorption* ... (norm(rays(ii).r-ri_int))); if isfield(rays(ii),'phase') % if the ray caries phase information - update rays.phase = ( rays.phase + ... 2*pi / r_tmp(j).n/r_tmp(j).wavelength * norm(r_tmp(ii).r-ri_int) ); end for jj = 1:size(en,1), r_tmp(jj) = rays(ii); r_tmp(jj).r = ri_int; r_tmp(jj).e = en(jj,:); r_tmp(jj).I = I/size(en,2); r_tmp(jj).absorption = <A HREF ="opt_absorption.htm">opt_absorption</A>(optelements(1).glass,r_tmp(jj).wavelength); r_tmp(jj).n = n_refr; end % if ray fall onto screen - add intensity to image. if strcmp('screen',optelements(1).type) % where in the image plane imgindx1 = round(1+( ri_int(2) - (optelements(1).r(2)-optelements(1).dxdydz(2)/2) )/optelements(1).dxdydz(2)*(optelements(1).imgres(1))); imgindx2 = round(1+( ri_int(3) - (optelements(1).r(3)-optelements(1).dxdydz(3)/2) )/optelements(1).dxdydz(3)*(optelements(1).imgres(2))); % if ray fall onto screen - add intensity to image. if ( imgindx1 > 0 & ... imgindx2 > 0 & ... imgindx1 <= optelements(1).imgres(1) & ... imgindx2 <= optelements(1).imgres(2) ) if isfield(rays(ii),'phase') % seems as infinite coherence length to me... optelements(1).img((imgindx2),(imgindx1)) = ( optelements(1).img(imgindx2,imgindx1) +... rays(ii).I*exp(i*rays(ii).phase) ); else optelements(1).img((imgindx2),(imgindx1)) = ( optelements(1).img(imgindx2,imgindx1) +... rays(ii).I ); end end end % plot the raytrace... if isfield(opt_ops,'plotrays') & opt_ops.plotrays==1 & prod(size(en)) plot3([rays(ii).r(1) r_tmp(1).r(1)],... [rays(ii).r(2) r_tmp(1).r(2)],... [rays(ii).r(3) r_tmp(1).r(3)],'h-','color',rays(ii).color) grid on hold on % ...and pause... if isfield(opt_ops,'plotpaus') & opt_ops.plotpaus disp('push any button') pause end % or at least do it real time. if isfield(opt_ops,'plotRT') & opt_ops.plotRT drawnow end end % Recursion - sorry about that. if length(optelements) > 1 & sum([r_tmp(:).I]) > 0 [opt_es] = opt_trace(optelements(2:end),r_tmp,opt_ops); optelements = [optelements(1) opt_es]; end end % if length(rays(i). end </pre> <P><HR WIDTH="100%"></P> <P><I><FONT COLOR="#0000FF"><FONT SIZE=+1>Written by B. Gustavsson 13:27 29/1 2003 <IMG SRC = "file:/home/bjorn/matlab/Local/Tools/htmltool/gifs/copyright.gif" ></FONT></FONT></I></P> <P><I><FONT COLOR="#0000FF"><FONT SIZE=+1>E-mail:</B><A HREF = "mailto:bjorn@irf.se">bjorn@irf.se</A></H4></FONT></FONT></I></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -