资源简介
通过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
- 上一篇:旅行商问题 最近插入法
- 下一篇:计算机图形学OpenGL画机器人
评论
共有 条评论