资源简介
以C/C++编写的关于摄影测量学的程序,实现后方交会、前方交会、相对定向和绝对定向。
代码片段和文件信息
#include
#include
#include
#include “matrix.h“
#include “struct_point.h“
#include “R.h“
#include “photo.h
#include “camera.h““
#include “corrections.h“
#ifndef _NO_NAMESPACE
using namespace std;
using namespace math;
#define STD std
#else
#define STD
#endif
#ifndef _NO_TEMPLATE
typedef matrix Matrix;
#else
typedef matrix Matrix;
#endif
#ifndef _NO_EXCEPTION
# define TRYBEGIN() try {
# define CATCHERROR() } catch (const STD::exception& e) { \
cerr << “Error: “ << e.what() << endl; }
#else
# define TRYBEGIN()
# define CATCHERROR()
#endif
#define N 117
void main2()
{
int i;
bool flag=true;
double sigma;
double yq;
FILE *fp; //定义一个文件指针fp
Matrix A1(N*26)A2(N*26);
Matrix L01(N*21)L02(N*21);
Matrix L1(N*21)L2(N*21);
Matrix l1(N*21)l2(N*21);
Matrix V1(N*21)V2(N*21);
Matrix X01(61)X02(61);
Matrix dX1(61)dX2(61);
Matrix X1(61)X2(61);
Matrix T(11);
dX1.Null();
dX2.Null();
X1.Null();
X2.Null();
V1.Null();
V2.Null();
char buf[80];
int num;
double *str=NULL;
struct Point Ctrl[N];
//observations(Ctrl);
//打开观测文件
if((fp=fopen(“控制点及其像点信息文件.txt““r“))==NULL) // 打开文件
{
printf(“file open error.\n“);
exit(0);
}
//读取控制点及其像点信息
fgets(buf80fp);
fgets(buf80fp);
do
{
for(i=0;i {
fscanf(fp“%s %lf %lf %lf“Ctrl[i].name&Ctrl[i].X&Ctrl[i].Y
&Ctrl[i].Z);
fgets(buf80fp);
fgets(buf80fp);
fscanf(fp“%d %lf %lf“&num&Ctrl[i].Lx&Ctrl[i].Ly);
str=Correction(Ctrl[i].LxCtrl[i].Ly);
Ctrl[i].Lx=str[0];
Ctrl[i].Ly=str[1];
fgets(buf80fp);
fscanf(fp“%d %lf %lf“&num&Ctrl[i].Rx&Ctrl[i].Ry);
str=Correction(Ctrl[i].RxCtrl[i].Ry);
Ctrl[i].Rx=str[0];
Ctrl[i].Ry=str[1];
fgets(buf80fp);
}
fgets(buf80fp);
}while(strcmp(buf“\n“) != 0);
fclose(fp);
double pho1[6];
double pho2[6];
pho(pho1pho2);
for(i=0;i<6;i++)
{
X01(i0)=pho1[i];
X02(i0)=pho2[i];
}
double *R1*R2;
double Camera[10];
cam(Camera);
double f=Camera[2];
sigma=Camera[3];
double _X_Y_Z;
//左影象
X1=X01;
while(flag==true)
{
X01=X1;
R1=r(X01(30)X01(40)X01(50));
for(i=0;i {
_X=R1[0]*(Ctrl[i].X-X01(00))+R1[3]*(Ctrl[i].Y-X01(10))+R1[6]*(Ctrl[i].Z-X01(20));
_Y=R1[1]*(Ctrl[i].X-X01(00))+R1[4]*(Ctrl[i].Y-X01(10))+R1[7]*(Ctrl[i].Z-X01(20));
_Z=R1[2]*(Ctrl[i].X-X01(00))+R1[5]*(Ctrl[i].Y-X01(10))+R1[8]*(Ctrl[i].Z-X01(20));
L01(i*20)=-f*_X/_Z; // xy 的近似值
L01(i*2+10)=-f*_Y/_Z;
L1(i*20)=Ctrl[i].Lx; // 观测值 xy
L1(i*2+10)=Ctrl[i].Ly;
l1(i*20)=Ctrl[i].Lx-L01(i*20); // 观测值 xy
l1(i*2+10)=Ctrl[i].Ly-L01(i*2+10);
A1(i*20)=(R1[0
评论
共有 条评论