【www.arisingsemi.com--实用文档】

point怎么读
《测绘程序设计()》
上机实验报告
(Visual C++.Net)
班 级:    测绘0901班 
学 号:      0405090204 
姓 名:        代娅琴   
2012年4月29日
实验八    平差程序设计基础
一、 实验目的
? 巩固过程的定义与调用
? 巩固类的创建与使用
? 巩固间接平差模型及平差计算
? 掌握平差程序设计的基本技巧与步骤
二、 实验内容
水准网平差程序设计。设计一个水准网平差的程序,要求数据从文件中读取,
计算部分与界面无关。

1. 水准网间接平差模型:
2. 计算示例:
近似高程计算:
3. 水准网平差计算一般步骤
(1)读取观测数据和已知数据;
(2)计算未知点高程近似值;
(3)列高差观测值误差方程;
(4)根据水准路线长度计算高差观测值的权;
(5)组成法方程;
(6)解法方程,求得未知点高程改正数及平差后高程值;
(7)求高差观测值残差及平差后高差观测值;
(8)精度评定;
(9)输出平差结果。
4. 水准网高程近似值计算算法
5. 输入数据格式示例
#pragma once
class LevelControlPoint
{
public:
LevelControlPoint(void);
~LevelControlPoint(void);
public:
CString strName;//点名
CString strID;//点号
float H;
bool flag;//标记是否已经计算出近似高程值,若计算出则为,否则为
};
class CDhObs
{
public:
CDhObs(void);
~CDhObs(void);
public:
LevelControlPoint* cpBackObj;//后视点
LevelControlPoint* cpFrontObj;//前视点
double ObsValue;//高差值
double Dist;//测站的距离
};
#include "StdAfx.h"
#include "LevelControlPoint.h"
LevelControlPoint::LevelControlPoint(void)
{
strName=_T(");
strID=_T(");
H=0;
flag=0;
}
LevelControlPoint::~LevelControlPoint(void)
{
}
CDhObs::CDhObs(void)
{
}
CDhObs::~CDhObs(void)
{
}
#pragma once
#include"LevelControlPoint.h"
#include "Matrix.h"
class AdjustLevel
{
public:
AdjustLevel(void);
~AdjustLevel(void);
public:
LevelControlPoint* m_pKnownPoint;//已知点数组
int m_iKnownPointCount;//已知点个数
LevelControlPoint* m_pUnknownPoint;//未知点数组
int m_iUnknownPointCount;//未知点个数
CDhObs* m_pDhObs;//高差观测值数组
int m_iDhObsCount;//高差观测值个数
public:
void SetKnownPointSize(int size);//创建大小为size的已知点数组
void SetUnkonwnPointSize(int size);//创建大小为size的未知点数组
void SetDhObsSize(int size);//创建大小为size的观测值数组
bool LoadObsData(const CString& strFile);//读入观测文件
CString* SplitString(CString str, char split, int& iSubStrs);
void ApproHeignt(void);//计算近似值
private:
LevelControlPoint* SearchKnownPointUsingID(CString ID);
LevelControlPoint* SearchUnknownPointUsingID(CString ID);
LevelControlPoint* SearchPointUsingID(CString ID);
CMatrix LevleWeight(void);//计算权矩阵   
public:
void FormErrorEquation(CMatrix &B, CMatrix &L);//组成误差方程
void EquationCompute(CMatrix &x);//计算法方程
void Accuracy_Assessment(double &r0,CMatrix &Qxx);//精度评定
void CompAdjust(double &r0,CMatrix Qx[]);
};
#include "StdAfx.h"
#include "AdjustLevel.h"
#include
#include "LevelControlPoint.h"
#include "math.h"
AdjustLevel::AdjustLevel(void)
{
m_pKnownPoint=NULL;//已知点数组
m_iKnownPointCount=0;//已知点个数
m_pUnknownPoint=NULL;//未知点数组
m_iUnknownPointCount=0;//未知点个数
m_pDhObs=NULL;//高差观测值数组
m_iDhObsCount=0;//高差观测值个数
}
AdjustLevel::~AdjustLevel(void)
{
if(m_pKnownPoint。=NULL)
{
delete[] m_pKnownPoint;
m_pKnownPoint=NULL;
}
if(m_pUnknownPoint。
=NULL)
{
delete[] m_pUnknownPoint;
m_pUnknownPoint=NULL;
}
if(m_pDhObs。=NULL)
{
delete[] m_pDhObs;
m_pDhObs=NULL;
}
}
void AdjustLevel::SetKnownPointSize(int size)
{
m_pKnownPoint=new LevelControlPoint[size];//创建动态指针
m_iKnownPointCount=size;
}
void AdjustLevel::SetUnkonwnPointSize(int size)
{
m_pUnknownPoint=new LevelControlPoint[size];
m_iUnknownPointCount=size;
}
void AdjustLevel::SetDhObsSize(int size)
{
m_pDhObs=new CDhObs[size];
m_iDhObsCount=size;//高差观测值个数
}
bool AdjustLevel::LoadObsData(const CString& strFile)
{
CStdioFile sf;
if(。(strFile,CFile::modeRead)) return false;//创建并打开文件对象
CString strLine;
bool bEOF=ring(strLine);//读取第一行,即已知点的数目
SetKnownPointSize(_ttoi(strLine));//根据已知点的数目,创建已知点数组;
int n=0;
for(int i=0;i

本文来源:http://www.arisingsemi.com/wendangdaquan/63567/