• 大小: 282KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: C/C++
  • 标签: 绝对定向  

资源简介

通过c语言完成摄影测量中的绝对定向功能,简单易懂。

资源截图

代码片段和文件信息

#include
#include 


#define N 6  // 控制点数量
#define PI 3.1415926
#define MAXITERARATION 8 //最大迭代次数


//////////////////////////////////////////////////////////////////////////
//矩阵变换处理相关函数

//////////////////////////////////////////////////////////////////////////
//矩阵变换处理相关函数
// 矩阵转置
// 参数说明:原始矩阵MatrixOrigin为m×n

void MatrixTranspose(double* MatrixOrigin double* MatrixNew int m int n)
{
int i;
int j;
for (i = 0; i != n; i ++)
{
for (j = 0; j != m; j ++)
{
MatrixNew[i*m+j] = MatrixOrigin[j*n+i];
}
}
};

//////////////////////////////////////////////////////////////////////////
// 矩阵求逆
// 参数说明:m:原始矩阵Matrix的行/列数

void MatrixInversion(double* Matrix int m)
{
int i j k;
    for(k = 0; k != m; k ++)
{
for(i = 0; i != m; i ++)
{
if(i != k)
Matrix[i*m+k] = - Matrix[i*m+k] / Matrix[k*m+k];
}
Matrix[k*m+k] = 1 / Matrix[k*m+k];

for(i = 0; i != m; i ++)
{
if(i != k)
{
for(j = 0; j != m; j ++)
{
if(j != k)
Matrix[i*m+j] += Matrix[k*m+j] * Matrix[i*m+k];
}
}
}

for(j = 0; j != m; j ++)
{
if(j != k)
Matrix[k*m+j] *= Matrix[k*m+k];
}
}
};

//////////////////////////////////////////////////////////////////////////
// 矩阵相乘
// 参数说明:C=A×B,ARow:A的行数,AColumn:A的列数,BColumn:B的列数

void MatrixMultiply(double* MatrixA double* MatrixB double* MatrixC int ARow int AColumn int BColumn)
{
int i;
int j;
int k;

for(i = 0; i != ARow; i ++)
for(j=0; j {
MatrixC[i*BColumn+j] = 0.0;
            for(k = 0; k MatrixC[i*BColumn+j] += MatrixA[i*AColumn+k] * MatrixB[j+k*BColumn];
}
};

//////////////////////////////////////////////////////////////////////////
// 矩阵相加 重载1
// 参数说明 

void MatrixAdd(double* MatrixA double* MatrixB double* MatrixC int Row int Column)
{
int i;
int j;
for (i = 0; i != Row; i ++)
{
for (j = 0; j != Column; j ++)
{
MatrixC[i*Column+j] = MatrixA[i*Column+j] + MatrixB[i*Column+j];
}
}
};

// 矩阵相加 重载2
// A + B = C
// 
void MatrixAdd(double* MatrixA double* MatrixB double* MatrixC int length)
{
int i;
for (i = 0; i != length; i ++)
{
MatrixC[i] = MatrixA[i] + MatrixB[i];
}
};

// 矩阵相减,可做类似相加函数的重载
// A - B = C

void MatrixMinus(double* MatrixA double* MatrixB double* MatrixC int length)
{
int i;
for (i = 0; i != length; i ++)
{
MatrixC[i] = MatrixA[i] - MatrixB[i];
}
};

// 矩阵复制
// B = A

void MatrixCopy(double* MatrixA double* MatrixB int length)
{
int i;
for (i = 0; i != length; i ++)
{
MatrixB[i] = MatrixA[i];
}
};

/*检查改正数是否已经达到精度要求*/
int CheckPrecision(double* deta)
{
int ret;
ret=(fabs(deta[0])<0.5&&fabs(deta[1])<0.5&&fabs(deta[2])<0.5&&
fabs(deta[4])<0.5/60*PI/180&&fabs(deta[5])<0.5/60*PI/180&&fabs(deta[6])<
0.5/60*PI/180);
return ret;
}


struct SourceData    //保存原始数据
{
double x;
double y;
double z

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-06-12 10:53  绝对定向\
     目录           0  2012-06-12 10:53  绝对定向\176\
     文件        8944  2012-06-12 10:50  绝对定向\176\176.cpp
     文件        4248  2012-06-12 10:43  绝对定向\176\176.dsp
     文件         529  2012-06-12 10:43  绝对定向\176\176.dsw
     文件       50176  2012-06-12 10:52  绝对定向\176\176.ncb
     文件       48640  2012-06-12 10:52  绝对定向\176\176.opt
     文件         240  2012-06-12 10:52  绝对定向\176\176.plg
     目录           0  2012-06-12 10:53  绝对定向\176\Debug\
     文件      229451  2012-06-12 10:50  绝对定向\176\Debug\176.exe
     文件      230204  2012-06-12 10:50  绝对定向\176\Debug\176.ilk
     文件       24494  2012-06-12 10:50  绝对定向\176\Debug\176.obj
     文件      221684  2012-06-12 10:50  绝对定向\176\Debug\176.pch
     文件      517120  2012-06-12 10:50  绝对定向\176\Debug\176.pdb
     文件       41984  2012-06-12 10:52  绝对定向\176\Debug\vc60.idb
     文件       53248  2012-06-12 10:50  绝对定向\176\Debug\vc60.pdb
     文件         516  2012-06-12 10:43  绝对定向\176\模型点-控制点-坐标.txt

评论

共有 条评论