Физико-технические основы систем переноса изображения на эффекте обращения волнового фронта для микроэлектронной техн (1024968), страница 12
Текст из файла (страница 12)
Prog1.cpp
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <dos.h>
const double c1=200.0;
const double c3=100.0;
const double c4=30.0; //size of the image
const double ca1=15.0;
int ymax;//Maximum x-coordinate of a screen point
double ar=8.6*3.14/180;//Alpha in radians
double xg, yg;
/*
Drawing of an appropriate line on the screen between
points (xn,yn), (xk,yk) with the values of xn...yk being
from my coordinate system.
*/
void line_my(double xn, double yn, double xk, double yk)
{
double a,b,m;
a=0.25*ymax;
b=0.8*ymax;
m=-0.8*ymax/(3*c3);
line(a-m*xn,b+m*yn,a-m*xk,b+m*yk);
}
//Drawing of the scheme for a current beta
void scheme_plot(double b)
{
double cosa,sina,cos2a,sin2a,sinb,cosb,sin2b,cos2b;
double xa,ya,xb,yb,xc,yc,xd,yd,xe,ye,xf,yf;
double t1t2;
cosa=cos(ar);
sina=sin(ar);
cos2a=cos(2*ar);
sin2a=sin(2*ar);
sinb=sin(b*3.14/180);
cosb=cos(b*3.14/180);
sin2b=sin(2*b*3.14/180);
cos2b=cos(2*b*3.14/180);
xa=0;
ya=c4/2;
xb=0.5*(c3+c4)*sin2a;
yb=0.5*c4+0.5*(c3+c4)*cos2a;
xc=xb-ca1*cos2a;
yc=yb+ca1*sin2a;
//xg,yg
t1t2=((c1*sina-c4)*(sinb/cosb)+c1*cosa)*sinb-(c1*sina-c4)/cosb;
xg=2*t1t2*sinb;
yg=2*t1t2*cosb-c4/2;
// wafer stage moves; wafer size is 300 mm, 50 mm is technological reserve
xe=xg-350.0*sin2b;
ye=yg-350.0*cos2b;
//xe=xg-(0.5*c4+150.0)*sin2b;
//ye=yg-(0.5*c4+150.0)*cos2b;
//xe=xg-0.5*(c3+c4)*sin2b;
//ye=yg-0.5*(c3+c4)*cos2b;
xf=xg+350*sin2b;
yf=yg+350*cos2b;
xd=xe-ca1*cos2b;
yd=ye+ca1*sin2b;
line_my(xa,ya,xb,yb);
line_my(xb,yb,xc,yc);
line_my(xd,yd,xe,ye);
line_my(xe,ye,xf,yf);
}
int main(void)
{
int gdriver = DETECT, gmode, errorcode;
double b,br,nab; //Beta in degrees, in radians, NA(beta)
double fi1, fi2, fi1r, fi2r;
double xk, yk;
double xl, yl;
double ab; //AB
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n",
grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
ymax = getmaxy();
b=30.0;// Beta decreases in every loop of the cycle below
while(!kbhit())
{
scheme_plot(b);
delay(1300);//Half-second delay
b=b-1.0;
}
closegraph();
b=b+1;
br=b*3.14/180;
xl=c1*cos(ar);
yl=0.5*c4-c1*sin(ar);
xk=0;
yk=(yg+yl)/2;
fi1r=atan((yg-yk)/xg);
fi2r=atan((yk-yl)/xl);
fi1=fi1r*180/3.14;
fi2=fi2r*180/3.14;
ab=sin(br)*(c1*cos(ar)-c4/tan(br))/cos(2*ar-br);
printf("b=%.0f; ab=%.0f; fi1=%.0f; fi2=%.0f\n",br*180/3.14,ab,fi1,fi2);
return 0;
}
Prog2.cpp
//PP polarizations
#include <stdio.h>
#include <math.h>
#include <complex.h>
//Input
double tet0deg=64.0;
double pi=3.1415;
main()
{
double l=193.0;
double N[4]; // n of "plenok"
N[1]=1.44; //LiF, can not be outer material
N[2]=1.50; //CaF
N[3]=1.55; //SiO2
int n1,n2,n3,n4,n5; // index for n[ ]
double d1,d2,d3,d4,d5,d1max,d2max,d3max,d4max,d5max;
double tet0,tet1,tet2,tet3,tet4,tet5;
complex m[3][3],m_aux[3][3];
complex t,r;
double TR,TRbest,Tbest,Rbest,d1best,d2best,d3best,d4best,d5best,n1best,n2best,n3best,n4best,n5best;
complex t_back,r_back; //Backward light propagation
double T_backbest,R_backbest;
double arg,p;
double d[6],tet[6],n[6]; //Auxiliary parameters
int i,j,k;
tet0=tet0deg*pi/180;
//p-polarization
TRbest=0.0;
for(n1=2;n1<=3;n1++)
for(n2=1;n2<=3;n2++)
for(n3=1;n3<=3;n3++)
for(n4=1;n4<=3;n4++)
for(n5=1;n5<=3;n5++)
{
tet1=asin(sin(tet0)/N[n1]);
tet2=asin(sin(tet0)/N[n2]);
tet3=asin(sin(tet0)/N[n3]);
tet4=asin(sin(tet0)/N[n4]);
tet5=asin(sin(tet0)/N[n5]);
d1max=l/(N[n1]*cos(tet1));
d2max=l/(N[n2]*cos(tet2));
d3max=l/(N[n3]*cos(tet3));
d4max=l/(N[n4]*cos(tet4));
d5max=l/(N[n5]*cos(tet5));
for(d1=d1max/8;d1<=d1max;d1=d1+d1max/8)
for(d2=0.0;d2<=d2max;d2=d2+d2max/8)
for(d3=0.0;d3<=d3max;d3=d3+d3max/8)
for(d4=0.0;d4<=d4max;d4=d4+d4max/8)
for(d5=0.0;d5<=d5max;d5=d5+d5max/8)
if(d1+d2+d3+d4+d5<l/2)
{
//for t calculation
m[1][1]=complex(1.0,0.0);
m[1][2]=complex(0.0,0.0);
m[2][1]=complex(0.0,0.0);
m[2][2]=complex(1.0,0.0);
d[1]=d1;d[2]=d2;d[3]=d3;d[4]=d4;d[5]=d5;
tet[1]=tet1;tet[2]=tet2;tet[3]=tet3;tet[4]=tet4;tet[5]=tet5;
n[1]=N[n1];n[2]=N[n2];n[3]=N[n3];n[4]=N[n4];n[5]=N[n5];
for(k=1;k<=5;k++)
{
for(i=1;i<=2;i++)
for(j=1;j<=2;j++) m_aux[i][j]=m[i][j];
arg=2*pi*n[k]*d[k]*cos(tet[k])/l;
p=cos(tet[k])/n[k];
m[1][1]=m_aux[1][1]*cos(arg)+m_aux[1][2]*complex(0.0,-p*sin(arg));
m[1][2]=m_aux[1][1]*complex(0.0,-sin(arg)/p)+m_aux[1][2]*cos(arg);
m[2][1]=m_aux[2][1]*cos(arg)+m_aux[2][2]*complex(0.0,-p*sin(arg));
m[2][2]=m_aux[2][1]*complex(0.0,-sin(arg)/p)+m_aux[2][2]*cos(arg);
}
t=2*cos(tet0)/((m[1][1]+m[1][2]*cos(tet0))*cos(tet0)+m[2][1]+m[2][2]*cos(tet0));
r_back=((m[1][1]+m[1][2]*cos(tet0))*cos(tet0)-(m[2][1]+m[2][2]*cos(tet0)))/((m[1][1]+m[1][2]*cos(tet0))*cos(tet0)+m[2][1]+m[2][2]*cos(tet0));
//for r calculation
m[1][1]=complex(1.0,0.0);
m[1][2]=complex(0.0,0.0);
m[2][1]=complex(0.0,0.0);
m[2][2]=complex(1.0,0.0);
d[1]=d5;d[2]=d4;d[3]=d3;d[4]=d2;d[5]=d1;
tet[1]=tet5;tet[2]=tet4;tet[3]=tet3;tet[4]=tet2;tet[5]=tet1;
n[1]=N[n5];n[2]=N[n4];n[3]=N[n3];n[4]=N[n2];n[5]=N[n1];
for(k=1;k<=5;k++)
{
for(i=1;i<=2;i++)
for(j=1;j<=2;j++) m_aux[i][j]=m[i][j];
arg=2*pi*n[k]*d[k]*cos(tet[k])/l;
p=cos(tet[k])/n[k];
m[1][1]=m_aux[1][1]*cos(arg)+m_aux[1][2]*complex(0.0,-p*sin(arg));
m[1][2]=m_aux[1][1]*complex(0.0,-sin(arg)/p)+m_aux[1][2]*cos(arg);
m[2][1]=m_aux[2][1]*cos(arg)+m_aux[2][2]*complex(0.0,-p*sin(arg));
m[2][2]=m_aux[2][1]*complex(0.0,-sin(arg)/p)+m_aux[2][2]*cos(arg);
}
r=((m[1][1]+m[1][2]*cos(tet0))*cos(tet0)-(m[2][1]+m[2][2]*cos(tet0)))/((m[1][1]+m[1][2]*cos(tet0))*cos(tet0)+m[2][1]+m[2][2]*cos(tet0));
t_back=2*cos(tet0)/((m[1][1]+m[1][2]*cos(tet0))*cos(tet0)+m[2][1]+m[2][2]*cos(tet0));
TR=abs(t*r)*abs(t*r);
if(TR>TRbest)
{
TRbest=TR;
Tbest=abs(t*t);
Rbest=abs(r*r);
d1best=d1;
d2best=d2;
d3best=d3;
d4best=d4;
d5best=d5;
n1best=N[n1];
n2best=N[n2];
n3best=N[n3];
n4best=N[n4];
n5best=N[n5];
T_backbest=abs(t_back*t_back);
R_backbest=abs(r_back*r_back);
}
}
}
printf("\n\np-polarization");
printf("\nTR=%.3f T=%.2f R=%.2f d1=%.0f d2=%.0f d3=%.0f d4=%.0f d5=%.0f n1=%.2f n2=%.2f n3=%.2f n4=%.2f n5=%.2f",TRbest,Tbest,Rbest,d1best,d2best,d3best,d4best,d5best,n1best,n2best,n3best,n4best,n5best);
printf("\nIf light propagates backward: T=%.2f R=%.2f",T_backbest,R_backbest);
}
Prog3.cpp
//SS polarizations
#include <stdio.h>
#include <math.h>
#include <complex.h>
//Input
double tet0deg=64.0;
double pi=3.1415;
main()
{
double l=193.0;
double N[4]; // n of "plenok"
N[1]=1.44; //LiF, can not be outer material
N[2]=1.50; //CaF
N[3]=1.55; //SiO2
int n1,n2,n3,n4,n5; // index for n[ ]
double d1,d2,d3,d4,d5,d1max,d2max,d3max,d4max,d5max;
double tet0,tet1,tet2,tet3,tet4,tet5;
complex m[3][3],m_aux[3][3];
complex t,r;
double TR,TRbest,Tbest,Rbest,d1best,d2best,d3best,d4best,d5best,n1best,n2best,n3best,n4best,n5best;
complex t_back,r_back; //Backward light propagation
double T_backbest,R_backbest;
double arg,p;
double d[6],tet[6],n[6]; //Auxiliary parameters
int i,j,k;
tet0=tet0deg*pi/180;
//s-polarization
TRbest=0.0;
for(n1=2;n1<=3;n1++)
for(n2=1;n2<=3;n2++)
for(n3=1;n3<=3;n3++)
for(n4=1;n4<=3;n4++)
for(n5=1;n5<=3;n5++)
{
tet1=asin(sin(tet0)/N[n1]);
tet2=asin(sin(tet0)/N[n2]);
tet3=asin(sin(tet0)/N[n3]);
tet4=asin(sin(tet0)/N[n4]);
tet5=asin(sin(tet0)/N[n5]);
d1max=l/(N[n1]*cos(tet1));
d2max=l/(N[n2]*cos(tet2));
d3max=l/(N[n3]*cos(tet3));
d4max=l/(N[n4]*cos(tet4));
d5max=l/(N[n5]*cos(tet5));
for(d1=d1max/8;d1<=d1max;d1=d1+d1max/8)
for(d2=0.0;d2<=d2max;d2=d2+d2max/8)
for(d3=0.0;d3<=d3max;d3=d3+d3max/8)
for(d4=0.0;d4<=d4max;d4=d4+d4max/8)
for(d5=0.0;d5<=d5max;d5=d5+d5max/8)
if(d1+d2+d3+d4+d5<l/2)
{
//for t calculation
m[1][1]=complex(1.0,0.0);
m[1][2]=complex(0.0,0.0);
m[2][1]=complex(0.0,0.0);
m[2][2]=complex(1.0,0.0);
d[1]=d1;d[2]=d2;d[3]=d3;d[4]=d4;d[5]=d5;
tet[1]=tet1;tet[2]=tet2;tet[3]=tet3;tet[4]=tet4;tet[5]=tet5;
n[1]=N[n1];n[2]=N[n2];n[3]=N[n3];n[4]=N[n4];n[5]=N[n5];
for(k=1;k<=5;k++)
{
for(i=1;i<=2;i++)
for(j=1;j<=2;j++) m_aux[i][j]=m[i][j];
arg=2*pi*n[k]*d[k]*cos(tet[k])/l;
p=n[k]*cos(tet[k]);
m[1][1]=m_aux[1][1]*cos(arg)+m_aux[1][2]*complex(0.0,-p*sin(arg));
m[1][2]=m_aux[1][1]*complex(0.0,-sin(arg)/p)+m_aux[1][2]*cos(arg);
m[2][1]=m_aux[2][1]*cos(arg)+m_aux[2][2]*complex(0.0,-p*sin(arg));
m[2][2]=m_aux[2][1]*complex(0.0,-sin(arg)/p)+m_aux[2][2]*cos(arg);
}
t=2*cos(tet0)/((m[1][1]+m[1][2]*cos(tet0))*cos(tet0)+m[2][1]+m[2][2]*cos(tet0));
r_back=((m[1][1]+m[1][2]*cos(tet0))*cos(tet0)-(m[2][1]+m[2][2]*cos(tet0)))/((m[1][1]+m[1][2]*cos(tet0))*cos(tet0)+m[2][1]+m[2][2]*cos(tet0));
//for r calculation
m[1][1]=complex(1.0,0.0);
m[1][2]=complex(0.0,0.0);
m[2][1]=complex(0.0,0.0);
m[2][2]=complex(1.0,0.0);
d[1]=d5;d[2]=d4;d[3]=d3;d[4]=d2;d[5]=d1;
tet[1]=tet5;tet[2]=tet4;tet[3]=tet3;tet[4]=tet2;tet[5]=tet1;
n[1]=N[n5];n[2]=N[n4];n[3]=N[n3];n[4]=N[n2];n[5]=N[n1];
for(k=1;k<=5;k++)
{
for(i=1;i<=2;i++)
for(j=1;j<=2;j++) m_aux[i][j]=m[i][j];
arg=2*pi*n[k]*d[k]*cos(tet[k])/l;
p=n[k]*cos(tet[k]);
m[1][1]=m_aux[1][1]*cos(arg)+m_aux[1][2]*complex(0.0,-p*sin(arg));
m[1][2]=m_aux[1][1]*complex(0.0,-sin(arg)/p)+m_aux[1][2]*cos(arg);
m[2][1]=m_aux[2][1]*cos(arg)+m_aux[2][2]*complex(0.0,-p*sin(arg));
m[2][2]=m_aux[2][1]*complex(0.0,-sin(arg)/p)+m_aux[2][2]*cos(arg);
}