📄 近轴光束的光路计算.cpp
字号:
// 近轴光束的光路计算.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
///////////宏定义光线入射高度///////////////////////////////////////////////////////////////////////////////
#define h 30.0
////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main(int argc, char* argv[])
{
int x, flag=1, i, j;
double l1[10],l2[10], r[10], u1[10], u2[10], n[10], d[10], i1[10], i2[10],a[10], b[10], c[10];
printf("请输入透镜的数目(0<x<11):");
while(flag)
{
scanf("%d",&x);
printf("\n");
if(x<=0||x>=11)
printf("输入错误!\n请重新输入透镜的数目(0<x<11):");
else
flag=0;
}
///////////输入光学参数//////////////////////////////////////////////////////////////////////////////////////
printf("请按顺序正确输入每个透镜的球半径r:");
for(i=0;i<x;i++)
scanf("%lf",&r[i]);
printf("\n");
printf("请按顺序正确输入每个透镜的距离d:");
for(i=0;i<x-1;i++)
scanf("%lf",&d[i]);
printf("\n");
printf("请按顺序正确输入每个透镜的折射率n:");
if(x!=1)
{
for(i=0;i<x-1;i++)
scanf("%lf",&n[i]);
n[i]=1;
}
else
{
for(i=0;i<x;i++)
scanf("%lf",&n[i]);
}
printf("\n");
//////////演算第一块透镜的象距///////////////////////////////////////////////////////////////////////////////
i1[0]=h/r[0];
i2[0]=i1[0]/n[0];
u2[0]=i1[0]-i2[0];
a[0]=i2[0]*r[0]/u2[0];
l2[0]=a[0]+r[0];
/////////演算过其他透镜的象距////////////////////////////////////////////////////////////////////////////////
for(j=1;j<x;j++)
{
c[j-1]=l2[j-1]-d[j-1];
l1[j]=c[j-1];
u1[j]=u2[j-1];
b[j]=l1[j]-r[j];
i1[j]=b[j]*u1[j]/r[j];
i2[j]=i1[j]*n[j-1]/n[j];
u2[j]=u1[j]+i1[j]-i2[j];
a[j]=i2[j]*r[j]/u2[j];
l2[j]=a[j]+r[j];
}
/////////输出每过一透镜的象距/////////////////////////////////////////////////////////////////////////////////
for(i=0;i<x;i++)
{
printf("过第%d块透镜后的象距:l%d=%lf\n",i+1,i+1,l2[i]);
}
/////////输出光组的焦距///////////////////////////////////////////////////////////////////////////////////////
printf("光组的焦距:f=%lf\n",h/u2[--i]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -