题目:
假设要对某区域进行航摄飞行,该区域的设计成图比例尺为1:2000(对应地面采样间隔为20cm),设计飞行的航向重叠度为65%,旁向重叠度为35%。航摄飞行使用的是δ(面阵像元大小)=6.8μ,f(焦距)=50mm的相机,像幅大小为10000(列)×14500(行)。摄区最高点高程为624m,最低点高程为0m。要求根据上述资料计算相对航高(H)、摄影基线(B)和航线间隔(D),并判断最高点重叠度是否满足航摄要求(航向重叠>53%,旁向重叠>13%)
#include<stdio.h>
double height(double GSD,double d,double f);
double basic(double m,double Lx,double Px);
double space(double m,double Ly,double Py);
int main()
{
double f,GSD,d,Px,Py,m,Lx,Ly;
double H,B,D,h,H2,H3;
double m2,Px2,Py2;
printf("enter elements\n");
printf("enter GSD\n"); /*地面采样间隔 */
scanf("%lf",&GSD);
printf("enter d\n"); /*像素大小 */
scanf("%lf",&d);
printf("enter f\n"); /*焦距*/
scanf("%lf",&f);
printf("enter Px\n"); /*航向重叠度*/
scanf("%lf",&Px);
printf("enter Py\n"); /*旁向重叠度*/
scanf("%lf",&Py);
/*printf("enter Lx\n"); 航向像片长
scanf("%lf",&Lx);
printf("enter Ly\n");
scanf("%lf",&Ly); 旁向像片长*/
Lx=d*10000; /*航向像片长为像素大小乘以列数*/
Ly=d*14500; /*旁向像片长为像素大小乘以行数*/
H=GSD*f/d; /*相对航高*/
m=H/f;
B=m*Lx*(1-Px); /*摄影基线*/
D=m*Ly*(1-Py); /*航线间隔*/
printf("%lf\n",m);
printf("相对航高=%lf\n",H);
printf("摄影基线=%lf\n",B);
printf("航线间隔=%lf\n",D);
printf("enter 最低点H2\n");
scanf("%lf",&H2); /*最低点海拔*/
printf("enter 最高点H3\n"); /*最高点海拔*/
scanf("%lf",&H3);
h=(H2+H3)/2;
m2=(H+h-H3)/f; /*最高点实际航高为相对航高加平均海拔再减去最高点海拔*/
Lx=d*10000;
Ly=d*14500;
B=m*Lx*(1-Px); /*摄影基线*/
D=m*Ly*(1-Py); /*航线间隔*/
Px2=1-B/(m2*Lx);
Py2=1-D/(m2*Ly);
printf("%lf\n",m2);
printf("最高点航向重叠度=%lf\n",Px2);
printf("最高点旁向重叠度=%lf\n",Py2);
if(Px2>0.53&&Py2>0.13)
{
printf("最高点重叠度合格");
}
else
printf("最高点重叠度不合格");
return 0;
}
运算结果为
第一次自己独立成功用程序解决专业问题,感觉很骄傲,我会继续努力解决更多问题的。