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

📄 followline.cpp

📁 本小程序是关于 测绘方面的计算问题 有兴趣的大家来一起探讨
💻 CPP
字号:
// FollowLine.cpp: implementation of the CFollowLine class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "sample7.h"
#include "FollowLine.h"

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

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

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

CFollowLine::~CFollowLine()
{

}

//读附和导线数据
BOOL CFollowLine::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,"FOLLOW"))
	{
		AfxGetApp()->m_pMainWnd->MessageBox("非附和导线!","提示",MB_OK|MB_ICONWARNING);
		fp.Close();
		return FALSE;
	}
	fp.ReadString(buff,MAXLINE);
	sscanf(buff," %d",&m_N);
	fp.ReadString(buff,MAXLINE);
    sscanf(buff," %lf %lf %lf",&m_XA,&m_YA,&m_TA);
    fp.ReadString(buff,MAXLINE);
    sscanf(buff," %lf %lf %lf",&m_XB,&m_YB,&m_TB);
	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 CFollowLine::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];                 
		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_TN[i] = RadianToAngle(fa);
	}
	m_WB  = AngleToRadian(m_TN[m_N]) - AngleToRadian(m_TB);            
	for(i = 1; i <= m_N; i++)
	{
		fa   = AngleToRadian(m_BN[i]) - m_WB/m_N;  
		m_BN[i] = RadianToAngle(fa);
	}
	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;
		}
		if(i < m_N)
		{
            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 - 1] - m_XB;
	m_WY = m_YP[m_N - 1] - m_YB;
}
//主函数
void CFollowLine::MainProc()
{
	double SNI;
	CalculateCoordinate();
	SNI = 0.0;
	for(long i = 1; i <= m_N; i++)
	{
		SNI     += m_SN[i];
		m_XP[i] += -(SNI/m_SNM)*m_WX;
        m_YP[i] += -(SNI/m_SNM)*m_WY;
	}
    m_XP[m_N - 1] = m_XB;
	m_YP[m_N - 1] = m_YB;
	WiritePrompt();
}
//写附和导线数据
BOOL CFollowLine::WriteData(CString strFileName)
{
	CStdioFile f32 ;
	CFileException e32;
	int 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("转折角个数=%d\n",m_N);
    f32.WriteString(strBuffer);
    strBuffer.Format("XA=%10.3lf YA=%10.3lf TA=%10.6lf\n",m_XA,m_YA,m_TA);
    f32.WriteString(strBuffer);
    strBuffer.Format("XB=%10.3lf YB=%10.3lf TB=%10.6lf\n",m_XB,m_YB,m_TB);
    f32.WriteString(strBuffer);
	strBuffer.Format("%s","简易平差计算结果\n");
    f32.WriteString(strBuffer);
	for(long i = 0; i <= m_N - 1; i++)
	{
        strBuffer.Format("m_XP[%2d]=%10.3lf m_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 + -