<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://6328.spaces.live.com/mmm2008-05-17_13.22/rsspretty.aspx?rssquery=en-US;http%3a%2f%2f6328.spaces.live.com%2fcategory%2fCCL%2bprogramming%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>光学设计的秘密花园: CCL programming</title><description /><link>http://6328.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catCCL%2bprogramming</link><language>en-US</language><pubDate>Sat, 17 May 2008 08:21:50 GMT</pubDate><lastBuildDate>Sat, 17 May 2008 08:21:50 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://6328.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>1347004474636356797</live:id><live:alias>6328</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>用CCL实现手工设计Cooke Triplet</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!304.entry</link><description>&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;　　《透镜设计基础》中第&lt;/span&gt;314&lt;span style="font-family:华文宋体"&gt;页到第&lt;/span&gt;321&lt;span style="font-family:华文宋体"&gt;页详述了用手工计算的方法设计一个&lt;/span&gt;Cooke&lt;span style="font-family:华文宋体"&gt;式三片镜，也就是&lt;/span&gt;K&lt;span style="font-family:华文宋体"&gt;. Schwarzschild方法。在以下的内容中，首先演示如何cooke_triplet命令进行&lt;/span&gt;Cooke&lt;span style="font-family:华文宋体"&gt;式三片镜的设计，然后讲解如何&lt;/span&gt;&lt;span style="font-family:华文宋体"&gt;将这一方法整合到OSLO的环境中。&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;　　启动&lt;/span&gt;OSLO&lt;span style="font-family:华文宋体"&gt;，在&lt;/span&gt;lens spreadsheet&lt;span style="font-family:华文宋体"&gt;关闭时按&lt;/span&gt;Ctrl+D&lt;span style="font-family:华文宋体"&gt;，出现如下对话框，每一参数的意义请参照《透镜设计基础》中的解释。&lt;/span&gt; 
&lt;div&gt;&lt;/div&gt;
&lt;p align=center&gt;&lt;img height=661 alt="Cooke triplet command" src="http://68.142.232.116/170/433800355_d026614eef_o.png" width=322&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;　　点选&lt;/span&gt;OK&lt;span style="font-family:华文宋体"&gt;，然后在命令行中依照提示依次输入三个镜片的中心厚度，比如&lt;/span&gt;0.4&lt;span style="font-family:华文宋体"&gt;，&lt;/span&gt;0.25&lt;span style="font-family:华文宋体"&gt;，&lt;/span&gt;0.45&lt;span style="font-family:华文宋体"&gt;，分别按回车键确认。这时，当前的&lt;/span&gt;OSLO&lt;span style="font-family:华文宋体"&gt;环境中已经生成了一个符合参数要求的&lt;/span&gt;Cooke&lt;span style="font-family:华文宋体"&gt;式三片镜，分析图如下。&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;&lt;/span&gt;  
&lt;p align=center&gt;&lt;img height=423 alt=RIC src="http://68.142.232.116/155/433800411_e0596562e1_o.png" width=632&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;　　从图中可以看出子午像面过于前倾，可以适当调整一下。将&lt;/span&gt;AC&lt;span style="font-family:华文宋体"&gt;的预设值从&lt;/span&gt;-0.09&lt;span style="font-family:华文宋体"&gt;调整到&lt;/span&gt;-0.06&lt;span style="font-family:华文宋体"&gt;。&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;&lt;/span&gt;  
&lt;p align=center&gt;&lt;img height=661 alt="Cooke triplet command" src="http://68.142.232.116/175/433800417_528e199690_o.png" width=322&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;　　分析新的镜头，可以看到子午像面不再严重前倾，像散有所改善。&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;&lt;/span&gt;  
&lt;p align=center&gt;&lt;img height=423 alt=RIC src="http://68.142.232.116/165/433800421_2463bb8aa7_o.png" width=632&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;　　讲解如何&lt;/span&gt;&lt;span style="font-family:华文宋体"&gt;将这一方法整合到OSLO的环境中。首先打开\private\ccl\a_menu.ccl文件，加入下图中的高亮部分。&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;&lt;/span&gt;  
&lt;p align=center&gt;&lt;img height=365 alt=Hotkey src="http://68.142.232.116/151/433800423_b29c53a6e8.jpg" width=389&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;　　再打开\private\ccl\a_global.ccl加入下列内容。&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;
&lt;p&gt; &lt;/span&gt;
&lt;p&gt;double y1 {default(noquery) = 1.111111}; 
&lt;p&gt;double y2 {default(noquery) = 0.888888}; 
&lt;p&gt;double y3 {default(noquery) = 0.999999}; 
&lt;p&gt;double rn1 {default(noquery) = 1.620318}; 
&lt;p&gt;double vn1 {default(noquery) = 60.31}; 
&lt;p&gt;double rn2 {default(noquery) = 1.616445}; 
&lt;p&gt;double vn2 {default(noquery) = 36.62}; 
&lt;p&gt;double rn3 {default(noquery) = 1.620318}; 
&lt;p&gt;double vn3 {default(noquery) = 60.31}; 
&lt;p&gt;double total_efl {default(noquery) = 10}; 
&lt;p&gt;double lch {default(noquery) = -0.02}; 
&lt;p&gt;double Petzval {default(noquery) = 0.035}; 
&lt;p&gt;double K_aim {default(noquery) = 1}; 
&lt;p&gt;double fie_ang {default(noquery) = 20}; 
&lt;p&gt;int step {default(noquery) = 500}; 
&lt;p&gt;double c1_start {default(noquery) = 0.2}; 
&lt;p&gt;double c1_end {default(noquery) = 0.4}; 
&lt;p&gt;double SC_target {default(noquery) = -0.08}; 
&lt;p&gt;double CC_target {default(noquery) = 0.0025}; 
&lt;p&gt;double AC_target {default(noquery) = -0.09}; 
&lt;p&gt;double TchC_target {default(noquery) = 0.0}; 
&lt;p&gt;double Wav1 {default(noquery) = 0.5892938}; 
&lt;p&gt;double Wav2 {default(noquery) = 0.4861327}; 
&lt;p&gt;double Wav3 {default(noquery) = 0.6562725}; 
&lt;p&gt;最后是函数的主体部分，编译后就可以了。 
&lt;p&gt;cmd scalecv(int start_surf, int end_surf, float efl) 
&lt;p&gt;{ 
&lt;p&gt;float feedback=1.0; 
&lt;p&gt;stp outp off; 
&lt;p&gt;int counter; 
&lt;p&gt;do{ 
&lt;p&gt;for(counter=start_surf;counter&amp;lt;end_surf+1;counter++) 
&lt;p&gt;cv(counter,cv[counter]*feedback); 
&lt;p&gt;feedback=pe_efl(start_surf,end_surf)/efl; 
&lt;p&gt;} 
&lt;p&gt;while(fabs(feedback-1)&amp;gt;0.00000001); 
&lt;p&gt;stp outp on; 
&lt;p&gt;} 
&lt;p&gt;cmd Gsum ( float refra_index, float result[] ) 
&lt;p&gt;{ 
&lt;p&gt;result[0] = 0; 
&lt;p&gt;result[1] = refra_index * refra_index * ( refra_index - 1 ) / 2 ; 
&lt;p&gt;result[2] = ( 2 * refra_index + 1 ) * ( refra_index - 1 ) / 2 ; 
&lt;p&gt;result[3] = ( 3 * refra_index + 1 ) * ( refra_index - 1 ) / 2 ; 
&lt;p&gt;result[4] = ( refra_index + 2 ) * ( refra_index - 1 ) / ( 2 * refra_index ) ; 
&lt;p&gt;result[5] = 2 * ( refra_index + 1 ) * ( refra_index - 1 ) / refra_index ; 
&lt;p&gt;result[6] = ( 3 * refra_index + 2 ) * ( refra_index - 1 ) / ( 2 * refra_index ) ; 
&lt;p&gt;result[7] = ( 2 * refra_index + 1 ) * ( refra_index - 1 ) / ( 2 * refra_index ); 
&lt;p&gt;result[8] = refra_index * ( refra_index - 1 ) / 2; 
&lt;p&gt;} 
&lt;p&gt;double SC_coef[3]; 
&lt;p&gt;double CC_coef[3]; 
&lt;p&gt;double AC_coef[3]; 
&lt;p&gt;double SC_ap_coef[3]; 
&lt;p&gt;double CC_ap_coef[3]; 
&lt;p&gt;double AC_ap_coef[3]; 
&lt;p&gt;cmd sc_sei(double sc_sei_coef[], double y_para, double u_prime_0, double G_sum[], double curvature, double inv_objdist) 
&lt;p&gt;{ 
&lt;p&gt;//calculate the constant 
&lt;p&gt;double temp_coef_for_all; 
&lt;p&gt;int ii; 
&lt;p&gt;temp_coef_for_all = -1 * y_para * y_para * y_para * y_para / ( u_prime_0 * u_prime_0 ); 
&lt;p&gt;sc_sei_coef[0] = G_sum[1] * curvature * curvature * curvature; 
&lt;p&gt;sc_sei_coef[1] = -1 * G_sum[2] * curvature * curvature; 
&lt;p&gt;sc_sei_coef[0] += G_sum[3] * curvature * curvature * inv_objdist; 
&lt;p&gt;sc_sei_coef[2] = G_sum[4] * curvature; 
&lt;p&gt;sc_sei_coef[1] += -1 * G_sum[5] * curvature * inv_objdist; 
&lt;p&gt;sc_sei_coef[0] += G_sum[6] * curvature * inv_objdist * inv_objdist; 
&lt;p&gt;for (ii = 0; ii &amp;lt; 3; ii++) 
&lt;p&gt;{ 
&lt;p&gt;sc_sei_coef[ii] *= temp_coef_for_all; 
&lt;p&gt;} 
&lt;p&gt;} 
&lt;p&gt;cmd cc_sei(double cc_sei_coef[], double y_para, double h_prime_0, double G_sum[], double curvature, double inv_objdist) 
&lt;p&gt;{ 
&lt;p&gt;double temp_coef_for_all; 
&lt;p&gt;int ii; 
&lt;p&gt;temp_coef_for_all = -1 * y_para * y_para * h_prime_0; 
&lt;p&gt;cc_sei_coef[1] = 0.25 * G_sum[5] * curvature; 
&lt;p&gt;cc_sei_coef[0] = -1 * G_sum[7] * curvature * inv_objdist; 
&lt;p&gt;cc_sei_coef[0] += -1 * G_sum[8] * curvature * curvature; 
&lt;p&gt;cc_sei_coef[2] = 0; 
&lt;p&gt;for (ii = 0; ii &amp;lt; 3; ii++) 
&lt;p&gt;{ 
&lt;p&gt;cc_sei_coef[ii] *= temp_coef_for_all; 
&lt;p&gt;} 
&lt;p&gt;} 
&lt;p&gt;cmd ac_sei(double ac_sei_coef[], double h_prime_0, double fl ) 
&lt;p&gt;{ 
&lt;p&gt;ac_sei_coef[0] = -0.5 * h_prime_0 * h_prime_0 / fl; 
&lt;p&gt;ac_sei_coef[1] = 0; 
&lt;p&gt;ac_sei_coef[2] = 0; 
&lt;p&gt;} 
&lt;p&gt;cmd sc_ap(double ap_shift[], double ap_attached[]) 
&lt;p&gt;{ 
&lt;p&gt;for (ii = 0; ii &amp;lt; 3; ii++) 
&lt;p&gt;{ 
&lt;p&gt;ap_shift[ii] = ap_attached[ii]; 
&lt;p&gt;} 
&lt;p&gt;} 
&lt;p&gt;cmd cc_ap(double cc_ap_shift[], double cc_ap_attached[], double sc_ap_attached[], double q_factor, double u_prime_0) 
&lt;p&gt;{ 
&lt;p&gt;for (ii = 0; ii &amp;lt; 3; ii++) 
&lt;p&gt;{ 
&lt;p&gt;cc_ap_shift[ii] = cc_ap_attached[ii] + sc_ap_attached[ii] * q_factor * u_prime_0; 
&lt;p&gt;} 
&lt;p&gt;} 
&lt;p&gt;cmd ac_ap(double ac_ap_shift[], double ac_ap_attached[], double cc_ap_attached[], double sc_ap_attached[], double q_factor, double u_prime_0) 
&lt;p&gt;{ 
&lt;p&gt;for (ii = 0; ii &amp;lt; 3; ii++) 
&lt;p&gt;{ 
&lt;p&gt;ac_ap_shift[ii] = ac_ap_attached[ii] + cc_ap_attached[ii] * 2 * q_factor / u_prime_0 + sc_ap_attached[ii] * q_factor * q_factor; 
&lt;p&gt;} 
&lt;p&gt;} 
&lt;p&gt;cmd cooke_triplet(double y1, double y2, double y3, double wav1, double wav2, double wav3, double rn1, double vn1, double rn2, double vn2, 
&lt;p&gt;double rn3, double vn3, double total_efl, double SC_target, double CC_target, double AC_target, 
&lt;p&gt;double Petzval, double lch, double TchC_target, double K_aim, double fie_ang, double c1_start, double c1_end, int step) 
&lt;p&gt;{ 
&lt;p&gt;stp outp off; 
&lt;p&gt;double phi[3]; 
&lt;p&gt;double y[3]; 
&lt;p&gt;y[0] = y1; y[1] = y2; y[2] = y3; 
&lt;p&gt;double v[3]; 
&lt;p&gt;v[0] = vn1; v[1] = vn2; v[2] = vn3; 
&lt;p&gt;double n[3]; 
&lt;p&gt;n[0] = rn1; n[1] = rn2; n[2] = rn3; 
&lt;p&gt;double phi_total; 
&lt;p&gt;phi_total = 1/total_efl; 
&lt;p&gt;static double u0_obj = 0, u0_ims; 
&lt;p&gt;u0_ims = y1/total_efl; 
&lt;p&gt;double ptz; 
&lt;p&gt;ptz=Petzval; 
&lt;p&gt;double coef_phi[3][3], verctor_aber[3]; 
&lt;p&gt;double ua, ub, uc; 
&lt;p&gt;ua=u0_obj; 
&lt;p&gt;double airspace_1, airspace_2; 
&lt;p&gt;double K; 
&lt;p&gt;double k_new, delta_yb, delta_yc; 
&lt;p&gt;double upr[4], ypr[3]; 
&lt;p&gt;upr[0] = tan(-1*fie_ang*dr); 
&lt;p&gt;double TchC[3]; 
&lt;p&gt;double TchC_total, TchC_total_new, TchC_aim; 
&lt;p&gt;TchC_aim = TchC_target; 
&lt;p&gt;for ( ii = 0, TchC_total = -0.02, delta_yc = 0.01, k = 0.5, delta_yb = 0.01 ; ii &amp;lt; 200; ii++) 
&lt;p&gt;{ 
&lt;p&gt;y[2] += delta_yc; 
&lt;p&gt;for ( jj = 0; jj &amp;lt; 200; jj++) 
&lt;p&gt;{ 
&lt;p&gt;y[1] += delta_yb; 
&lt;p&gt;for ( i = 0; i &amp;lt; 3; i++) coef_phi[0][i] = y[i]; 
&lt;p&gt;for ( i = 0; i &amp;lt; 3; i++) coef_phi[1][i] = y[i] * y[i] / v[i]; 
&lt;p&gt;for ( i = 0; i &amp;lt; 3; i++) coef_phi[2][i] = 1 / n[i]; 
&lt;p&gt;verctor_aber[0] = y[0] * phi_total; 
&lt;p&gt;verctor_aber[1] = -1 * lch * u0_ims * u0_ims; 
&lt;p&gt;verctor_aber[2] = Ptz; 
&lt;p&gt;slveqs( coef_phi, phi, verctor_aber); 
&lt;p&gt;///////////////////////// 
&lt;p&gt;//ub uc is at object-side 
&lt;p&gt;///////////////////////// 
&lt;p&gt;ub = ua + y[0] * phi[0]; 
&lt;p&gt;uc = ub + y[1] * phi[1]; 
&lt;p&gt;airspace_1 = ( y[0] -y[1]) / ub; 
&lt;p&gt;airspace_2 = ( y[1] -y[2]) / uc; 
&lt;p&gt;K_new = airspace_1 / airspace_2; 
&lt;p&gt;if ( fabs( K_new - K_aim ) &amp;lt; 0.000001 ) break; 
&lt;p&gt;delta_yb = ( K_aim - K_new ) * delta_yb / ( K_new - K ); 
&lt;p&gt;k = k_new; 
&lt;p&gt;} 
&lt;p&gt;ypr[0] = airspace_1 * upr[0] / ( 1 - airspace_1 * phi[0] ); ypr[1] = 0; ypr[2] = -1 * ypr[0] / k_new; 
&lt;p&gt;upr[1]= upr[0] + ypr[0] * phi[0]; 
&lt;p&gt;upr[2]= upr[1] + ypr[1] * phi[1]; 
&lt;p&gt;upr[3]= upr[2] + ypr[2] * phi[2]; 
&lt;p&gt;TchC[0] = ( -1 * y[0] * ypr[0] * phi[0] ) / ( V[0] * u0_ims); 
&lt;p&gt;TchC[1] = 0; 
&lt;p&gt;TchC[2] = ( -1 * y[2] * ypr[2] * phi[2] ) / ( V[2] * u0_ims); 
&lt;p&gt;TchC_total_new = TchC[0] + TchC[1] + TchC[2]; 
&lt;p&gt;if ( fabs( TchC_total_new - TchC_aim ) &amp;lt; 0.000001 ) break; 
&lt;p&gt;delta_yc = ( TchC_aim - TchC_total_new ) * delta_yc /( TchC_total_new - TchC_total ); 
&lt;p&gt;TchC_total = TchC_total_new; 
&lt;p&gt;} 
&lt;p&gt;int lensID; 
&lt;p&gt;double g_coef[9]; 
&lt;p&gt;double sc_coef[3][3]; 
&lt;p&gt;double cc_coef[3][3]; 
&lt;p&gt;double ac_coef[3][3]; 
&lt;p&gt;double sc_ap_coef[3][3]; 
&lt;p&gt;double cc_ap_coef[3][3]; 
&lt;p&gt;double ac_ap_coef[3][3]; 
&lt;p&gt;double temp_sc_coef[3]; 
&lt;p&gt;double temp_cc_coef[3]; 
&lt;p&gt;double temp_ac_coef[3]; 
&lt;p&gt;double temp_sc_ap_coef[3]; 
&lt;p&gt;double temp_cc_ap_coef[3]; 
&lt;p&gt;double temp_ac_ap_coef[3]; 
&lt;p&gt;double u0_=u0_ims; 
&lt;p&gt;double c[3]; 
&lt;p&gt;c[0] = phi[0]/(n[0]-1); 
&lt;p&gt;c[1] = phi[1]/(n[1]-1); 
&lt;p&gt;c[2] = phi[2]/(n[2]-1); 
&lt;p&gt;double inv[3]; 
&lt;p&gt;inv[0] = ua/y[0]; 
&lt;p&gt;inv[1] = ub/y[1]; 
&lt;p&gt;inv[2] = uc/y[2]; 
&lt;p&gt;double h0_; 
&lt;p&gt;h0_= (ypr[2]-upr[3]*(y[2]/(uc+y[2]*phi[2]))); 
&lt;p&gt;double q[3]; 
&lt;p&gt;q[0] = ypr[0]/y[0]; 
&lt;p&gt;q[1] = ypr[1]/y[1]; 
&lt;p&gt;q[2] = ypr[2]/y[2]; 
&lt;p&gt;for (lensID=0; lensID&amp;lt;3; lensID++) 
&lt;p&gt;{ 
&lt;p&gt;gsum(n[lensID], g_coef); 
&lt;p&gt;//for(i=1; i&amp;lt;9; i++) prt g_coef[i]; 
&lt;p&gt;//prt &amp;quot;=============================&amp;quot;; 
&lt;p&gt;sc_sei(temp_sc_coef, y[lensID], u0_, g_coef, c[lensID], inv[lensID]); 
&lt;p&gt;for(i=0; i&amp;lt;3; i++) 
&lt;p&gt;{ 
&lt;p&gt;sc_coef[i][lensID]=temp_sc_coef[i]; 
&lt;p&gt;//aprt sc_coef[i][lensID]; 
&lt;p&gt;}; 
&lt;p&gt;//prt; 
&lt;p&gt;cc_sei(temp_cc_coef, y[lensID], h0_, g_coef, c[lensID], inv[lensID]); 
&lt;p&gt;for(i=0; i&amp;lt;3; i++) 
&lt;p&gt;{ 
&lt;p&gt;cc_coef[i][lensID]=temp_cc_coef[i]; 
&lt;p&gt;//aprt cc_coef[i][lensID]; 
&lt;p&gt;}; 
&lt;p&gt;//prt; 
&lt;p&gt;ac_sei(temp_ac_coef, h0_, (1/phi[lensID])); 
&lt;p&gt;for(i=0; i&amp;lt;3; i++) 
&lt;p&gt;{ 
&lt;p&gt;ac_coef[i][lensID]=temp_ac_coef[i]; 
&lt;p&gt;//aprt ac_coef[i][lensID]; 
&lt;p&gt;}; 
&lt;p&gt;//prt; 
&lt;p&gt;sc_ap(temp_sc_ap_coef, temp_sc_coef); 
&lt;p&gt;for(i=2; i&amp;gt;-1; i--) 
&lt;p&gt;{ 
&lt;p&gt;sc_ap_coef[i][lensID]=temp_sc_ap_coef[i]; 
&lt;p&gt;//aprintf(&amp;quot;%f\t&amp;quot;, sc_ap_coef[i][lensID]); 
&lt;p&gt;}; 
&lt;p&gt;//prt; 
&lt;p&gt;cc_ap(temp_cc_ap_coef, temp_cc_coef, temp_sc_coef, q[lensID], u0_); 
&lt;p&gt;for(i=2; i&amp;gt;-1; i--) 
&lt;p&gt;{ 
&lt;p&gt;cc_ap_coef[i][lensID]=temp_cc_ap_coef[i]; 
&lt;p&gt;//aprintf(&amp;quot;%f\t&amp;quot;, cc_ap_coef[i][lensID]); 
&lt;p&gt;}; 
&lt;p&gt;//prt; 
&lt;p&gt;ac_ap(temp_ac_ap_coef, temp_ac_coef, temp_cc_coef, temp_sc_coef, q[lensID], u0_); 
&lt;p&gt;for(i=2; i&amp;gt;-1; i--) 
&lt;p&gt;{ 
&lt;p&gt;ac_ap_coef[i][lensID]=temp_ac_ap_coef[i]; 
&lt;p&gt;//aprintf(&amp;quot;%f\t&amp;quot;, ac_ap_coef[i][lensID]); 
&lt;p&gt;}; 
&lt;p&gt;//prt; 
&lt;p&gt;} 
&lt;p&gt;double surf_curv[6]; 
&lt;p&gt;double AC_1_2; 
&lt;p&gt;double c5_coef[3]; 
&lt;p&gt;double a,b,cc; 
&lt;p&gt;double c5[3]; 
&lt;p&gt;double CC_1_3; 
&lt;p&gt;double c3; 
&lt;p&gt;double SC_total; 
&lt;p&gt;int srfID; 
&lt;p&gt;for (ii=1; ii&amp;lt;step; ii++) 
&lt;p&gt;{ 
&lt;p&gt;surf_curv[0] = c1_start + ii*(c1_end - c1_start)/(step-1) ; 
&lt;p&gt;//prt surf_curv[0]; 
&lt;p&gt;//change the C1, to get the C5; 
&lt;p&gt;//caculate AC*_1 
&lt;p&gt;AC_1_2 = ac_ap_coef[2][0] * surf_curv[0] * surf_curv[0] + ac_ap_coef[1][0] * surf_curv[0] + ac_ap_coef[0][0]; 
&lt;p&gt;AC_1_2 += ac_ap_coef[0][1]; 
&lt;p&gt;//prt &amp;quot;AC*_1_2=&amp;quot; AC_1_2; 
&lt;p&gt;c5_coef[2] = ac_ap_coef[2][2]; c5_coef[1] = ac_ap_coef[1][2]; 
&lt;p&gt;c5_coef[0] = ac_ap_coef[0][2] + AC_1_2 - AC_target; 
&lt;p&gt;//prt &amp;quot;C5^2, C5^1, C5^0&amp;quot; (c5_coef[2]/c5_coef[2]) (c5_coef[1]/c5_coef[2]) (c5_coef[0]/c5_coef[2]); 
&lt;p&gt;a=c5_coef[2]; b=c5_coef[1]; cc=c5_coef[0]; 
&lt;p&gt;//prt (b*b-4*a*cc); 
&lt;p&gt;if ( b*b-4*a*cc &amp;lt; 0 ) 
&lt;p&gt;prt &amp;quot;No solution.&amp;quot;; 
&lt;p&gt;else { c5[2] = (-1*b + sqrt(b*b-4*a*cc))/(2*a); c5[1] = (-1*b - sqrt(b*b-4*a*cc))/(2*a);} 
&lt;p&gt;//choose the less bending one, coef_calculating can be used 
&lt;p&gt;c5[0]=c5[1]; 
&lt;p&gt;CC_1_3 = cc_ap_coef[2][0]*surf_curv[0]*surf_curv[0] + cc_ap_coef[1][0]*surf_curv[0] + cc_ap_coef[0][0]; 
&lt;p&gt;CC_1_3 += cc_ap_coef[2][2]*c5[0]*c5[0] + cc_ap_coef[1][2]*c5[0] + cc_ap_coef[0][2]; 
&lt;p&gt;//prt &amp;quot;CC_1_3=&amp;quot; CC_1_3; 
&lt;p&gt;c3 = (-1*cc_ap_coef[0][1]+(-1*CC_1_3)+CC_target)/cc_ap_coef[1][1]; 
&lt;p&gt;//prt &amp;quot;C3=&amp;quot; c3; 
&lt;p&gt;sc_total = sc_ap_coef[2][0]*surf_curv[0]*surf_curv[0] + sc_ap_coef[1][0]*surf_curv[0] + sc_ap_coef[0][0]; 
&lt;p&gt;sc_total += sc_ap_coef[2][1]*c3*c3 + sc_ap_coef[1][1]*c3 + sc_ap_coef[0][1]; 
&lt;p&gt;sc_total += sc_ap_coef[2][2]*c5[0]*c5[0] + sc_ap_coef[1][2]*c5[0] + sc_ap_coef[0][2]; 
&lt;p&gt;if (fabs(sc_total-SC_target)&amp;lt;0.001) 
&lt;p&gt;{ 
&lt;p&gt;aprt &amp;quot;total SC = &amp;quot; sc_total; 
&lt;p&gt;aprt &amp;quot;C1, C3, C5&amp;quot; surf_curv[0] c3 c5[0]; 
&lt;p&gt;break; 
&lt;p&gt;} 
&lt;p&gt;} 
&lt;p&gt;double th1; 
&lt;p&gt;double th2; 
&lt;p&gt;double th3; 
&lt;p&gt;input th1 &amp;quot;TH1&amp;quot;; 
&lt;p&gt;input th2 &amp;quot;TH2&amp;quot;; 
&lt;p&gt;input th3 &amp;quot;TH3&amp;quot;; 
&lt;p&gt;len new &amp;quot;Cooke draft&amp;quot; total_efl; 
&lt;p&gt;ebr y1; 
&lt;p&gt;ang 1e-20; 
&lt;p&gt;des &amp;quot;ZhangJing&amp;quot;; 
&lt;p&gt;uni 1.0; 
&lt;p&gt;sno1 &amp;quot;Produced by design_cooke.ccl&amp;quot;; 
&lt;p&gt;wv wav1 wav2 wav3; 
&lt;p&gt;WW 1.0 1.0 1.0; 
&lt;p&gt;//srf 0 
&lt;p&gt;air; 
&lt;p&gt;ap 2e+19; 
&lt;p&gt;th 1.0e+20; 
&lt;p&gt;//srf 1 
&lt;p&gt;NXT; 
&lt;p&gt;gla mod &amp;quot;glass1&amp;quot; n[0] v[0]; 
&lt;p&gt;cv surf_curv[0]; 
&lt;p&gt;th th1; 
&lt;p&gt;ap noc y[0]; 
&lt;p&gt;//srf 2 
&lt;p&gt;NXT; 
&lt;p&gt;air; 
&lt;p&gt;cv surf_curv[0]-c[0]; 
&lt;p&gt;th airspace_1; 
&lt;p&gt;ap noc y[0]; 
&lt;p&gt;//srf 3 
&lt;p&gt;NXT; 
&lt;p&gt;gla mod &amp;quot;glass3&amp;quot; n[1] v[1]; 
&lt;p&gt;cv c3; 
&lt;p&gt;th th2; 
&lt;p&gt;ap noc y[1]; 
&lt;p&gt;//srf 4 
&lt;p&gt;NXT; 
&lt;p&gt;air; 
&lt;p&gt;cv c3-c[1]; 
&lt;p&gt;th airspace_2; 
&lt;p&gt;ap noc y[1]; 
&lt;p&gt;ast; 
&lt;p&gt;//srf 5 
&lt;p&gt;NXT; 
&lt;p&gt;gla mod &amp;quot;glass5&amp;quot; n[2] v[2]; 
&lt;p&gt;cv c5[0]; 
&lt;p&gt;th th3; 
&lt;p&gt;ap noc y[2]; 
&lt;p&gt;//srf 6 
&lt;p&gt;NXT; 
&lt;p&gt;air; 
&lt;p&gt;cv c5[0]-c[2]; 
&lt;p&gt;th 0.0; 
&lt;p&gt;ap noc y[2]; 
&lt;p&gt;//IMS 
&lt;p&gt;NXT; 
&lt;p&gt;air; 
&lt;p&gt;ap noc 0.0; 
&lt;p&gt;end; 
&lt;p&gt;stp outp on; 
&lt;p&gt;aprt (1/phi[0]); 
&lt;p&gt;aprt (1/phi[1]); 
&lt;p&gt;aprt (1/phi[2]); 
&lt;p&gt;scalecv(1,2, 1/phi[0]); 
&lt;p&gt;scalecv(3,4, 1/phi[1]); 
&lt;p&gt;scalecv(5,6, 1/phi[2]); 
&lt;p&gt;nodp(1,2,1); 
&lt;p&gt;e=ssb(sbrow-1,4); 
&lt;p&gt;nodp(3,4,1); 
&lt;p&gt;f=ssb(sbrow-1,3); 
&lt;p&gt;h=airspace_1+e-f; 
&lt;p&gt;th(2, h); 
&lt;p&gt;nodp(3,4,1); 
&lt;p&gt;e=ssb(sbrow-1,4); 
&lt;p&gt;nodp(5,6,1); 
&lt;p&gt;f=ssb(sbrow-1,3); 
&lt;p&gt;h=airspace_2+e-f; 
&lt;p&gt;th(4, h); 
&lt;p&gt;tra std loc All usr 1 0 n 1; 
&lt;p&gt;for (ii =1; ii&amp;lt;ims; ii++) ap(ii, chk, ssb(sbrow-8,1)+0.000001); 
&lt;p&gt;auf pxl; 
&lt;p&gt;ang fie_ang; 
&lt;p&gt;f 4 ins 1.2 0 0 0 0 -1.0 1.0 -1.0 1.0 1.0 0 0; 
&lt;p&gt;vig y y 5; 
&lt;p&gt;dlnr 1 0; 
&lt;p&gt;drw ims on; 
&lt;p&gt;stp outp on; 
&lt;p&gt;}&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e7%94%a8CCL%e5%ae%9e%e7%8e%b0%e6%89%8b%e5%b7%a5%e8%ae%be%e8%ae%a1Cooke+Triplet&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!304.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!304.entry</guid><pubDate>Thu, 04 Oct 2007 17:08:42 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!304/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!304.entry#comment</wfw:comment><dcterms:modified>2007-10-04T17:14:03Z</dcterms:modified></item><item><title>失落的命令</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!272.entry</link><description>&lt;div&gt;可以在帮助文档中找到关于text_toolbar_properties1的主题吗？&lt;img src="http://shared.live.com/VIf!VWmJbs6tK-ObyYk28Q/emoticons/smile_regular.gif"&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img height=514 alt=OSLO src="http://68.142.232.116/160/433110413_61f8773063_o.png" width=739&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e5%a4%b1%e8%90%bd%e7%9a%84%e5%91%bd%e4%bb%a4&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!272.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!272.entry</guid><pubDate>Sun, 25 Mar 2007 03:41:49 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!272/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!272.entry#comment</wfw:comment><dcterms:modified>2007-10-04T16:05:11Z</dcterms:modified></item><item><title>找出合适光阑位置的辅助工具</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!271.entry</link><description>&lt;div style="layout-grid:15.6pt none"&gt;
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;一些光学设计方面经验较少的初学者常会难于合理地设置光阑位置。例如下图，是测绘一个镜头后构建的系统。容易看出来，光阑被设置在不正确的位置上了。&lt;/span&gt; 
&lt;p style="text-align:center" align=center&gt; &lt;img height=310 src="http://68.142.232.116/183/412762801_806172c651.jpg" width=486 border=0&gt; 
&lt;p style="text-align:center" align=center&gt;&lt;span style="font-family:黑体"&gt;图&lt;/span&gt; &lt;span lang=EN-US&gt;1&lt;/span&gt;&lt;span style="font-family:黑体"&gt;，错误的光阑位置&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;下面以&lt;/span&gt;&lt;span lang=EN-US&gt;OSLO&lt;/span&gt;&lt;span style="font-family:华文宋体"&gt;内置的&lt;/span&gt;&lt;span lang=EN-US&gt;\public\len\demo\edu\demotrip.len&lt;/span&gt;&lt;span style="font-family:华文宋体"&gt;文件为例&lt;/span&gt;&lt;span style="font-family:华文宋体"&gt;，&lt;/span&gt;&lt;span style="font-family:华文宋体"&gt;来说明如何使用&lt;/span&gt;&lt;span lang=EN-US&gt;ap_st&lt;/span&gt;&lt;span style="font-family:华文宋体"&gt;函数来找到合适的光阑位置。&lt;/span&gt;&lt;span lang=EN-US&gt;&lt;/span&gt; 
&lt;p style="text-align:center" align=center&gt;&lt;span lang=EN-US&gt;&lt;span&gt;&lt;img height=297 src="http://68.142.232.116/186/412762805_fc699aa407.jpg" width=475 border=0&gt; &lt;/span&gt;&lt;/span&gt; 
&lt;p style="text-align:center" align=center&gt;&lt;span style="font-family:黑体"&gt;图&lt;/span&gt; &lt;span lang=EN-US&gt;2&lt;/span&gt;&lt;span style="font-family:黑体"&gt;，&lt;/span&gt;&lt;span lang=EN-US&gt;demotrip.len&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;打开&lt;/span&gt;&lt;span style="font-family:华文宋体"&gt;这个三片镜后，在命令行输入&lt;/span&gt;AP_ST(20, -5, 30)&lt;span style="font-family:华文宋体"&gt;，&lt;/span&gt;20&lt;span style="font-family:华文宋体"&gt;即是镜头的视场角，&lt;/span&gt;-5&lt;span style="font-family:华文宋体"&gt;和&lt;/span&gt;30&lt;span style="font-family:华文宋体"&gt;是以镜头的第一个光学面顶点（图&lt;/span&gt;2&lt;span style="font-family:华文宋体"&gt;中箭头所指处）为原点，在向左&lt;/span&gt;5mm&lt;span style="font-family:华文宋体"&gt;，向右&lt;/span&gt;30mm&lt;span style="font-family:华文宋体"&gt;的范围内搜索合适的光阑位置。文本窗口中输出结果如下。&lt;/span&gt; 
&lt;p style="text-indent:0cm;line-height:9pt"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Monospac821 BT'"&gt;$ The most possible position...&lt;/span&gt; 
&lt;p style="text-indent:0cm;line-height:9pt"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Monospac821 BT'"&gt;&lt;span&gt;   &lt;/span&gt;8.571429&lt;/span&gt; 
&lt;p style="text-indent:0cm;line-height:9pt"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Monospac821 BT'"&gt;$ The most possible position...&lt;/span&gt; 
&lt;p style="text-indent:0cm;line-height:9pt"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Monospac821 BT'"&gt;&lt;span&gt;  &lt;/span&gt;15.357143&lt;/span&gt; 
&lt;p style="text-indent:0cm;line-height:9pt"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Monospac821 BT'"&gt;$ The position below also can be tried...&lt;/span&gt; 
&lt;p style="text-indent:0cm;line-height:9pt"&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Monospac821 BT'"&gt;&lt;span&gt;  &lt;/span&gt;11.785714&lt;/span&gt; 
&lt;p style="text-indent:0cm"&gt;&lt;span style="font-family:华文宋体"&gt;输出的数值即是以镜头的第一个光学面顶点（图&lt;/span&gt;2&lt;span style="font-family:华文宋体"&gt;中箭头所指处）为原点的位置。该三片镜原有光阑位置为&lt;/span&gt;9mm&lt;span style="font-family:华文宋体"&gt;（&lt;/span&gt;2mm + 6mm + 1mm&lt;span style="font-family:华文宋体"&gt;），和第一个推荐的位置&lt;/span&gt;&lt;span lang=EN-US style="font-size:9pt;font-family:'Monospac821 BT'"&gt;8.571429&lt;/span&gt;&lt;span style="font-family:华文宋体"&gt;很接近。&lt;/span&gt; 
&lt;p style="text-indent:0cm"&gt;&lt;span style="font-family:华文宋体"&gt;现在用&lt;/span&gt;AP_ST(30, 0, 15)&lt;span style="font-family:华文宋体"&gt;来寻找图一中合适的光阑位置。&lt;/span&gt; 
&lt;p&gt;&lt;span lang=EN-US&gt;$ The position below also can be tried...&lt;/span&gt; 
&lt;p&gt;&lt;span lang=EN-US&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;8.469388&lt;span style="font-size:9pt"&gt;&lt;/span&gt; 
&lt;p style="text-indent:19.2pt"&gt;&lt;span style="font-size:9pt;font-family:华文宋体"&gt;比对原始结构的数值后，发现胶合镜片的后一面是最接近这一数值的可能设置光阑的面，如下图。&lt;/span&gt;&lt;span style="font-size:9pt"&gt;&lt;/span&gt; 
&lt;p style="text-align:center" align=center&gt; &lt;img height=250 src="http://68.142.232.116/177/412766505_fb70380349.jpg" width=334 border=0&gt; 
&lt;p style="text-align:center" align=center&gt;&lt;span style="font-family:黑体"&gt;图&lt;/span&gt; &lt;span lang=EN-US&gt;3&lt;/span&gt;&lt;span style="font-family:黑体"&gt;，正确的光阑位置&lt;/span&gt; 
&lt;p&gt;&lt;span style="font-family:华文宋体"&gt;源码如下&lt;/span&gt;&lt;span style="font-family:华文宋体"&gt;：&lt;/span&gt;&lt;span lang=EN-US&gt;&lt;/span&gt; 
&lt;p&gt; &lt;font face="Times New Roman, Times, Serif" size=1&gt;cmd ap_st(float half_angle, float left_end, float right_end)&lt;br&gt;{&lt;br&gt; int ii, anchor;&lt;br&gt; int step=99;&lt;br&gt; float step_length;&lt;br&gt; &lt;br&gt; float original_ang, original_th0, original_th_ims;&lt;br&gt; float L_position[step], ray_height[step];&lt;br&gt; float derivative1st[step], derivative2nd[step];&lt;br&gt; &lt;br&gt; //check whether obj dist is infinity&lt;br&gt; if(th[0]&amp;lt;1e20) abort(&amp;quot;This is not an infinite conjugate system.&amp;quot;);&lt;br&gt; &lt;br&gt; original_ang=ang/dr;&lt;br&gt;  &lt;br&gt; stp outp off;&lt;br&gt; anchor=sbrow;&lt;br&gt; &lt;br&gt; sbr anchor 1; &lt;br&gt; half_angle *= 0.7;&lt;br&gt; ang(half_angle);&lt;br&gt; original_th0=th[0];&lt;br&gt; original_th_ims=th[ims];&lt;br&gt; auf pxl;&lt;br&gt; //delete all the solve&lt;br&gt; for ( ii = 1; ii &amp;lt;= Imsnbr; ii++ )&lt;br&gt; {&lt;br&gt;  tsd(ii);                     // delete thickness solve on surface&lt;br&gt;  csd(ii);                     // delete curvature solve on surface&lt;br&gt;  if (apchk[ii]) ap(ii, noc, ap[ii]); // if aperture checking is on,                  &lt;br&gt;   &lt;br&gt; } &lt;/font&gt; 
&lt;p&gt;&lt;font face="Times New Roman, Times, Serif" size=1&gt; th(0,-1*left_end);&lt;br&gt; &lt;br&gt; for ( ii = 0; ii &amp;lt; step; ii++)&lt;br&gt; {&lt;br&gt;  L_position[ii]=ii*(right_end-left_end)/(step-1);&lt;br&gt;  trb ful loc 0 0 L_position[ii] sin(half_angle*dr) 0 cos(half_angle*dr) 1 0 ims n;&lt;br&gt;  ray_height[ii]=ssb(sbrow-3,1);&lt;br&gt;  L_position[ii]+=left_end;&lt;br&gt; }&lt;/font&gt; 
&lt;p&gt;&lt;font face="Times New Roman, Times, Serif" size=1&gt; //calculate the 1st and 2nd derivative&lt;br&gt; step_length=(right_end-left_end)/(step-1);&lt;br&gt; &lt;br&gt; for ( ii = 0; ii &amp;lt; step; ii++)&lt;br&gt; {&lt;br&gt;  if (ii==step-1) &lt;br&gt;  {&lt;br&gt;   derivative1st[ii]=derivative1st[ii-1];&lt;br&gt;   break;&lt;br&gt;  }&lt;br&gt;  derivative1st[ii]=(ray_height[ii+1]-ray_height[ii])/step_length;&lt;br&gt; }&lt;br&gt; &lt;br&gt; prt; prt  &amp;quot;*********************************&amp;quot;; prt;&lt;br&gt; for ( ii = 1; ii &amp;lt; step-1; ii++)&lt;br&gt; {&lt;br&gt;    if((ray_height[ii]-ray_height[ii-1])*(ray_height[ii]-ray_height[ii+1])&amp;gt;0)&lt;br&gt;    { &lt;br&gt;     prt  &amp;quot;$ The most possible position...&amp;quot;;&lt;br&gt;     prt  L_position[ii];&lt;br&gt;  }&lt;br&gt; }&lt;/font&gt; 
&lt;p&gt;&lt;font face="Times New Roman, Times, Serif" size=1&gt; for ( ii = 0; ii &amp;lt; step-2; ii++)&lt;br&gt; {&lt;br&gt;  if (ii==step-1) &lt;br&gt;  {&lt;br&gt;   derivative2nd[ii]=derivative2nd[ii-1];&lt;br&gt;   break;&lt;br&gt;  }&lt;br&gt;  derivative2nd[ii]=(derivative1st[ii+1]-derivative1st[ii])/step_length;&lt;/font&gt; 
&lt;p&gt;&lt;font face="Times New Roman, Times, Serif" size=1&gt; }&lt;/font&gt; 
&lt;p&gt;&lt;font face="Times New Roman, Times, Serif" size=1&gt; for ( ii = 1; ii &amp;lt; step-1; ii++)&lt;br&gt; {&lt;br&gt;    if((derivative1st[ii]-derivative1st[ii-1])*(derivative1st[ii]-derivative1st[ii+1])&amp;gt;0)&lt;br&gt;    { prt  &amp;quot;$ The position below also can be tried...&amp;quot;;&lt;br&gt;     prt  L_position[ii];&lt;br&gt;  }&lt;br&gt; }&lt;br&gt; prt; prt  &amp;quot;*********************************&amp;quot;; &lt;br&gt; th(0, original_th0);&lt;br&gt; th(ims, original_th_ims);&lt;br&gt; ang(original_ang);&lt;br&gt; &lt;br&gt; sbr -1*anchor 0;&lt;br&gt; stp outp on;&lt;br&gt; return;&lt;br&gt;}&lt;/font&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e6%89%be%e5%87%ba%e5%90%88%e9%80%82%e5%85%89%e9%98%91%e4%bd%8d%e7%bd%ae%e7%9a%84%e8%be%85%e5%8a%a9%e5%b7%a5%e5%85%b7&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!271.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!271.entry</guid><pubDate>Tue, 06 Mar 2007 18:06:17 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!271/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!271.entry#comment</wfw:comment><dcterms:modified>2007-10-05T16:07:23Z</dcterms:modified></item><item><title>GENII zoom version</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!265.entry</link><description>&lt;div&gt;&lt;font face="Times New Roman, Times, Serif" size=2&gt;　　1993年，Sinclair Optics收购Genesee Optics Software后，OSLO获得了GENII中很多有特色的功能。 简洁、高效的GENII评价函数就是其中之一。随着OSLO历次升级，GENII评价函仅在细节上略有演化——光线数减少等等。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Times New Roman, Times, Serif" size=2&gt;　　然而，内置的GENII始终不支持zoom结构。或许OSLO原厂有其在光学设计实际意义上的考虑。但能将高效的GENII用于相对收敛较慢的zoom优化，总是一件好事。出于这个考虑我改写了可用于zoom结构的GENII评价函数生成程序。这个程序是对OSLO内置的geniierf修改而来，并且参考了Doffery的工作完成的，在此一并感谢。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;#ifndef _OSLO_LIGHT_&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;#include &amp;quot;../../public/ccl/inc/gendefs.h&amp;quot;&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;cmd geniierf_zoom(double design_frequency_z, double f1_fymax_z, double f2_fymin_z,&lt;br&gt;             double f2_fymax_z, double f2_fx_z, double f3_fymin_z, double f3_fymax_z, double f3_fx_z,&lt;br&gt;             double f2_distol_z, double f3_distol_z, int max_cfg)&lt;br&gt;// hlp:  &amp;lt;P class=&amp;quot;Edition&amp;quot;&amp;gt;OSLO Premium/OSLO Standard&amp;lt;/P&amp;gt;&lt;br&gt;// hlp:  &amp;lt;P&amp;gt;Generates a &amp;lt;a href=&amp;quot;../optim/generation/genii.htm&amp;quot;&amp;gt;Genii error function&amp;lt;/a&amp;gt;.&amp;lt;/P&amp;gt;&lt;br&gt;// kwd:  genii, error function, OCM, optimisation, error function builder&lt;br&gt;// cat:  optimization&lt;br&gt;{&lt;br&gt; double uprime, dy, tmp;&lt;br&gt; int    ssrow;&lt;br&gt; char   tmpstr[32];&lt;br&gt; int   opr_grp = 43;  /* operands number for one configuration */&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt; set_preference(output_text, off);&lt;br&gt; ssrow = sbrow();&lt;br&gt; ssbuf_reset(ssrow, 50);&lt;br&gt; &lt;br&gt; /* basic transverse tolerance Dy */&lt;br&gt; dy = 1.0/(6.0*design_frequency_z);&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt; /* delete old operands to enable new ray set */&lt;br&gt; operands(new);&lt;br&gt; end;&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt; /* construct new ray set */&lt;br&gt; rayset(new);&lt;br&gt; /* field points &amp;lt;fby fbx fbz fyrf fxrf fymin fymax fxmin fxmax wgt&amp;gt; */&lt;br&gt; f(1, 0.0, 0.0, 0.0, 0.0, 0.0, -f1_fymax_z, f1_fymax_z, -f1_fymax_z, f1_fymax_z, 1.0);&lt;br&gt; f(2, 0.7, 0.0, 0.0, 0.0, 0.0, f2_fymin_z, f2_fymax_z, -f2_fx_z, f2_fx_z, 1.0);&lt;br&gt; f(3, 1.0, 0.0, 0.0, 0.0, 0.0, f3_fymin_z, f3_fymax_z, -f3_fx_z, f3_fx_z, 1.0);&lt;br&gt; /* rays &amp;lt;type fy fx&amp;gt; */ &lt;br&gt; r(1, ref,  0.0, 0.0);&lt;br&gt; r(2, ord,  1.0, 0.0);&lt;br&gt; r(3, ord, -1.0, 0.0);&lt;br&gt; r(4, ord,  0.0, 1.0);&lt;br&gt; end(); &lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;  /* new operand set */&lt;br&gt; operands(new);&lt;br&gt; end;&lt;br&gt; for ( i = 1; i &amp;lt; maxcfg + 1; i++)&lt;br&gt; {&lt;br&gt;  /* switch to different configuration*/&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;  cfg chg i;&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;  /* get current paraxial axial ray slope */&lt;br&gt;  paraxial_trace();&lt;br&gt;  uprime = -ssb(sbrow-1, 2); &lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;  /* GENII &amp;quot;tolerances&amp;quot; */&lt;br&gt;  sprintf(tmpstr, &amp;quot;%.11e&amp;quot;, dy); &lt;br&gt;  o(1 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_Dy tol&amp;quot;);&lt;br&gt; &lt;br&gt;  sprintf(tmpstr, &amp;quot;%.11e&amp;quot;, 2.1*dy); &lt;br&gt;  o(2 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_2.1 Dy&amp;quot;);&lt;br&gt; &lt;br&gt;  sprintf(tmpstr, &amp;quot;%.11e&amp;quot;, 2.8*dy); &lt;br&gt;  o(3 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_2.8 Dy&amp;quot;);&lt;br&gt; &lt;br&gt;  sprintf(tmpstr, &amp;quot;%.11e&amp;quot;, 3.0*dy); &lt;br&gt;  o(4 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_3 Dy&amp;quot;);&lt;br&gt; &lt;br&gt;  sprintf(tmpstr, &amp;quot;%.11e&amp;quot;, 4.0*dy); &lt;br&gt;  o(5 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_4 Dy&amp;quot;);  &lt;br&gt;     &lt;br&gt;  if (opdw)&lt;br&gt;   tmp = 1000.0*uni/wv[1];&lt;br&gt;  else&lt;br&gt;   tmp = 1.0;&lt;br&gt;  sprintf(tmpstr, &amp;quot;%.11e&amp;quot;, tmp*uprime*dy/3.0); &lt;br&gt;  o(6 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_up Dy/3&amp;quot;);&lt;br&gt;  sprintf(tmpstr, &amp;quot;%.11e&amp;quot;, tmp*3.2*uprime*dy); &lt;br&gt;  o(7 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_3.2 up Dy&amp;quot;); &lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt; /* on-axis targets */&lt;br&gt; /* pu(wvn, srf, cfg) axial ray slope (after refraction/reflection) */&lt;br&gt;  if (uprime &amp;lt; 0.0)&lt;br&gt;   sprintf(tmpstr, &amp;quot;%.11e+PU(1,%d,%d)&amp;quot;, uprime, ims_1, i);&lt;br&gt;  else&lt;br&gt;   sprintf(tmpstr, &amp;quot;PU(1,%d,%d)+%.11e&amp;quot;, ims_1, i, uprime);&lt;br&gt; &lt;br&gt;  o(8 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_uprime&amp;quot;);             /* paraxial axial ray slope in image space */&lt;br&gt;  &lt;br&gt;  sprintf(tmpstr, &amp;quot;O%d/0.0001&amp;quot;, 8 + ( i - 1 ) * opr_grp);                   /* 0.0001 is experimental magic number */&lt;br&gt;  o(9 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0, &amp;quot;Fnb diff&amp;quot;);     &lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;  /* dyy(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DYY(1,1,1,%d)/O%d&amp;quot;, i, 4 + ( i - 1) * opr_grp);&lt;br&gt;  o(10 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;Focus diff&amp;quot;);  /* focus shift penalty */&lt;br&gt;  &lt;br&gt;    /* dy(fpt, ray, wvn, cfg) */&lt;br&gt;    sprintf(tmpstr, &amp;quot;DY(1,2,1,%d)/O%d&amp;quot;, i, 1 + ( i - 1) * opr_grp);&lt;br&gt;  o(11 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;Axial DY&amp;quot;);     /* transverse aberration */&lt;br&gt;  &lt;br&gt;  &lt;br&gt;  /* opd(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;OPD(1,2,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(12 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;Axial OPD&amp;quot;);   /* OPD on-axis */&lt;br&gt;  &lt;br&gt;  /* dmd(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DMD(1,2,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(13 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;Axial DMD&amp;quot;);   /* axial color (DMD) */&lt;br&gt;  &lt;br&gt; /* 0.7 field targets */&lt;br&gt;  sprintf(tmpstr, &amp;quot;%.11e&amp;quot;, f2_distol_z);&lt;br&gt;  o(14 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_0.7 Dstol&amp;quot;);&lt;br&gt;  &lt;br&gt;  /* dist(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;100*DIST(2,1,1,%d)&amp;quot;, i );&lt;br&gt;  o(15 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_0.7 Dist&amp;quot;);&lt;br&gt;  &lt;br&gt;  sprintf(tmpstr, &amp;quot;O%d/O%d&amp;quot;, 15 + ( i - 1) * opr_grp, 14 + ( i - 1) * opr_grp);&lt;br&gt;  o(16 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 Dist&amp;quot;);        /* Distortion */&lt;br&gt;   &lt;br&gt;  /* dyy(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DYY(2,1,1,%d)/O%d&amp;quot;, i, 2 + ( i - 1) * opr_grp);&lt;br&gt;  o(17 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 YFS&amp;quot;);     /* tangential field curvature */&lt;br&gt;  &lt;br&gt;  /* dxx(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DXX(2,1,1,%d)/O%d&amp;quot;, i, 2 + ( i - 1) * opr_grp);&lt;br&gt;  o(18 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 XFS&amp;quot;);     /* sagittal field curvature */&lt;br&gt;  &lt;br&gt;  /* s2t(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;S2T(2,1,1,%d)/O%d&amp;quot;, i, 7 + ( i - 1) * opr_grp);&lt;br&gt;  o(19 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 Coma&amp;quot;);    /* primary aperture coma */&lt;br&gt;  &lt;br&gt;    /* dy(fpt, ray, wvn, cfg) */&lt;br&gt;    sprintf(tmpstr, &amp;quot;DY(2,2,1,%d)/O%d&amp;quot;, i, 3 + ( i - 1) * opr_grp);&lt;br&gt;  o(20 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 DY U&amp;quot;);     /* transverse aberration in upper aperture */&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;  /* opd(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;OPD(2,2,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(21 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 OPD U&amp;quot;);   /* OPD in upper aperture */&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;    /* dmd(fpt, ray, wvn, cfg) */&lt;br&gt;    sprintf(tmpstr, &amp;quot;DMD(2,2,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(22 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 DMD U&amp;quot;);   /* DMD for lateral color in upper aperture */&lt;br&gt;  &lt;br&gt;  /* dy(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DY(2,3,1,%d)/O%d&amp;quot;, i, 3 + ( i - 1) * opr_grp);&lt;br&gt;  o(23 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 DY L&amp;quot;);     /* transverse aberration in lower aperture */&lt;br&gt;  &lt;br&gt;  /* opd(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;OPD(2,3,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(24 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 OPD L&amp;quot;);   /* OPD in lower aperture */&lt;br&gt;  &lt;br&gt;  /* dmd(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DMD(2,3,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(25 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 DMD L&amp;quot;);   /* DMD for lateral color in lower aperture */&lt;br&gt;    &lt;br&gt;  /* dx(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DX(2,4,1,%d)/O%d&amp;quot;, i, 3 + ( i - 1) * opr_grp);&lt;br&gt;  o(26 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 Sag DX&amp;quot;);   /* transverse aberration x-component for sagittal ray */&lt;br&gt;    &lt;br&gt;  /* dy(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DY(2,4,1,%d)/O%d&amp;quot;, i, 1 + ( i - 1) * opr_grp);&lt;br&gt;  o(27 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;0.7 Sag DY&amp;quot;);   /* transverse aberration y-component for sagittal ray */&lt;br&gt;    &lt;br&gt;  /* opd(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;OPD(2,4,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(28 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;.7 Sag OPD&amp;quot;);  /* OPD for sagittal ray */&lt;br&gt;  &lt;br&gt; /* 1.0 field targets */&lt;br&gt;  sprintf(tmpstr, &amp;quot;%.11e&amp;quot;, f3_distol_z);                   &lt;br&gt;  o(29 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_1.0 Dstol&amp;quot;);&lt;br&gt;  &lt;br&gt;  /* dist(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;100*DIST(3,1,1,%d)&amp;quot;, i);&lt;br&gt;  o(30 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 0.0, &amp;quot;_1.0 Dist&amp;quot;);&lt;br&gt;  &lt;br&gt;  sprintf(tmpstr, &amp;quot;O%d/O%d&amp;quot;, 30 + ( i - 1) * opr_grp, 29 + ( i - 1) * opr_grp);&lt;br&gt;  o(31 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 Dist&amp;quot;);        /* Distortion */&lt;br&gt;  &lt;br&gt;  /* dyy(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DYY(3,1,1,%d)/O%d&amp;quot;, i, 4 + ( i - 1) * opr_grp);&lt;br&gt;  o(32 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 YFS&amp;quot;);     /* tangential field curvature */&lt;br&gt;  &lt;br&gt;  /* dxx(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DXX(3,1,1,%d)/O%d&amp;quot;, i, 1 + ( i - 1) * opr_grp);&lt;br&gt;  o(33 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 XFS&amp;quot;);     /* sagittal field curvature */&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;  /* s2t(fpt, ray, wvn, cfg) */&lt;br&gt;    sprintf(tmpstr, &amp;quot;S2T(3,1,1,%d)/O%d&amp;quot;, i, 7 + ( i - 1) * opr_grp);&lt;br&gt;  o(34 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 Coma&amp;quot;);    /* primary aperture coma */&lt;br&gt;  &lt;br&gt;  /* dy(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DY(3,2,1,%d)/O%d&amp;quot;, i, 5 + ( i - 1) * opr_grp);&lt;br&gt;  o(35 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 DY U&amp;quot;);     /* transverse aberration in upper aperture */&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;  /* opd(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;OPD(3,2,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(36 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 OPD U&amp;quot;);   /* OPD in upper aperture */&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;    /* dmd(fpt, ray, wvn, cfg) */&lt;br&gt;    sprintf(tmpstr, &amp;quot;DMD(3,2,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(37 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 DMD U&amp;quot;);   /* DMD for lateral color in upper aperture */&lt;br&gt;  &lt;br&gt;    /* dy(fpt, ray, wvn, cfg) */&lt;br&gt;    sprintf(tmpstr, &amp;quot;DY(3,3,1,%d)/O%d&amp;quot;, i, 5 + ( i - 1) * opr_grp);&lt;br&gt;  o(38 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 DY L&amp;quot;);     /* transverse aberration in lower aperture */&lt;br&gt;  &lt;br&gt;  /* opd(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;OPD(3,3,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(39 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 OPD L&amp;quot;);   /* OPD in lower aperture */&lt;br&gt;    &lt;br&gt;  /* dmd(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DMD(3,3,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(40 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 DMD L&amp;quot;);   /* DMD for lateral color in lower aperture */&lt;br&gt;  &lt;br&gt;  /* dx(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DX(3,4,1,%d)/O%d&amp;quot;, i, 5 + ( i - 1) * opr_grp);&lt;br&gt;  o(41 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 Sag DX&amp;quot;);   /* transverse aberration x-component for sagittal ray */&lt;br&gt;  &lt;br&gt;  /* dy(fpt, ray, wvn, cfg) */&lt;br&gt;  sprintf(tmpstr, &amp;quot;DY(3,4,1,%d)/O%d&amp;quot;, i, 1 + ( i - 1) * opr_grp);&lt;br&gt;  o(42 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1.0 Sag DY&amp;quot;);   /* transverse aberration y-component for sagittal ray */&lt;br&gt;    &lt;br&gt;    /* opd(fpt, ray, wvn, cfg) */&lt;br&gt;    sprintf(tmpstr, &amp;quot;OPD(3,4,1,%d)/O%d&amp;quot;, i, 6 + ( i - 1) * opr_grp);&lt;br&gt;  o(43 + ( i - 1 ) * opr_grp, ins, tmpstr, min, 1.0, &amp;quot;1 Sag OPD&amp;quot;);   /* OPD for sagittal ray */&lt;br&gt; &lt;br&gt; }&lt;br&gt; /* end of new operand set*/ &lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt; ssbuf_reset(-ssrow, 0);&lt;br&gt; set_preference(output_text, on);&lt;br&gt;}&lt;/font&gt;
&lt;p&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;#endif&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+GENII+zoom+version&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!265.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!265.entry</guid><pubDate>Tue, 26 Dec 2006 06:51:32 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!265/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!265.entry#comment</wfw:comment><dcterms:modified>2006-12-26T07:50:06Z</dcterms:modified></item><item><title>2006年度Glassmap最佳伴侣</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!237.entry</link><description>&lt;div&gt;
&lt;p&gt;&lt;font face="华文宋体" size=2&gt;　　新的命令GN可以实现以下功能，一，定位玻璃所在行数；二，根据当前波长选择计算折射率和色散；三，查询玻璃图中相邻玻璃的参数，而不引起玻璃图刷新。&lt;/font&gt;
&lt;p&gt;&lt;font face="华文宋体" size=2&gt;　　例如，在Schott目录中查询K11玻璃，可以在Schott玻璃数据库打开的状态下输入gn k11。在文本窗口中可以看到K11玻璃在第10行，同时也输出按照当前波长计算的n和v。另外，键入gn bk7，就可以在玻璃图没有任何刷新，焦点没有变化的情况下输出BK7的参数。&lt;/font&gt;&lt;/div&gt;
&lt;p&gt;&lt;img height=404 alt=GN src="http://static.flickr.com/66/219277568_ae5e1419de_o.png" width=683&gt;
&lt;p&gt;&lt;font face=Arial size=1&gt;double dispersion(double lambda, int disp_model, double c0, double c1, double c2, double c3, double c4, double c5)&lt;br&gt;{&lt;br&gt;    double refractive_index;&lt;br&gt;    switch(disp_model)&lt;br&gt;    {&lt;br&gt;        case 1: //if (Dispersion model == Laurent)&lt;br&gt;            if((refractive_index = (c0+(c1*pow(lambda,2))+(c2*pow(lambda,-2))+(c3*pow(lambda,-4))+(c4*pow(lambda,-6))+(c5*pow(lambda,-8))))&amp;lt;0) &lt;br&gt;            refractive_index = 1.0;&lt;br&gt;            refractive_index = sqrt(refractive_index);&lt;br&gt;            break;&lt;br&gt;&lt;br&gt;        case 2: //if (Dispersion model == Sellmeier) &lt;br&gt;            lambda *= lambda;&lt;br&gt;            refractive_index = sqrt(1+(c0*lambda/(lambda-c3))+(c1*lambda/(lambda-c4))+(c2*lambda/(lambda-c5)));&lt;br&gt;            break;&lt;br&gt;&lt;br&gt;        case 3: //if (Dispersion model == Conrady)&lt;br&gt;            refractive_index = c0+(c1/lambda)+(c2*pow(lambda,-3.5));&lt;br&gt;            break;&lt;br&gt;&lt;br&gt;        default:&lt;br&gt;            prt(&amp;quot;error in dispersion mode %d&amp;quot;, mode);&lt;br&gt;            refractive_index = 1.0;&lt;br&gt;            break;&lt;br&gt;    }&lt;br&gt;    return refractive_index;&lt;br&gt;}&lt;/font&gt;
&lt;p&gt;&lt;font face=Arial size=1&gt;cmd gn(char gn[])&lt;br&gt;{&lt;br&gt;    char glassname[2000][18], tmpstr[18];&lt;br&gt;    int rows_number, found = 0, model;&lt;br&gt;    double cf0, cf1, cf2, cf3, cf4, cf5;&lt;br&gt;    double wv_short = wv[2], wv_middle = wv[1], wv_long = wv[3];&lt;br&gt;    double n, delta_n, v;&lt;br&gt;&lt;br&gt;    dbgsc(glassname,0,1);&lt;br&gt;    ary2strcpy(tmpstr, glassname, 0);&lt;br&gt;    rows_number = atol(tmpstr);&lt;br&gt;    for (i = 1; i &amp;lt; (rows_number + 1); i++ )&lt;br&gt;    {&lt;br&gt;        ary2strcpy(tmpstr, glassname, i);&lt;br&gt;        if (!stricmp(gn, tmpstr))&lt;br&gt;        {&lt;br&gt;            found = 1;&lt;br&gt;            dbgie(&amp;amp;model, i, 13);&lt;br&gt;            dbgre(&amp;amp;cf0, i, 15);&lt;br&gt;            dbgre(&amp;amp;cf1, i, 16);&lt;br&gt;            dbgre(&amp;amp;cf2, i, 17);&lt;br&gt;            dbgre(&amp;amp;cf3, i, 18);&lt;br&gt;            dbgre(&amp;amp;cf4, i, 19);&lt;br&gt;            dbgre(&amp;amp;cf5, i, 20);&lt;br&gt;            n = dispersion(wv_middle, model, cf0, cf1, cf2, cf3, cf4, cf5);&lt;br&gt;            delta_n = dispersion(wv_short, model, cf0, cf1, cf2, cf3, cf4, cf5) - dispersion(wv_long, model, cf0, cf1, cf2, cf3, cf4, cf5);&lt;br&gt;            v = (n-1)/delta_n;&lt;br&gt;            prt &amp;quot;*Row Glass N V&amp;quot;; &lt;br&gt;            aprt i &amp;quot; &amp;quot; tmpstr n v;&lt;br&gt;            break;&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;    if (!found) message(&amp;quot;Error in glass name!&amp;quot;);&lt;br&gt;}&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+2006%e5%b9%b4%e5%ba%a6Glassmap%e6%9c%80%e4%bd%b3%e4%bc%b4%e4%be%a3&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!237.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!237.entry</guid><pubDate>Sat, 19 Aug 2006 17:59:16 GMT</pubDate><slash:comments>6</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!237/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!237.entry#comment</wfw:comment><dcterms:modified>2006-08-19T18:37:36Z</dcterms:modified></item><item><title>弯曲镜片并保持焦距的函数</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!228.entry</link><description>  
&lt;p style="line-height:150%"&gt;&lt;font size=2&gt;　　有时我们需要对镜片进行弯曲，而保持其单个镜片的焦距不变。如果我们仅将镜片两侧的曲率同时修改某个数值，是达不到这样的效果的。以下用OSLO安装路径中\public\len\demo\light\tutorial\dblgauss1.len为例说明。&lt;/font&gt;
&lt;p&gt;&lt;img height=272 alt="Demo dblgauss1" src="http://static.flickr.com/93/207325230_cdcbad8a34.jpg" width=420&gt; &lt;img height=127 alt="弯曲4" src="http://static.flickr.com/92/207325232_e1fa4bb438.jpg" width=500&gt; 
&lt;p&gt;
&lt;p&gt;&lt;font size=2&gt;　　如果仅仅同时增加第一片镜片两侧的曲率，例如0.005：&lt;/font&gt;&lt;img height=119 alt="弯曲5" src="http://static.flickr.com/74/207325233_da6b94c4ed.jpg" width=500&gt; 
&lt;p&gt;
&lt;p&gt;&lt;font size=2&gt;　　使用以下提供的bend命令增加第一面的曲率，例如0.005：&lt;/font&gt;&lt;img height=124 alt="弯曲6" src="http://static.flickr.com/81/207325235_99176b74a8.jpg" width=500&gt;   
&lt;p style="line-height:150%"&gt;&lt;font size=2&gt;　　同时，bend函数中也演示了如何在CCL程序中切换优化变量和优化算子。因此，尽管bend函数调用的OSLO内置的ite，但仍保留了原有的变量和优化算子。&lt;/font&gt;&lt;pre&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;//Revised 2006-08-07; correct for negative component&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;#include &amp;quot;../../public/ccl/inc/vbdata.h&amp;quot;&lt;br&gt;#include &amp;quot;../../public/ccl/inc/strdefs.h&amp;quot;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;cmd getvar(double current_variables[][])&lt;br&gt;{&lt;br&gt; int error;&lt;br&gt; if (error = getvdat(current_variables))&lt;br&gt; {&lt;br&gt;  if (error == -1)    prt &amp;quot;No variables&amp;quot;;&lt;br&gt;  else if (error == -2 ) prt &amp;quot;File opening error&amp;quot;;&lt;br&gt; }&lt;br&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;cmd cleanup_var()&lt;br&gt;{ &lt;br&gt; for (i = varnbr-1; i &amp;gt; 0; i--) v(i, del);&lt;br&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;cmd retrieve_var(double variable_list[][], int original_num)&lt;br&gt;{&lt;br&gt; int tmp_srf_num;&lt;br&gt; int tmp_cfg_num;&lt;br&gt; int tmp_var_typ;&lt;br&gt; &lt;br&gt; for (i = 1; i &amp;lt; original_num; i++)&lt;br&gt; {&lt;br&gt;  tmp_srf_num = r2int(variable_list[i][0]);&lt;br&gt;  tmp_cfg_num = r2int(variable_list[i][1]);&lt;br&gt;  tmp_var_typ = r2int(variable_list[i][2]);&lt;br&gt;  switch (tmp_var_typ)&lt;br&gt;  {&lt;br&gt;   case 1: v(i, ins, tmp_srf_num, tmp_cfg_num, CV, variable_list[i][3], variable_list[i][4], variable_list[i][5], variable_list[i][6]);&lt;br&gt;       break;&lt;br&gt;   case 2: v(i, ins, tmp_srf_num, tmp_cfg_num, CC, variable_list[i][3], variable_list[i][4], variable_list[i][5], variable_list[i][6]);&lt;br&gt;       break;   &lt;br&gt;   case 3: v(i, ins, tmp_srf_num, tmp_cfg_num, TH, variable_list[i][3], variable_list[i][4], variable_list[i][5], variable_list[i][6]);&lt;br&gt;       break;&lt;br&gt;   default: message(&amp;quot;Variable type error!&amp;quot;); break;&lt;br&gt;  }  &lt;br&gt; }&lt;br&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;cmd getope(int op_num[], int op_mod[], double op_wgt[], double op_tgt[], char op_nam[][], char op_def[][])&lt;br&gt;{&lt;br&gt; int error;&lt;br&gt; char tmpstr[50];&lt;br&gt; for (i = 1; i &amp;lt; oprnbr; i++)&lt;br&gt; {&lt;br&gt;  op_num[i] = i;&lt;br&gt;  op_mod[i]=opmode[i-1];&lt;br&gt;  if (op_mod[i]) op_tgt[i]=optgt[i-1];&lt;br&gt;   else op_wgt[i]=opwgt[i-1];&lt;br&gt;  get_operand_name(i-1);&lt;br&gt;  if (error = str2arycpy(op_nam, operand_name, i)) message(error);&lt;br&gt;  get_operand_def(i-1);&lt;br&gt;  if (error = str2arycpy(op_def, operand_definition, i)) message(error);&lt;br&gt; } &lt;br&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;cmd cleanup_ope()&lt;br&gt;{&lt;br&gt; for (i = oprmax; i &amp;gt; 0; i--) o(i, del);&lt;br&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;cmd retrieve_ope(int total, int number[], int mode[], double weight[], double target[], char name[][], char definition[][])&lt;br&gt;{&lt;br&gt; char tmp_nam[11];&lt;br&gt; char tmp_def[50];&lt;br&gt; for (i = 1; i &amp;lt; total; i++)&lt;br&gt; {&lt;br&gt;  ary2strcpy(tmp_nam, name, i);&lt;br&gt;  ary2strcpy(tmp_def, definition, i);&lt;br&gt;  switch (mode[i])&lt;br&gt;  {&lt;br&gt;   case 0: o(i, ins, tmp_def, min, weight[i], tmp_nam); break;&lt;br&gt;   case 1: o(i, ins, tmp_def, con, target[i], tmp_nam); break;&lt;br&gt;   default: message(&amp;quot;Operand mode error!&amp;quot;); break;&lt;br&gt;  }&lt;br&gt; }&lt;br&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;cmd auto()&lt;br&gt;{&lt;br&gt; int original_varnbr = varnbr;&lt;br&gt; int original_oprnbr = oprnbr;&lt;br&gt; double saved[original_varnbr][8];&lt;br&gt; &lt;br&gt; double original_efl;&lt;br&gt; double original_opst=opst;&lt;br&gt; double new_opst=0.000001;&lt;br&gt; char set_operand[50];&lt;br&gt; &lt;br&gt; int O_op_num[original_oprnbr];&lt;br&gt; int O_op_mod[original_oprnbr];&lt;br&gt; double O_op_wgt[original_oprnbr];&lt;br&gt; double O_op_tgt[original_oprnbr];&lt;br&gt; char O_op_nam[original_oprnbr][11];&lt;br&gt; char O_op_def[original_oprnbr][50];&lt;br&gt; &lt;br&gt; int tmp_srfnum, compensation;&lt;br&gt; double delta_cv;&lt;br&gt; int first, second;&lt;br&gt; &lt;br&gt; getvar(saved);&lt;br&gt; getope(O_op_num, O_op_mod, O_op_wgt, O_op_tgt, O_op_nam, O_op_def);&lt;br&gt; cleanup_var();&lt;br&gt; cleanup_ope();&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt; input(&amp;amp;tmp_srfnum, &amp;quot;Which surface you change?&amp;quot;);&lt;br&gt; input(&amp;amp;delta_cv, &amp;quot;How much curvature you change?&amp;quot;);&lt;br&gt; input(&amp;amp;compensation, &amp;quot;Which surface compensate?&amp;quot;);&lt;br&gt; &lt;br&gt; input(&amp;amp;first, &amp;quot;Which is the first surface?&amp;quot;);&lt;br&gt; input(&amp;amp;second, &amp;quot;Which is the second surface?&amp;quot;);&lt;br&gt; if ((original_efl=pe_efl(first, second)) &amp;gt;= 0)&lt;br&gt;  sprintf(set_operand, &amp;quot;EFL(%d,%d,1)-%.6f&amp;quot;, first, second, original_efl);&lt;br&gt;  else sprintf(set_operand, &amp;quot;EFL(%d,%d,1)+%.6f&amp;quot;, first, second, fabs(original_efl));&lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; cv(tmp_srfnum,cv[tmp_srfnum]+delta_cv);&lt;br&gt; v(1, ins, compensation, 0, CV, 0, 0, 1, 0);&lt;br&gt; prt set_operand;&lt;br&gt; prt OK1;&lt;br&gt; o(1, ins, set_operand, min, 100.0, &amp;quot;EFL&amp;quot;);&lt;br&gt; prt OK2;&lt;br&gt; opst(new_opst);&lt;br&gt; prt opst, new_opst;&lt;br&gt; ite ful 100;&lt;br&gt; opst(original_opst);&lt;br&gt; cleanup_var();&lt;br&gt; cleanup_ope(); &lt;br&gt; retrieve_var(saved, original_varnbr);&lt;br&gt; retrieve_ope(original_oprnbr, O_op_num, O_op_mod, O_op_wgt, O_op_tgt, O_op_nam, O_op_def);&lt;br&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e5%bc%af%e6%9b%b2%e9%95%9c%e7%89%87%e5%b9%b6%e4%bf%9d%e6%8c%81%e7%84%a6%e8%b7%9d%e7%9a%84%e5%87%bd%e6%95%b0&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!228.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!228.entry</guid><pubDate>Sat, 05 Aug 2006 17:36:13 GMT</pubDate><slash:comments>5</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!228/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!228.entry#comment</wfw:comment><dcterms:modified>2006-08-07T02:02:59Z</dcterms:modified></item><item><title>烛光花影两相宜</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!227.entry</link><description>&lt;div&gt;　　OSLO 6.2.x没有提供vari_sfn等等的读取接口，范例程序中展示了读取该变量底层的实作技巧。OSLO 6.3.x的CCL global data就提供了这一项，非常简洁。&lt;/div&gt;
&lt;div&gt; 　　这从另一角度说明了OSLO中“&lt;em&gt;The&lt;/em&gt; &lt;em&gt;lens is the document&lt;/em&gt;”的概念。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img height=680 alt="Variables interface" src="http://static.flickr.com/71/202969184_fddeab35d6_o.png" width=593&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e7%83%9b%e5%85%89%e8%8a%b1%e5%bd%b1%e4%b8%a4%e7%9b%b8%e5%ae%9c&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!227.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!227.entry</guid><pubDate>Mon, 31 Jul 2006 16:52:09 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!227/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!227.entry#comment</wfw:comment><dcterms:modified>2006-07-31T17:07:25Z</dcterms:modified></item><item><title>依照两主面间距离计算面间距</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!226.entry</link><description>&lt;div&gt;　　这是依照两主面间距离计算面间距的一个小的SCP程序，由近轴计算换成厚透镜时用得上。&lt;/div&gt;
&lt;div&gt;&lt;font face="Geneva, Arial, Sans-serif" size=1&gt;*PP&lt;br&gt;//set thickness according the principal plane distance&lt;br&gt;stp outp off;&lt;br&gt;input(&amp;amp;i, &amp;quot;Input the first surface of the first group:&amp;quot;);&lt;br&gt;input(&amp;amp;j, &amp;quot;Input the last surface of the first group:&amp;quot;);&lt;br&gt;input(&amp;amp;k, &amp;quot;Input the first surface of the second group:&amp;quot;);&lt;br&gt;input(&amp;amp;l, &amp;quot;Input the last surface of the second group:&amp;quot;);&lt;br&gt;nodp(i,j,1);&lt;br&gt;e=ssb(sbrow-1,4);&lt;br&gt;nodp(k,l,1);&lt;br&gt;f=ssb(sbrow-1,3);&lt;br&gt;input(&amp;amp;g, &amp;quot;Input the distance between two PP:&amp;quot;);&lt;br&gt;h=g+e-f;&lt;br&gt;stp outp on;&lt;br&gt;aprt &amp;quot;The distance between&amp;quot; j &amp;quot;and&amp;quot; k &amp;quot;should be&amp;quot; h;&lt;/font&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e4%be%9d%e7%85%a7%e4%b8%a4%e4%b8%bb%e9%9d%a2%e9%97%b4%e8%b7%9d%e7%a6%bb%e8%ae%a1%e7%ae%97%e9%9d%a2%e9%97%b4%e8%b7%9d&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!226.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!226.entry</guid><pubDate>Sun, 30 Jul 2006 17:50:14 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!226/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!226.entry#comment</wfw:comment><dcterms:modified>2006-07-31T01:17:53Z</dcterms:modified></item><item><title>当然，也可以说程序风格很好</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!199.entry</link><description>&lt;div&gt;　　OSLO 的 xsource 源文件中有一小段重复代码，是为了良好的风格吗？&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img height=430 alt="一个小问题" src="http://static.flickr.com/55/131237845_db7223cfbc.jpg" width=310&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e5%bd%93%e7%84%b6%ef%bc%8c%e4%b9%9f%e5%8f%af%e4%bb%a5%e8%af%b4%e7%a8%8b%e5%ba%8f%e9%a3%8e%e6%a0%bc%e5%be%88%e5%a5%bd&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!199.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!199.entry</guid><pubDate>Wed, 19 Apr 2006 08:02:54 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!199/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!199.entry#comment</wfw:comment><dcterms:modified>2006-04-19T08:02:54Z</dcterms:modified></item><item><title>改进版本的xsource命令</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!198.entry</link><description>&lt;div&gt;&lt;span style="letter-spacing:1px"&gt;&lt;font face="华文宋体" size=2&gt;　　图一是OSLO中Source-&amp;gt;Pixelated Object菜单（Xsource）的图形输出结果。当光线取样数增大到一定程度，xsource的输出已经无法让设计者清楚的了解成像情况。&lt;/font&gt;&lt;/span&gt;&lt;span style="letter-spacing:1px"&gt;&lt;/span&gt;  &lt;/div&gt;
&lt;p align=center&gt;&lt;img height=390 alt="内置的xsource命令" src="http://static.flickr.com/45/129804997_5e6f978baf.jpg" width=481&gt;
&lt;div align=center&gt;图一&lt;/div&gt;
&lt;div&gt;&lt;font face="华文宋体" size=2&gt;　　修改后的输出如图二 。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;p&gt;&lt;img height=390 alt="改进的输出结果" src="http://static.flickr.com/51/129804998_15c4b080e0.jpg" width=481&gt;
&lt;p align=center&gt;图二&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e6%94%b9%e8%bf%9b%e7%89%88%e6%9c%ac%e7%9a%84xsource%e5%91%bd%e4%bb%a4&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!198.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!198.entry</guid><pubDate>Mon, 17 Apr 2006 02:18:02 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!198/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!198.entry#comment</wfw:comment><dcterms:modified>2006-04-17T02:18:02Z</dcterms:modified></item><item><title>用于手工修改结构的双参数图函数</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!196.entry</link><description>&lt;div&gt;
&lt;p style="line-height:150%" align=center&gt;&lt;font face="隶书" size=3&gt;用于手工修改结构的双参数图函数&lt;/font&gt;
&lt;p style="line-height:150%"&gt;&lt;font face="华文宋体" size=2&gt;&lt;span style="letter-spacing:1px"&gt;　　常见的光学软件如OSLO，Zemax都提供了slider，便于直观的手工修改镜头结构。以OSLO为例，它内置ray-intercept、OPD、field sag、spot diagram和long. SA的即时callback图形输出，但这并不能满足所有的手工修改需求。双参数图就是一个很有用的补充。它本质是解二元一次方程和线性逼近，在使用上也和slider略有不同——使用slider是设计者尝试调节一些参数，然后观察变化，继续尝试下一步的修改；而双参数图则是调节敏感参数，计算目标像差变化，进而得到下一步的修改量。&lt;/span&gt;&lt;/font&gt;
&lt;p style="line-height:150%"&gt;&lt;font face="华文宋体" size=2&gt;&lt;span style="letter-spacing:1px"&gt;　　目前提供的函数版本还有少许缺憾——没有输出参数变化量的符号。符号必须根据图形来判断，同向为正，反向取负。&lt;/span&gt;&lt;/font&gt;
&lt;p style="line-height:150%" align=center&gt;&lt;img height=487 src="http://static.flickr.com/44/127721153_280c72e3fa_o.jpg" width=653 border=0&gt;
&lt;p style="line-height:150%" align=center&gt;&lt;font size=1&gt;图1：图形及文字输出&lt;/font&gt;
&lt;p style="line-height:150%"&gt;&lt;font face="Monospac821 BT" size=1&gt;//Function to draw double graph.&lt;br&gt;//Zhang Jing&lt;br&gt;//2006-03-15&lt;br&gt;&lt;br&gt;cmd dg_dist(float p1[], float p2[], float distance)&lt;br&gt;{&lt;br&gt;    distance=sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]));&lt;br&gt;    return;&lt;br&gt;}&lt;br&gt;&lt;br&gt;cmd dg()&lt;br&gt;{&lt;br&gt;    float point_0[2], point_1[2], point_2[2];&lt;br&gt;    float point_aim[2];&lt;br&gt;    float dist_0, dist_1;&lt;br&gt;    float x_temp, y_temp;&lt;br&gt;    float line_coef[3][3], equa_coef[2][2];&lt;br&gt;    float k2;&lt;br&gt;    float intersec[2];&lt;br&gt;    float constant[2];&lt;br&gt;    float dist_temp, dist[2], req_change[2];&lt;br&gt;&lt;br&gt;    input(&amp;amp;x_temp, &amp;quot;Input the x-coordinate of the aim point:&amp;quot;);&lt;br&gt;    point_aim[0] = x_temp;&lt;br&gt;    input(&amp;amp;y_temp, &amp;quot;Input the y-coordinate of the aim point:&amp;quot;);&lt;br&gt;    point_aim[1] = y_temp;&lt;br&gt;&lt;/font&gt;
&lt;p style="line-height:150%"&gt;&lt;font face="Monospac821 BT" size=1&gt;    input(&amp;amp;x_temp, &amp;quot;Input the x-coordinate of the 1st point:&amp;quot;);&lt;br&gt;    point_0[0] = x_temp;&lt;br&gt;    input(&amp;amp;y_temp, &amp;quot;Input the y-coordinate of the 1st point:&amp;quot;);&lt;br&gt;    point_0[1] = y_temp;&lt;br&gt;&lt;br&gt;    input(&amp;amp;dist_0, &amp;quot;Input the change of the 1st parameter:&amp;quot;);&lt;br&gt;&lt;br&gt;    input(&amp;amp;x_temp, &amp;quot;Input the x-coordinate of the 2nd point:&amp;quot;);&lt;br&gt;    point_1[0] = x_temp;&lt;br&gt;    input(&amp;amp;y_temp, &amp;quot;Input the y-coordinate of the 2nd point:&amp;quot;);&lt;br&gt;    point_1[1] = y_temp;&lt;br&gt;&lt;br&gt;    input(&amp;amp;dist_1, &amp;quot;Input the change of the 2nd parameter:&amp;quot;);&lt;/font&gt;
&lt;p style="line-height:150%"&gt;&lt;font face="Monospac821 BT" size=1&gt;&lt;br&gt;    input(&amp;amp;x_temp, &amp;quot;Input the x-coordinate of the 3rd point:&amp;quot;);&lt;br&gt;    point_2[0] = x_temp;&lt;br&gt;    input(&amp;amp;y_temp, &amp;quot;Input the y-coordinate of the 3rd point:&amp;quot;);&lt;br&gt;    point_2[1] = y_temp;&lt;br&gt;&lt;br&gt;    line_coef[0][0]=point_1[0]-point_0[0];&lt;br&gt;    line_coef[0][1]=point_0[1]-point_1[1];&lt;br&gt;    line_coef[0][2]=point_1[0]*point_0[1]-point_0[0]*point_1[1];&lt;br&gt;&lt;br&gt;    line_coef[1][0]=point_2[0]-point_1[0];&lt;br&gt;    line_coef[1][1]=point_1[1]-point_2[1];&lt;br&gt;    line_coef[1][2]=point_2[0]*point_1[1]-point_1[0]*point_2[1];&lt;br&gt;    &lt;br&gt;    k2=(point_2[1]-point_1[1])/(point_2[0]-point_1[0]);&lt;br&gt;&lt;br&gt;    line_coef[2][0]=1;&lt;br&gt;    line_coef[2][1]=-1*k2;&lt;br&gt;    line_coef[2][2]=point_aim[1]-k2*point_aim[0];&lt;br&gt;&lt;br&gt;    equa_coef[0][1]=line_coef[0][0]; equa_coef[0][0]=line_coef[0][1]; constant[0]=line_coef[0][2];&lt;br&gt;    equa_coef[1][1]=line_coef[2][0]; equa_coef[1][0]=line_coef[2][1]; constant[1]=line_coef[2][2];&lt;br&gt;&lt;br&gt;    slveqs(equa_coef, intersec, constant); &lt;br&gt;&lt;br&gt;    dg_dist(intersec, point_0, &amp;amp;dist_temp);&lt;br&gt;    dist[0]=dist_temp;&lt;br&gt;    dg_dist(point_1, point_0, &amp;amp;dist_temp);&lt;br&gt;    req_change[0]=dist[0]/dist_temp*dist_0;&lt;br&gt;&lt;br&gt;    aprt &amp;quot;The 1st parameter should change&amp;quot;, req_change[0]; &lt;br&gt;&lt;br&gt;    dg_dist(intersec, point_aim, &amp;amp;dist_temp);&lt;br&gt;    dist[1]=dist_temp;&lt;br&gt;    dg_dist(point_2, point_1, &amp;amp;dist_temp);&lt;br&gt;    req_change[1]=dist[1]/dist_temp*dist_1;&lt;br&gt;&lt;br&gt;    aprt &amp;quot;The 2nd parameter should change&amp;quot;, req_change[1]; &lt;br&gt;&lt;br&gt;    float max_dim, factor;&lt;br&gt;    max_dim=fabs(point_aim[0]);&lt;br&gt;    if(max_dim&amp;lt;fabs(point_aim[1])) max_dim=fabs(point_aim[1]);&lt;br&gt;    if(max_dim&amp;lt;fabs(point_0[0])) max_dim=fabs(point_0[0]);&lt;br&gt;    if(max_dim&amp;lt;fabs(point_0[1])) max_dim=fabs(point_0[1]);&lt;br&gt;    if(max_dim&amp;lt;fabs(point_1[0])) max_dim=fabs(point_1[0]);&lt;br&gt;    if(max_dim&amp;lt;fabs(point_1[1])) max_dim=fabs(point_1[1]);&lt;br&gt;    if(max_dim&amp;lt;fabs(point_2[0])) max_dim=fabs(point_2[0]);&lt;br&gt;    if(max_dim&amp;lt;fabs(point_2[1])) max_dim=fabs(point_2[1]);&lt;br&gt;&lt;br&gt;    factor=100/max_dim*0.75;&lt;br&gt;    point_aim[0]*=factor;&lt;br&gt;    point_aim[1]*=factor;&lt;br&gt;    point_0[0]*=factor;&lt;br&gt;    point_0[1]*=factor;&lt;br&gt;    point_1[0]*=factor;&lt;br&gt;    point_1[1]*=factor;&lt;br&gt;    point_2[0]*=factor;&lt;br&gt;    point_2[1]*=factor;&lt;br&gt;    intersec[0]*=factor;&lt;br&gt;    intersec[1]*=factor;&lt;br&gt;&lt;br&gt;    float iplt;&lt;br&gt;    graphwin_reset;&lt;br&gt;    moveto(0.5, 0.92);&lt;br&gt;    lorigin(4);&lt;br&gt;    label(&amp;quot;Double graph for %s&amp;quot;,Lid);&lt;br&gt;&lt;br&gt;    window(-120, 120, -110, 130);&lt;br&gt;    moveto(-100, 0);&lt;br&gt;    lineto(100, 0);&lt;br&gt;    for (iplt = -10; iplt &amp;lt;11; iplt++)&lt;br&gt;    {&lt;br&gt;        moveto(iplt*10, 0);&lt;br&gt;        linerel(0, -3);&lt;br&gt;        lsize 0.3;&lt;br&gt;        lorigin 56;&lt;br&gt;        label(&amp;quot;%-4.3f&amp;quot;,iplt*2*max_dim/10);&lt;/font&gt;
&lt;p style="line-height:150%"&gt;&lt;font face="Monospac821 BT" size=1&gt;    }&lt;br&gt;    moverel(-20,-10);&lt;br&gt;    label(&amp;quot;x-axis&amp;quot;);&lt;br&gt;&lt;/font&gt;   &lt;font face="Monospac821 BT" size=1&gt;moveto(0, -100); &lt;br&gt;    lineto(0, 100);&lt;br&gt;    for (iplt = -10; iplt &amp;lt;11; iplt++)&lt;br&gt;    {&lt;br&gt;        moveto(0, iplt*10);&lt;br&gt;        linerel(2, 0);&lt;br&gt;        lsize 0.3;&lt;br&gt;        label(&amp;quot;%-4.2f&amp;quot;,iplt*2*max_dim/10);&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    moverel(5,-10);&lt;br&gt;    label(&amp;quot;y-axis&amp;quot;);&lt;br&gt;&lt;br&gt;    moveto(point_aim[0], point_aim[1]);&lt;br&gt;    symbol 7;&lt;br&gt;    lsize 0.3;&lt;br&gt;    label(&amp;quot;Aim&amp;quot;);&lt;br&gt;&lt;br&gt;    moveto(point_0[0], point_0[1]);&lt;br&gt;    symbol 3;&lt;br&gt;    lsize 0.3;&lt;br&gt;    label(&amp;quot;Start&amp;quot;);&lt;br&gt;&lt;br&gt;    moveto(point_0[0], point_0[1]);&lt;br&gt;    lineto(point_1[0], point_1[1]);&lt;br&gt;&lt;br&gt;    symbol 5;&lt;br&gt;    lineto(point_2[0], point_2[1]);&lt;br&gt;    symbol 6;&lt;/font&gt;
&lt;p style="line-height:150%"&gt;   &lt;font face="Monospac821 BT" size=1&gt;pen(2);&lt;/font&gt;
&lt;p style="line-height:150%"&gt;&lt;font face="Monospac821 BT" size=1&gt;    moveto(intersec[0],intersec[1]);&lt;br&gt;    symbol 8;&lt;br&gt;    lineto(point_aim[0], point_aim[1]);&lt;br&gt;    moveto(intersec[0],intersec[1]);&lt;br&gt;    lineto(point_0[0], point_0[1]);&lt;br&gt;    return;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e7%94%a8%e4%ba%8e%e6%89%8b%e5%b7%a5%e4%bf%ae%e6%94%b9%e7%bb%93%e6%9e%84%e7%9a%84%e5%8f%8c%e5%8f%82%e6%95%b0%e5%9b%be%e5%87%bd%e6%95%b0&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!196.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!196.entry</guid><pubDate>Thu, 13 Apr 2006 02:04:54 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!196/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!196.entry#comment</wfw:comment><dcterms:modified>2006-04-13T02:09:12Z</dcterms:modified></item><item><title>按焦距比例缩放曲率</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!188.entry</link><description>&lt;div&gt;
&lt;p style="word-spacing:10px"&gt;　　OSLO内置的scale功能会将曲率和厚度一同缩放，而我常常只需要将曲率微调而保持厚度不变，所以写了这个函数自己用。
&lt;p style="word-spacing:10px"&gt;cmd scalecv(float efl)&lt;br&gt;{    //仅对曲率作缩放，达到合适的EFL&lt;br&gt;    float tol=0.00000001&lt;br&gt;    float feedback=1.0;&lt;br&gt;    stp outp off;&lt;br&gt;    int counter;&lt;br&gt;    do{&lt;br&gt;        for(counter=1;counter&amp;lt;ims;counter++)&lt;br&gt;            cv(counter,cv[counter]*feedback);&lt;br&gt;        feedback=pe_efl(1,ims_1)/efl; &lt;br&gt;        }&lt;br&gt;    while(fabs(feedback-1)&amp;gt;tol);&lt;br&gt;    stp outp on;&lt;br&gt;}&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e6%8c%89%e7%84%a6%e8%b7%9d%e6%af%94%e4%be%8b%e7%bc%a9%e6%94%be%e6%9b%b2%e7%8e%87&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!188.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!188.entry</guid><pubDate>Mon, 10 Apr 2006 01:24:26 GMT</pubDate><slash:comments>4</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!188/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!188.entry#comment</wfw:comment><dcterms:modified>2006-04-10T01:24:26Z</dcterms:modified></item><item><title>对称式镜头后部初始结构计算函数</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!186.entry</link><description>&lt;div&gt;
&lt;p style="line-height:200%" align=center&gt;&lt;font face="隶书" size=4&gt;对称式镜头后部初始结构计算函数&lt;/font&gt;
&lt;p style="line-height:150%" align=left&gt;&lt;font face="华文宋体" size=2&gt;　　在传统的镜头设计手法中，对于对称式的镜头，常由后半部开始设计。典型的例子有Celor和Double Gauss，如下图。&lt;/font&gt;
&lt;p align=center&gt;&lt;img height=218 alt=Celor src="http://static.flickr.com/55/119581681_39beca9409.jpg" width=500&gt;
&lt;p align=center&gt;&lt;img height=257 alt="Double Gauss" src="http://static.flickr.com/47/119581683_79c31cc34b.jpg" width=500 border=0&gt;
&lt;p style="line-height:150%" align=left&gt;&lt;font face="华文宋体" size=2&gt;　　以下函数根据预先选定的玻璃，光焦度，Petzval sum和纵向色差计算出镜片的曲率和间距。其中，双高斯镜头的&lt;/font&gt;&lt;font face="华文宋体" size=2&gt;Petzval sum可以选的略小一些。在&amp;quot;Introduction to lens design&amp;quot;的318页也提到了这个计算公式，我粗略的看了一下，应该是一致的，但没有做详细的对照检查。&lt;/font&gt;
&lt;p style="line-height:150%"&gt;&lt;font face=Arial size=1&gt;cmd rear(float n_a, float v_a, float n_b, float v_b, float phi, float ptz, float lch)&lt;br&gt;{&lt;br&gt;    float a, b, c;&lt;br&gt;    float delta;&lt;br&gt;    float phi_a_1, phi_b_1;&lt;br&gt;    float phi_a_2, phi_b_2;&lt;br&gt;    float d1, d2;&lt;br&gt;    float c_a, c_b;&lt;br&gt;&lt;br&gt;    a = v_a - n_b * v_b / n_a ;&lt;br&gt;    b = ptz * n_b * v_b - 2 * phi * v_a - ( lch * phi * phi * n_b * v_b ) / n_a ;&lt;br&gt;    c = phi * phi * v_a * ( 1 + lch * ptz * n_b * v_b );&lt;br&gt;&lt;br&gt;    delta = b * b - 4 * a *c;&lt;br&gt;&lt;br&gt;    if(delta&amp;lt;0)&lt;br&gt;    {&lt;br&gt;        prt &amp;quot;Your requirement can not be satisfied by these glasses!&amp;quot;;&lt;br&gt;        return;&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    phi_a_1=(-1*b+sqrt(delta))/(2*a);&lt;br&gt;    phi_a_2=(-1*b-sqrt(delta))/(2*a);&lt;br&gt;    prt phi_a_1, phi_a_2;&lt;br&gt;&lt;br&gt;    phi_b_1=n_b*(ptz-phi_a_1/n_a);&lt;br&gt;    phi_b_2=n_b*(ptz-phi_a_2/n_a);&lt;br&gt;    prt phi_b_1, phi_b_2;&lt;br&gt;&lt;br&gt;    d1=(phi_a_1+phi_b_1-phi)/(phi_a_1*phi_b_1); &lt;br&gt;    d2=(phi_a_2+phi_b_2-phi)/(phi_a_2*phi_b_2); &lt;br&gt;    prt d1, d2;&lt;br&gt;&lt;br&gt;    c_a=phi_a_1/(n_a-1);&lt;br&gt;    c_b=phi_b_1/(n_b-1);&lt;br&gt;&lt;br&gt;    aprt &amp;quot;c_a= &amp;quot;,c_a,&amp;quot; &amp;quot;, &amp;quot;c_b= &amp;quot;,c_b;&lt;br&gt;    return;&lt;br&gt;}&lt;/font&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e5%af%b9%e7%a7%b0%e5%bc%8f%e9%95%9c%e5%a4%b4%e5%90%8e%e9%83%a8%e5%88%9d%e5%a7%8b%e7%bb%93%e6%9e%84%e8%ae%a1%e7%ae%97%e5%87%bd%e6%95%b0&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!186.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!186.entry</guid><pubDate>Wed, 29 Mar 2006 02:07:55 GMT</pubDate><slash:comments>5</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!186/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!186.entry#comment</wfw:comment><dcterms:modified>2006-03-29T02:07:55Z</dcterms:modified></item><item><title>对0.7带消色差的SCP程序</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!145.entry</link><description>&lt;div&gt;以下是对0.7带消色差的SCP程序，提供两个选择：修改末面半径或者替换玻璃。&lt;/div&gt;
&lt;div&gt;如果需要对其它带消色差，可以反馈你的具体需求。&lt;/div&gt;
&lt;div&gt;ps. 我一直很想改写成结构更合理的CCL版本，只是这个SCP版的用了相当一段时间，还比较好用，所以没有太多的动力改写了。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;*achromatize  &lt;br&gt;stp outp off;&lt;br&gt;input(&amp;amp;ii,&amp;quot;1,Change last radius; 2,check available abbe nbr&amp;quot;);&lt;br&gt;trr &amp;quot;f&amp;quot; 1 1;&lt;br&gt;switch(ii)&lt;br&gt;{&lt;br&gt; case 1:&lt;br&gt;  for(i=ims_1;i&amp;gt;0;i--)&lt;br&gt;   {&lt;br&gt;    get_glass_name(i);&lt;br&gt;    if(strcmp(glass_name, &amp;quot;AIR       &amp;quot;)!=0)&lt;br&gt;     {&lt;br&gt;       tra std loc Srf usr 1 0 0 i+1 y 1;&lt;br&gt;       for(j=0;j&amp;lt;i+2;j++) &lt;br&gt;        {&lt;br&gt;         Ua[j]=ssb(sbrow-i+j-3,6);&lt;br&gt;        }&lt;br&gt;       for(j=0,d=0;j&amp;lt;i;j++)&lt;br&gt;        {&lt;br&gt;         get_glass_name(j);&lt;br&gt;         if(strcmp(glass_name, &amp;quot;AIR       &amp;quot;)!=0)&lt;br&gt;          {&lt;br&gt;           Va[j]=(Ua[j+1]-th[j])*(rn[j][2]-rn[j][3]);&lt;br&gt;          }&lt;br&gt;         else Va[j]=0;&lt;br&gt;         d+=Va[j]; &lt;br&gt;        }&lt;br&gt;       printf(&amp;quot;DMD before the last glass is %f\n&amp;quot;,d);&lt;br&gt;       e=-1*d/(rn[i][2]-rn[i][3])+th[i];&lt;br&gt;       print &amp;quot;wanted D=&amp;quot; e;&lt;br&gt;       tra std loc Srf usr 1 0 0 i y 1;&lt;br&gt;       f=ssb(sbrow-2,1);  &lt;br&gt;       g=ssb(sbrow-2,3);  &lt;br&gt;       h=-1*ssb(sbrow-2,4)*dr;  &lt;br&gt;       o=e*cos(h)+g-th[i];  &lt;br&gt;       p=f-e*sin(h);   &lt;br&gt;       q=(o*o+p*p)/(2*o);   &lt;br&gt;       i=0;&lt;br&gt;     }&lt;br&gt;   }&lt;br&gt;  stp outp on;&lt;br&gt;  aprint &amp;quot;last Radius should be&amp;quot; q;&lt;br&gt;  break;&lt;br&gt; case 2:&lt;br&gt;  tra std loc Srf usr 1 0 0 ims_1 y 1;&lt;br&gt;  for(i=0;i&amp;lt;ims;i++)&lt;br&gt;   {&lt;br&gt;    Ua[i]=ssb(sbrow-ims-1+i,6);  &lt;br&gt;    m=i;             &lt;br&gt;   }&lt;br&gt;  for(i=0;i&amp;lt;m+1;i++)&lt;br&gt;   {&lt;br&gt;    get_glass_name(i);&lt;br&gt;    if(strcmp(glass_name, &amp;quot;AIR       &amp;quot;)!=0)&lt;br&gt;     {&lt;br&gt;      Xa[i]=Ua[i+1]-th[i];    &lt;br&gt;      Ya[i]=rn[i][2]-rn[i][3];  &lt;br&gt;      Va[i]=Xa[i]*Ya[i];&lt;br&gt;     }&lt;br&gt;    else Va[i]=0;&lt;br&gt;   }&lt;br&gt;  stp outp on;&lt;br&gt;  for(i=0;i&amp;lt;m+1;i++)&lt;br&gt;   {&lt;br&gt;    if(fabs(Va[i])&amp;gt;0.00001)&lt;br&gt;     {&lt;br&gt;      for(j=0,s=0;j&amp;lt;m+1;j++)&lt;br&gt;       {&lt;br&gt;        if(j!=i) &lt;br&gt;         {&lt;br&gt;          s+=Va[j]; &lt;br&gt;         }&lt;br&gt;       }&lt;br&gt;      Wa[i]=-1*s/Xa[i]; &lt;br&gt;      Za[i]=(rn[i][1]-1)/Wa[i];&lt;br&gt;      aprintf(&amp;quot;Suggested Abbe nbr of srf %d is %f\n&amp;quot;,i,Za[i]);&lt;br&gt;     }&lt;br&gt;    else Wa[i]=0,Za[i]=0;&lt;br&gt;   }&lt;br&gt;  break;&lt;br&gt; default:&lt;br&gt;  stp outp on;&lt;br&gt;  print &amp;quot;Please choose 1 or 2!&amp;quot;;&lt;br&gt;  break; &lt;br&gt;}&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e5%af%b90.7%e5%b8%a6%e6%b6%88%e8%89%b2%e5%b7%ae%e7%9a%84SCP%e7%a8%8b%e5%ba%8f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!145.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!145.entry</guid><pubDate>Wed, 30 Nov 2005 07:18:44 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!145/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!145.entry#comment</wfw:comment><dcterms:modified>2005-11-30T07:18:44Z</dcterms:modified></item><item><title>球差贡献计算程序</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!143.entry</link><description>&lt;p&gt;这个球差贡献计算程序两个月前就写了，但是spreadsheet buffer的操作上有点小bug，现在修改好了。
&lt;p&gt;请注意，这&lt;font color="#ff00ff"&gt;不是球差贡献的三阶、五阶或者七阶系数&lt;/font&gt;计算公式，而是&lt;font color="#008000"&gt;实际球差贡献&lt;/font&gt;的计算公式。也可以用sac()来计算OCM算子，对实际球差贡献进行优化。
&lt;p&gt; 
&lt;p&gt;#include &amp;quot;../../public/ccl/inc/gendefs.h&amp;quot;
&lt;p&gt;float sac(int srfnum, float zone, int sac_type)&lt;br&gt;// hlp:  &amp;lt;P&amp;gt;srfnum is the number of the surface, 0 stands for the sum of all the surfaces&lt;br&gt;// hlp:   zone is the pupuil zone, 1 stands for margin, 0 stands for the axial&lt;br&gt;// hlp:  sac_type==0 means longitudinal spherical aberration; &lt;br&gt;// hlp:  sac_type==1 means transverse spherical aberration&lt;br&gt;// hlp:   Please use &amp;quot; prt sac(2, 0.7, 0) &amp;quot; to show the 2nd surface's SA contribution @ 0.7 zone&lt;br&gt;// hlp:  Please use &amp;quot; prt sac(0, 1, 1) &amp;quot; to show the SA  contribution summation @ marginal zone.&amp;lt;/P&amp;gt;&lt;br&gt;// kwd:  spherical aberration, evaluation &lt;br&gt;// cat:  evaluation tools &lt;br&gt;{&lt;br&gt; int counter, anchor, lines, sbfrow;&lt;br&gt; float ytemp, ztemp;&lt;br&gt; float PA[ims];&lt;br&gt; float Iang[ims],Rang[ims],Uang[ims],index[ims];&lt;br&gt; float i_para[ims],ulast;&lt;br&gt; float sa_total[ims];&lt;br&gt; float sum=0;&lt;br&gt; &lt;br&gt; SAVE_DISPLAY_PREFS;&lt;br&gt; sbfrow = sbrow(); &lt;br&gt; sbr(sbfrow, 1);&lt;br&gt; stp outp off;&lt;br&gt; &lt;br&gt; trr f 1 1;&lt;br&gt; tra ful loc srf usr zone 0 0 ims_1 y 1;&lt;br&gt; anchor=sbrow-2*ims-1;&lt;br&gt; for(counter=0;counter&amp;lt;ims;counter++)&lt;br&gt; {&lt;br&gt;  ytemp=ssb(anchor+2+counter*2,1);&lt;br&gt;  ztemp=ssb(anchor+2+counter*2,3);&lt;br&gt;  PA[counter]=sqrt(ytemp*ytemp+ztemp*ztemp);&lt;br&gt;  Iang[counter]=ssb(anchor+3+counter*2,4);&lt;br&gt;  Rang[counter]=ssb(anchor+3+counter*2,5);&lt;br&gt;  Uang[counter]=ssb(anchor+counter*2,4);&lt;br&gt;  }&lt;br&gt; &lt;br&gt; rin srf 0 ims_1;&lt;br&gt; lines=0.9+numw/3;&lt;br&gt; anchor=sbrow-ims*lines;&lt;br&gt; for(counter=0;counter&amp;lt;ims;counter++)&lt;br&gt; {&lt;br&gt;  index[counter]=ssb(anchor+counter*lines,1);&lt;br&gt;  }&lt;br&gt; &lt;br&gt; pxt srf 0 ims_1 y 1;&lt;br&gt; anchor=sbrow-ims_1;&lt;br&gt; for(counter=0;counter&amp;lt;ims;counter++)&lt;br&gt; {&lt;br&gt;  i_para[counter]=ssb(anchor+counter,3);&lt;br&gt;  if(i_para[counter]&amp;lt;0)&lt;br&gt;   {&lt;br&gt;    Iang[counter]=-1*fabs(Iang[counter]);&lt;br&gt;    Rang[counter]=-1*fabs(Rang[counter]);&lt;br&gt;    }&lt;br&gt;  else&lt;br&gt;   {&lt;br&gt;    Iang[counter]=fabs(Iang[counter]);&lt;br&gt;    Rang[counter]=fabs(Rang[counter]);&lt;br&gt;    }&lt;br&gt;  } &lt;br&gt; pxt; ulast=ssb(sbrow-1,2);&lt;br&gt; &lt;br&gt; for(counter=0;counter&amp;lt;ims;counter++)&lt;br&gt; {&lt;br&gt;  sa_total[counter]=2*index[counter]*i_para[counter]*PA[counter]*sin(0.5*(Rang[counter]-Iang[counter])*dr)*sin(0.5*(Rang[counter]+Uang[counter])*dr)/(index[ims_1]*ulast*sin(Uang[ims_1]*dr));&lt;br&gt;  sum+=sa_total[counter];&lt;br&gt;  }
&lt;p&gt; ssbuf_reset(-sbfrow, 0);&lt;br&gt; RESTORE_DISPLAY_PREFS;&lt;br&gt; stp outp on; &lt;br&gt; switch(sac_type)&lt;br&gt; {&lt;br&gt;  case 0:&lt;br&gt;   if(srfnum==0)&lt;br&gt;   return sum;&lt;br&gt;   else return sa_total[srfnum-1];&lt;br&gt;  case 1:&lt;br&gt;   if(srfnum==0)&lt;br&gt;   return sum*tan((-1)*Uang[ims_1]*dr);&lt;br&gt;   else return sa_total[srfnum-1]*tan((-1)*Uang[ims_1]*dr);&lt;br&gt;  }&lt;br&gt; }&lt;br&gt; &lt;br&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e7%90%83%e5%b7%ae%e8%b4%a1%e7%8c%ae%e8%ae%a1%e7%ae%97%e7%a8%8b%e5%ba%8f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!143.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!143.entry</guid><pubDate>Thu, 17 Nov 2005 06:26:55 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!143/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!143.entry#comment</wfw:comment><dcterms:modified>2005-11-17T06:36:41Z</dcterms:modified></item><item><title>Least square optimization without damping</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!142.entry</link><description>&lt;div&gt;&lt;img height=500 src="http://static.flickr.com/25/58911640_36c4f3dcff.jpg" width=482&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+Least+square+optimization+without+damping&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!142.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!142.entry</guid><pubDate>Wed, 02 Nov 2005 09:34:08 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!142/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!142.entry#comment</wfw:comment><dcterms:modified>2005-11-02T09:34:08Z</dcterms:modified></item><item><title>Flow chart revised 2</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!139.entry</link><description>&lt;div&gt;&lt;img height=1024 alt="GE r02" src="http://static.flickr.com/27/55828533_f9f026cf88_b.jpg" width=615&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+Flow+chart+revised+2&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!139.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!139.entry</guid><pubDate>Tue, 25 Oct 2005 03:23:43 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!139/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!139.entry#comment</wfw:comment><dcterms:modified>2005-10-25T03:23:43Z</dcterms:modified></item><item><title>Flow chart revised</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!138.entry</link><description>&lt;div&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/58618180@N00/55536813/"&gt;&lt;img height=1024 alt="GE r01" src="http://static.flickr.com/33/55536813_08807bd619_b.jpg" width=545&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+Flow+chart+revised&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!138.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!138.entry</guid><pubDate>Mon, 24 Oct 2005 09:53:50 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!138/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!138.entry#comment</wfw:comment><dcterms:modified>2005-10-24T09:53:50Z</dcterms:modified></item><item><title>天外飞仙</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!137.entry</link><description>&lt;div&gt;optim_ge.ccl 文件的第219行，平白无故的多出一句：&lt;/div&gt;
&lt;div&gt;m = 0;&lt;/div&gt;
&lt;div&gt;真是来无影，去无踪。&lt;/div&gt;
&lt;div&gt;gexplore()中并没有声明m这样一个局部变量，而且m在程序中也没有起到什么作用。&lt;/div&gt;
&lt;div&gt;好在m是OSLO的Predefined General Variables，编译时才没有什么问题/或者说漏出了这个小的defect。&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e5%a4%a9%e5%a4%96%e9%a3%9e%e4%bb%99&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!137.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!137.entry</guid><pubDate>Mon, 24 Oct 2005 02:49:55 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!137/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!137.entry#comment</wfw:comment><dcterms:modified>2005-10-24T02:59:13Z</dcterms:modified></item><item><title>Flow chart of Global explorer</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!136.entry</link><description>&lt;div&gt;分享我绘制的Global explorer的流程图。我的原图是4033×2849分辨率的，可是&lt;a href="http://www.flickr.com/"&gt;http://www.flickr.com/&lt;/a&gt;最大只支持到1024×768。有没有更好的办法？&lt;/div&gt;
&lt;div&gt;流程图用Powerpoint绘制的，没有Visio，画得拥挤。不知道有没有什么小的工具软件，用来画流程图很好的？&lt;/div&gt;
&lt;div&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/58618180@N00/55396258/"&gt;&lt;img height=353 alt=GE src="http://static.flickr.com/31/55396258_f1f2024970.jpg" width=500&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/58618180@N00/55396258/"&gt;&lt;img height=723 alt=GE src="http://static.flickr.com/31/55396258_f1f2024970_b.jpg" width=1024&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+Flow+chart+of+Global+explorer&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!136.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!136.entry</guid><pubDate>Mon, 24 Oct 2005 01:18:52 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!136/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!136.entry#comment</wfw:comment><dcterms:modified>2005-10-24T02:14:37Z</dcterms:modified></item><item><title>Global Explorer for OSLO</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!135.entry</link><description>&lt;div&gt;读完的595行的源程序，了解了一些实作的细节。&lt;/div&gt;
&lt;div&gt;程序风格不是很好，gexplore()和find_duplicates()中就有相当的重复代码。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Global explorer中的代码有相当分量是用来处理lensol[][]这个队列的（这一部分的代码风格很不好），另外用来绘制适合用户理解的图形也花费了大量的代码。其中，真正用来完成逃逸优化的代码行数相当少。另外强行设定了可处理的最大优化变量数为100，这个也不是很合理。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;有没有改写一下的可能呢&lt;img src="http://spaces.msn.com/rte/emoticons/smile_regular.gif"&gt;?&lt;/div&gt;
&lt;div&gt;或者用STL来完成对lensol[][]队列的操作？&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+Global+Explorer+for+OSLO&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!135.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!135.entry</guid><pubDate>Wed, 19 Oct 2005 09:49:01 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!135/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!135.entry#comment</wfw:comment><dcterms:modified>2005-10-21T07:01:08Z</dcterms:modified></item><item><title>增强的Glassmap功能</title><link>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!123.entry</link><description>&lt;p&gt;我对OSLO内置的Glassmap功能做了一个增强：点击左边玻璃名，除了原有的highlight在nd-vd图（右上）中，也会同时highlight在pv-nd图（右下）中。&lt;br&gt;目前仍有两个问题：&lt;br&gt;1. 如何快速方便的选择目标波长，用来验算部分色散？使用wse中的现有波长（第四或者更后的）？应该尽量避免修改CCL程序，重新编译这一过程。 &lt;br&gt;2. Misc目录中无法用通常方法计算色散的材料如何处理？应充分提醒用户注意材料色散的实际物理意义。
&lt;p&gt;&lt;img src="http://storage.msn.com/x1pbglk-vqL4BtlVgExmyo4WTZNS8c4ujlU0nghH2B2bWKZwfOtFn4jhf8xonzZN6sWxXAZhVbpMmMrPSlKqBZbQuOqs9Is7QvVUyEFIPMKHuXHlHh8e1NQKcGIIf-4pRTuuk0h8xsoGuzBXP8E0ECzRg"&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=1347004474636356797&amp;page=RSS%3a+%e5%a2%9e%e5%bc%ba%e7%9a%84Glassmap%e5%8a%9f%e8%83%bd&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=6328.spaces.live.com&amp;amp;GT1=6328"&gt;</description><comments>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!123.entry#comment</comments><guid isPermaLink="true">http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!123.entry</guid><pubDate>Mon, 05 Sep 2005 03:30:34 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://6328.spaces.live.com/blog/cns!12B1856ED58FCCBD!123/comments/feed.rss</wfw:commentRss><wfw:comment>http://6328.spaces.live.com/Blog/cns!12B1856ED58FCCBD!123.entry#comment</wfw:comment><dcterms:modified>2005-09-06T08:15:43Z</dcterms:modified></item></channel></rss>