• 大小: 186KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: C/C++
  • 标签:

资源简介

根据提供的10个数据点的坐标(Xn,Yn,Zn)和待求点的平面坐标(Xp,Yp),利用移动二次曲面拟合法,由格网点P(Xp,Yp)周围的10个已知点内插出待求格网点P的高程

资源截图

代码片段和文件信息

#include
#include
#include
#define N 10

templatevoid transpose(T1 *NMT2 *MNint aint b);
templatevoid multi(T1 *AT2 *MT2 *AMint aint bint c);
void main()
{
FILE *fp;
fp=fopen(“input.txt““r“);
int ijkh;
float n[N][3]xyzn_t[N][3]M[N][6]P[N][N]Mt[6][N]MtP[6][N]MtPM[6][6]MPtM[6][6]Z[N][1]MtPZ[6][1]Q[6][1];
for(i=0;i {
for(j=0;j<3;j++)
{
fscanf(fp“%f“&n[i][j]);
}
}//读取已知数据结束。。
for(i=0;i {
Z[i][0]=n[i][2];
}
printf(“请输入待定点的XY坐标(格式为****,****):“);
scanf(“%f%f“&x&y);//待定点XY坐标输入结束。。
getchar();
//计算改正后的坐标。。
for(i=0;i {
for(j=0;j<3;j++)
{
if(j==0)
{
n_t[i][j]=n[i][j]-x;
}
else if(j==1)
{
n_t[i][j]=n[i][j]-y;
}
}
}

//计算系数矩阵M。。
for (int i = 0; i < N; i++)
{
M[i][0]=n_t[i][0]*n_t[i][0];
M[i][1]=n_t[i][0]*n_t[i][1];
M[i][2]=n_t[i][1]*n_t[i][1];
M[i][3]=n_t[i][0];
M[i][4]=n_t[i][1];
M[i][5]=1;
}//计算系数矩阵M结束。。
//计算权矩阵P。。
for(int i=0;i {
for(int j=0;j {
if(i==j)
{
if((n_t[i][0]*n_t[i][0]+n_t[i][1]*n_t[i][1])!=0)
P[i][i]=1/(n_t[i][0]*n_t[i][0]+n_t[i][1]*n_t[i][1]);
else
{
printf(“无法得到权矩阵!“);
exit(0);
}
}
else
P[i][j]=0;
}
}//权矩阵计算结束。。
transpose(MMtN6);
multi(MtPMtP6NN);
multi(MtPMMtPM6N6);
multi(MtPZMtPZ6N1);
//计算MtPM的逆阵MPtM。。
float p;
float tem[6][12];
for(i=0;i<6;i++)
for(j=0;j<6;j++)
tem[i][j]=MtPM[i][j];
for(i=0;i<6;i++)
for(j=6;j<12;j++)
{
if(i+6==j)
tem[i][j]=1;
else
tem[i][j]=0;
}
for(h=k=0;k<6-1;k++h++)
for(i=k+1;i<6;i++)
{
if(tem[i][h]==0)
continue;
p=tem[k][h]/tem[i][h];
for(j=0;j<12;j++)
{
tem[i][j]*=p;
tem[i][j]-=tem[k][j];
}
}
for(h=k=6-1;k>0;k--h--)
for(i=k-1;i>=0;i--)
{
if(tem[i][h]==0)
continue;
p=tem[k][h]/tem[i][h];
for(j=0;j<12;j++)
{
tem[i][j]*=p;
tem[i][j]-=tem[k][j];
}
}
for(i=0;i<6;i++)
{
p=1.0/tem[i][i];
for(j=0;j<12;j++)
tem[i][j]*=p;
}
for(i=0;i<6;i++) 
for(j=0;j<6;j++)
MPtM[i][j]=tem[i][j+6];
//逆阵计算结束。。
multi(MPtMMtPZQ661);
z=Q[5][0];
printf(“待定点的高程为:%.3f“z);
getchar();
}


templatevoid transpose(T1 *NMT2 *MNint aint b)//矩阵求转置函数。。
{
int ij;
for(i=0;i {
for(j=0;j {
MN[j][i]=NM[i][j];
}
}
}//矩阵求转置函数结束。。
templatevoid multi(T1 *AT2 *MT2 *AMint aint bint c)//矩阵求积函数。。
{
int ijk;
for(i=0;i {
for(j=0;j {
AM[i][j]=0;
for(k=0;k {
AM[i][j]+=A[i][k]*M[k][j];
}
}
}
return;
}//矩阵求积函数结束。。

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      45056  2010-11-09 11:06  test07\debug\test07.exe

     文件     312304  2010-11-09 11:06  test07\debug\test07.ilk

     文件     314368  2010-11-09 11:06  test07\debug\test07.pdb

     文件        150  2010-11-08 09:53  test07\input.txt

     文件       8284  2010-11-09 11:06  test07\test07\Debug\BuildLog.htm

     文件         67  2010-11-09 11:06  test07\test07\Debug\mt.dep

     文件        403  2010-11-08 09:53  test07\test07\Debug\test07.exe.embed.manifest

     文件        468  2010-11-08 09:53  test07\test07\Debug\test07.exe.embed.manifest.res

     文件        385  2010-11-09 11:06  test07\test07\Debug\test07.exe.intermediate.manifest

     文件      15950  2010-11-09 11:06  test07\test07\Debug\test07_1.obj

     文件      44032  2010-11-09 11:06  test07\test07\Debug\vc80.idb

     文件      61440  2010-11-09 11:06  test07\test07\Debug\vc80.pdb

     文件        150  2010-11-08 09:53  test07\test07\input.txt

     文件       3970  2010-11-08 09:53  test07\test07\test07.vcproj

     文件       1415  2010-11-09 11:08  test07\test07\test07.vcproj.GISLAB-37.student-37.user

     文件       2988  2010-11-09 11:06  test07\test07\test07_1.cpp

     文件     412672  2010-11-09 11:08  test07\test07.ncb

     文件        883  2010-11-08 09:48  test07\test07.sln

    ..A..H.      7680  2010-11-09 11:08  test07\test07.suo

     目录          0  2010-11-09 11:06  test07\test07\Debug

     目录          0  2010-11-09 11:06  test07\debug

     目录          0  2010-11-09 11:06  test07\test07

     目录          0  2010-11-08 09:54  test07

----------- ---------  ---------- -----  ----

              1232665                    23


评论

共有 条评论

相关资源