⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 closeline.cpp

📁 测绘方面的 闭合导线计算问题
💻 CPP
字号:
// CloseLine.cpp: implementation of the CCloseLine class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "sample7.h"
#include "CloseLine.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCloseLine::CCloseLine()
{
    m_SNM  = 0.0;
	m_WB   = 0.0;
	m_WX   = 0.0;
	m_WY   = 0.0;
}

CCloseLine::~CCloseLine()
{

}
//读闭合导线数据
BOOL CCloseLine::ReadData(CString strFileName)
{
	CStdioFile fp;
	CFileException e;
	if( !fp.Open( strFileName,CFile::modeRead|CFile::typeText,NULL) )
	{
		AfxGetApp()->m_pMainWnd->MessageBox("数据文件不存在或数据文件错!","提示",MB_OK|MB_ICONWARNING);
		return FALSE;
    }
	long MAXLINE = 254;
	char strBuffer[255], buff[255];
	fp.ReadString(buff,MAXLINE);
	sscanf(buff, "%s",strBuffer);
	if(strcmpi(strBuffer,"CLOSE"))
	{
		AfxGetApp()->m_pMainWnd->MessageBox("非闭合导线!","提示",MB_OK|MB_ICONWARNING);
		fp.Close();
		return FALSE;
	}
	fp.ReadString(buff,MAXLINE);
	sscanf(buff," %ld",&m_N);
	fp.ReadString(buff,MAXLINE);
    sscanf(buff," %lf %lf",&m_XA,&m_YA);
    fp.ReadString(buff,MAXLINE);
    sscanf(buff," %lf %lf",&m_TA,&m_A);
	for(long i = 1; i <= m_N; i++)
	{
		fp.ReadString(buff,MAXLINE);
        sscanf(buff," %lf %lf",&m_BN[i],&m_SN[i]);
	}
	fp.Close();
	return TRUE;
}
//计算坐标
void CCloseLine::CalculateCoordinate()
{
	double fa,fb;
	m_XP[0] = m_XA;
	m_YP[0] = m_YA;
	m_TN[0] = m_TA;
	fb    = 0.0;
	for(long i = 1; i <= m_N; i++)
	{
		m_SNM += m_SN[i];                 //求所有边长的和
		fb  += AngleToRadian(m_BN[i]);    //求所有内角的和
	}
	m_WB  = fb - (m_N - 2)*PI;            //求闭合差
	for(i = 1; i <= m_N; i++)
	{
		fa   = AngleToRadian(m_BN[i]) - m_WB/m_N;  //平差角度
		m_BN[i] = RadianToAngle(fa);
	}
	m_BN[0] = m_BN[1];                    //m_BN[1]的作用已没有了
	m_BN[1] = m_A;
	for(i = 1; i <= m_N; i++)
	{
		fa   = AngleToRadian(m_TN[i - 1]) + AngleToRadian(m_BN[i]) - PI;
		if(fa>PI2) fa -= PI2;
		if(fa < 0.0 && fabs(fa) > PI2) fa += PI2;
		m_XP[i] = m_XP[i - 1] + m_SN[i]*cos(fa);
        m_YP[i] = m_YP[i - 1] + m_SN[i]*sin(fa);
		m_TN[i] = RadianToAngle(fa);
	}
	m_WX = m_XP[m_N] - m_XA;
	m_WY = m_YP[m_N] - m_YA;
}
//主函数
void CCloseLine::MainProc()
{
	double fa,SNI;
	CalculateCoordinate();
	SNI = 0.0;
	for(long i = 1; i <= m_N; i++)
	{
		SNI     += m_SN[i];
		fa       = AngleToRadian(m_BN[i]) - m_WB/m_N;
		m_BN[i]  = RadianToAngle(fa);
		m_XP[i] += -(SNI/m_SNM)*m_WX;
        m_YP[i] += -(SNI/m_SNM)*m_WY;
	}
	WiritePrompt();
}
//写导线数据
BOOL CCloseLine::WriteData(CString strFileName)
{
	CStdioFile f32 ;
	CFileException e32;
	long Len0 = strFileName.Find(".");
	CString PathName = strFileName.Left(Len0);
    CString FileName = PathName + ".out";
	if(!f32.Open(FileName,CFile::modeCreate|CFile::modeWrite|CFile::typeText,&e32))
	{
		CString errorMessage="文件"+strFileName+"不能创建!";
		AfxMessageBox(errorMessage,MB_OK|MB_ICONSTOP,0);
		f32.Close();
		return FALSE;
	}
	CString strBuffer;
    strBuffer.Format("%s","闭和导线计算成果\n");
	f32.WriteString(strBuffer);
    strBuffer.Format("%s","已知数据:\n");
    f32.WriteString(strBuffer);
    strBuffer.Format("转折角个数=%ld\n",m_N);
    f32.WriteString(strBuffer);
    strBuffer.Format("XA=%10.3lf YA=%10.3lf\n",m_XA,m_YA);
    f32.WriteString(strBuffer);
    strBuffer.Format("TA=%10.6lf A=%10.6lf\n",m_TA,m_A);
    f32.WriteString(strBuffer);
	strBuffer.Format("%s","简易平差计算成果\n");
    f32.WriteString(strBuffer);
	for(long i = 0; i <= m_N; i++)
	{
        strBuffer.Format("XP[%2d]=%10.3lf YP[%2d]=%10.3lf\n",i,m_XP[i],i,m_YP[i]);
		f32.WriteString(strBuffer);
	}
	f32.Close();
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -