近景单张像片空间后方交会
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一近景单张像片空间后方交会
一、实验目的
通过单张像片空间后方交会算法编程,掌握空间后方交会的基本原理和基本步骤,为近景摄影测量解析处理方法打下理论基础。
二、实验内容
利用C++编程平台,通过给定的单片像点的像点坐标、内方位元素和控制点物方空间坐标,计算出像片的外方位元素。
三、实验步骤:
1、编程流程图:
2、编程代码:
#include "iostream"
#include"stdio.h"
#include "stdlib.h"
#include
#define N 10
using namespace std;
void mult(double *m1,double *m2,double *result,int i_1,int j_12,int j_2)//矩阵相乘
{
int i,j,k;
for(i=0;i for(j=0;j { result[i*j_2+j]=0.0; for(k=0;k result[i*j_2+j]+=m1[i*j_12+k]*m2[j+k*j_2]; } return; } /* ######################矩阵求逆##################*/ int invers_matrix(double *m1,int n) { int *is,*js; int i,j,k,l,u,v; double temp,max_v; is=(int *)malloc(n*sizeof(int)); js=(int *)malloc(n*sizeof(int)); if(is==NULL||js==NULL){ printf("out of memory!\n"); return(0); } for(k=0;k max_v=0.0; for(i=k;i for(j=k;j temp=fabs(m1[i*n+j]); if(temp>max_v){ max_v=temp; is[k]=i; js[k]=j; } } if(max_v==0.0){ free(is); free(js); printf("invers is not availble!\n"); return(0); } if(is[k]!=k) for(j=0;j u=k*n+j; v=is[k]*n+j; temp=m1[u]; m1[u]=m1[v]; m1[v]=temp; } if(js[k]!=k) for(i=0;i u=i*n+k; v=i*n+js[k]; temp=m1[u]; m1[u]=m1[v]; m1[v]=temp; } l=k*n+k; m1[l]=1.0/m1[l]; for(j=0;j if(j!=k){ u=k*n+j; m1[u]*=m1[l]; } for(i=0;i if(i!=k) for(j=0;j if(j!=k){ u=i*n+j; m1[u]-=m1[i*n+k]*m1[k*n+j]; } for(i=0;i if(i!=k){ u=i*n+k; m1[u]*=-m1[l]; } } for(k=n-1;k>=0;k--){ if(js[k]!=k) for(j=0;j u=k*n+j; v=js[k]*n+j; temp=m1[u]; m1[u]=m1[v]; m1[v]=temp; } if(is[k]!=k) for(i=0;i u=i*n+k; v=i*n+is[k]; temp=m1[u]; m1[u]=m1[v]; m1[v]=temp; } } free(is); free(js); return(1); } /*------------------------------矩阵转置----------------------------------*/ void transpose(double *m1,double *m2,int m,int n) { int i,j; for(i=0;i for(j=0;j m2[j*m+i]=m1[i*n+j]; return; } void main() { double Xs,Ys,Zs,q,w,k;//外方位元素// double a[3],b[3],c[3];//旋转矩阵// double x0,y0,f;//内方位元素// double x[N],y[N];