• 大小: 7KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-06
  • 语言: C/C++
  • 标签: 后方交会  

资源简介

以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

评论

共有 条评论