测绘程序设计基础 实验3 CSU
实验3 函数
(交会定点计算程序设计)
(工具:VS2010)
一、 实验目的
• 掌握函数的定义、引用及应用方法
二、实验内容与要求
• 把前方交会、侧边交会、后方交会程序写成函数的形式,然后再通过主程序调用。
三、设计与实现:
3.1 设计思路:
1 在【文件】菜单执行【新建】,选择【项目】。
2 在【项目类型】窗格中,选择【Visual C++】下的“MFC”项。在【模板】窗格中,选择“MFC 应用程序”模板,输入应用名“RS_110_zhang_SY3_01”。按向导创建“RS_110_zhang_SY3_01”的MFC应用程序,应用程序类型为基于对话框。
3 在窗体上放置3个命令按钮,其【Caption】依次为前方交会、后方交会、边长交会,并修改ID。
4 在【资源视图】窗格中的“Dialog”文件右击,插入“Dialog(E)”,出现一个新的对话框,修改对话框ID。共创建4个对话框:
5 设置对话框属性:
以后方交会为例:将2个编辑框依次右击执行【添加变量】,在弹出的【添加成员变量向导】对话框中,【类别】属性更改为“Value”型,【变量类型】属性更改为“CString”类型,将【变量名】依次命名为“strResection”、“strResult”,并修改其ID。
5.1 点击一命令按钮,将其【Caption】属性更改为“计算”。双击命令按钮,进入“void Back::OnBnClickedWorktoback1()”中,添加代码,在该.cpp文件中依次添加函数并辅以说明;另一完成归零功能的命令按钮操作与上类似。
5.2 流程图如下:
6 添加辅助类“Support”:
7 包含头文件:“Back.cpp”“Front.cpp”“Side.cpp”分别在头文件中添加语句
“#include “Support.h””
8 运行和调试程序;
9 保存应用程序。
3.2 界面设计:
3.2.1界面
3.2.2控件属性
3.3主要代码:
3.3.1文件:<Support.h>
#pragma once
class CSupport
{
public:
CSupport(void);
~CSupport(void);
int SplitStringArray(CString str, char split, CStringArray& aStr);
double Process_oppDegree(double dDms);
double Process_oppD(double dDeg);
double Back1(double Xa,double Xb,double Ya,double Yb,double dCotA,double dCotB);
double Back2(double Xa,double Xb,double Ya,double Yb,double dCotA,double dCotB);
double length(double x1,double y1,double x2,double y2);
double angle(double a,double b,double c);
double pocess_P(double a,double b);
double pocess_answer01(double PA,double PB,double PC,double a,double b,double c);
double Process_Rad(double dx1,double dy1,double dx2,double dy2);
bool AreYouTriangle(double a,double b,double c);
void CBack_intersection(CString strResection,CString &strResult);
void CFore_intersection(CString strFront,CString &strOutFront);
void CLinear_intersection(CString strSide,CString &strOutSide);
};
3.3.2文件:<Support.cpp>
包含13个函数,由三个主函数与9个小函数相辅而成。
/***************************************************************************
* 文件名:<Support.cpp> *
* *
* 描述:封装所有函数的类 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建 *** *
* *
* 外部过程: *
* *
/**************************************************************************/
/***************************************************************************
* 名字:double CSupport::SplitStringArray(CString str, char split, CStringArray& aStr) *
* *
* 描述:字符串分割函数 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.CString str *
* 2.char split *
* 3.CStringArray& aStr *
* 返回值:int类型数据 返回n *
* *
* 注: *
/**************************************************************************/
int CSupport::SplitStringArray(CString str, char split, CStringArray& aStr)
{
int startIdx = 0;
int idx = str.Find(split, startIdx);
aStr.RemoveAll();//先清空
while (-1 != idx)
{
CString sTmp = str.Mid(startIdx, idx - startIdx);
aStr.Add(sTmp);
startIdx = idx + 1;
idx = str.Find(split, startIdx);
}
CString sTmp = str.Right(str.GetLength() - startIdx);
if (! sTmp.IsEmpty())
aStr.Add(sTmp);
return aStr.GetSize();
}
/***************************************************************************
* 名字:double Process_oppD(double dDeg) *
* *
* 描述:十进制的角度值--》弧度式方位角 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.double dDeg*PI/180 *
* *
* *
* 返回值:double类型数据 返回弧度值 *
* *
* 注: *
/**************************************************************************/
double CSupport::Process_oppD(double dDeg)
{
return dDeg*Pi/180;
}
/***************************************************************************
* 名字:Back1(double Xa,double Xb,double Ya,double Yb,double dCotA,double dCotB) *
* *
* 描述:前方交会的主要公式之一 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.double Xa *
* 2.double Xb *
* 3.double Ya *
* 4.double Yb *
* 5.double dCotA *
* 6.double dCotB *
* 返回值:double类型数据 返回xp坐标 *
* *
* 注: *
/**************************************************************************/
double CSupport::Back1(double Xa,double Xb,double Ya,double Yb,double dCotA,double dCotB)
{
return (((Xa*dCotB+Xb*dCotA)+(Yb-Ya))/(dCotA+dCotB));
}
/***************************************************************************
* 名字:Back2(double Xa,double Xb,double Ya,double Yb,double dCotA,double dCotB) *
* *
* 描述:前方交会的主要公式之一 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.double Xa *
* 2.double Xb *
* 3.double Ya *
* 4.double Yb *
* 5.double dCotA *
* 6.double dCotB *
* 返回值:double类型数据 返回yp坐标 *
* *
* 注: *
/**************************************************************************/
double CSupport::Back2(double Xa,double Xb,double Ya,double Yb,double dCotA,double dCotB)
{
return (((Ya*dCotB+Yb*dCotA)+(Xa-Xb))/(dCotA+dCotB));
}
/***************************************************************************
* 名字:Process_oppDegree(double dDms) *
* *
* 描述:度分秒形式--》十进制的角度值 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月8日 创建该函数 *** *
* 2019年3月20日 再次调用 *** *
* 参数: 1.double dDms *
* *
* *
* 返回值:double类型数据 dDeg 返回十进制的角度值 *
* *
* 注: *
/**************************************************************************/
double CSupport::Process_oppDegree(double dDms)
{
int iDegree,iMin;
double dSec;
double dDeg;
iDegree=int(dDms);
iMin=int((dDms-iDegree)*100);
dSec=((dDms-iDegree)*100-iMin)*100;
dDeg=iDegree+double(iMin)/60+dSec/3600;
return dDeg;
}
/***************************************************************************
* 名字:double length(double x1,double y1,double x2,double y2) *
* *
* 描述:由(x1,y1)和(x2,y2)计算两点之间距离 长度 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.double x1 *
* 2.double y1 *
* 3.double x2 *
* 4.double y2 *
* 返回值:double类型数据 返回距离 *
* *
* 注: *
/**************************************************************************/
double CSupport::length(double x1,double y1,double x2,double y2)
{
double tmp=((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return sqrt(tmp);
}
/***************************************************************************
* 名字:double angle(double a,double b,double c) *
* *
* 描述:三角形已知a、b、c三边长,计算a,b之间夹角 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.double a *
* 2.double b *
* 3.double c *
* 返回值:double类型数据 返回夹角 *
* *
* 注: *
/**************************************************************************/
double CSupport::angle(double a,double b,double c)
{
return acos((a*a+b*b-c*c)/(2*a*b));
}
/***************************************************************************
* 名字:double pocess_P(double a,double b) *
* *
* 描述:后方交会的公式之一 求P值 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.double a *
* 2.double b *
* 返回值:double类型数据 返回P值 *
* *
* 注: *
/**************************************************************************/
double CSupport::pocess_P(double a,double b)
{
return ((tan(a)*tan(b))/(tan(a)-tan(b)));
}
/***************************************************************************
* 名字:pocess_answer01(double PA,double PB,double PC,double a,double b,double c)*
* *
* 描述:后方交会的公式之一 求xp或yp点位坐标 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.double PA *
* 2.double PB *
* 3.double PC *
* 4.double a *
* 5.double b *
* 6.double c *
* 返回值:double类型数据 返回P值 *
* *
* 注: *
/**************************************************************************/
double CSupport::pocess_answer01(double PA,double PB,double PC,double a,double b,double c)
{
return ((PA*a+PB*b+PC*c)/(PA+PB+PC));
}
/***************************************************************************
* 名字:double Process_Rad(double dx1,double dy1,double dx2,double dy2) *
* *
* 描述:4个坐标值--》弧度式方位角 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月8日 创建该函数 *** *
* 2019年3月21日 调用 *** *
* 参数: 1.double dx1 *
* 2.double dy1 *
* 3.double dx2 *
* 4.double dy2 *
* *
* 返回值:double类型数据 转换后的rad型方位角 *
* *
* 注:该函数在输入两坐标值相同时,会有一对话框弹出,且此时返回值为0 *
/**************************************************************************/
double CSupport::Process_Rad(double dx1,double dy1,double dx2,double dy2)
{
double dx=dx2-dx1;
double dy=dy2-dy1;
double dRad;
if(dy>0){
if(dx<0){
dRad=atan(dy/dx)+PI;//第二象限
}
else if(dx>0){
dRad=atan(dy/dx);//第一象限
}
else{
dRad=PI/2;//位于Y轴正方向
}
}
else if(dy<0){
if(dx<0){
dRad=atan(dy/dx)+PI;//第三象限
}
else if(dx>0){
dRad=atan(dy/dx)+2*PI;//第四象限
}
else{
dRad=PI*3/2;//位于Y轴负方向
}
}
else{
if(dx>0){
dRad=0;//位于X正半轴
}
else if(dx<0){
dRad=PI;//位于X负半轴
}
else{
AfxMessageBox(_T("您不能输入相同的坐标。"));//(x1,y1)==(x2,y2)的情况
return 0;
}
}
return dRad;
}
/***************************************************************************
* 名字:bool CSupport::AreYouTriangle(double a,double b,double c) *
* *
* 描述:判断三条边是否能构成三角形 *
* *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月22日 创建该函数 *** *
* 参数: 1.double a *
* 2.double b *
* 2.double c *
* *
* 返回值:bool型 *
* *
* 注:暂时仅支持一行数据处理 *
/**************************************************************************/
bool CSupport::AreYouTriangle(double a,double b,double c)
{
return bool(a+b>c&&a+c>b&&b+c>a);
}
/***************************************************************************
* 名字:void CBack_intersection(CString strResection,CString &strResult) *
* *
* 描述:前方交会主函数,调用了SplitStringArray、Process_oppD *
* Process_oppDegree、length、angle、pocess_P、pocess_answer01等7个函数 *
* *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.CString strResection *
* 2.CString &strResult *
* *
* 返回值:CString类型数据 输出坐标(xp,yp) *
* *
* 注:支持多行数据处理 *
/**************************************************************************/
void CSupport::CBack_intersection(CString strResection,CString &strResult)
{
int iLine;//行数
CStringArray aStrLine;
iLine=SplitStringArray(strResection,13,aStrLine);
if(iLine==0)
{
AfxMessageBox(_T("请输入数据!"));
}
/*
if(iLine>1)
{
AfxMessageBox(_T("当前仅支持处理单行数据"));
}*/
//定义结构体和动态数组
struct Point2D
{
double dx1;
double dy1;
double dx2;
double dy2;
double dx3;
double dy3;
double dAlpha;
double dBeta;
double dGamma;
double dAlpha0;
double dBeta0;
double dGamma0;
double dlength[3];
double dAngel[3];
double dP[3];
double dxp;
double dyp;
double temp1;
double temp2;
double temp3;
bool dDanger;
};
Point2D *point= new Point2D[iLine];
//使用Split函数分离,获得坐标
CStringArray aStrTmp;
//int i=0;
int n;
for(int i=0;i<iLine;i++)
{
n=SplitStringArray(aStrLine[i],',',aStrTmp);
point[i].dx1 =_tstof(aStrTmp[0]);
point[i].dy1 =_tstof(aStrTmp[1]);
point[i].dx2 =_tstof(aStrTmp[2]);
point[i].dy2 =_tstof(aStrTmp[3]);
point[i].dx3 =_tstof(aStrTmp[4]);
point[i].dy3 =_tstof(aStrTmp[5]);
//读取三个角度并处理,由角度转为十进制的角度再转为弧度制
point[i].dAlpha =_tstof(aStrTmp[6]);
point[i].dBeta =_tstof(aStrTmp[7]);
point[i].dGamma =_tstof(aStrTmp[8]);
point[i].dAlpha0=point[i].dAlpha;
point[i].dBeta0=point[i].dBeta;
point[i].dGamma0=point[i].dGamma;
point[i].dAlpha=Process_oppD(Process_oppDegree(point[i].dAlpha));
point[i].dBeta=Process_oppD(Process_oppDegree(point[i].dBeta));
point[i].dGamma=Process_oppD(Process_oppDegree(point[i].dGamma));
//求三条边的长度
point[i].dlength[0]=length(point[i].dx1,point[i].dy1,point[i].dx2,point[i].dy2);//(x1,y1)与(x2,y2)之间长度 记为边1
point[i].dlength[1]=length(point[i].dx1,point[i].dy1,point[i].dx3,point[i].dy3);//(x1,y1)与(x3,y3)之间长度 记为边2
point[i].dlength[2]=length(point[i].dx2,point[i].dy2,point[i].dx3,point[i].dy3);//(x2,y2)与(x3,y3)之间长度 记为边3
//求角度
point[i].dAngel[0]=angle(point[i].dlength[0],point[i].dlength[1],point[i].dlength[2]);//边1与边2夹角 角A
point[i].dAngel[1]=angle(point[i].dlength[1],point[i].dlength[2],point[i].dlength[0]);//边2与边3夹角 角B
point[i].dAngel[2]=angle(point[i].dlength[0],point[i].dlength[2],point[i].dlength[1]);//边1与边3夹角 角C
//计算P
point[i].dP[0]=pocess_P(point[i].dAlpha,point[i].dAngel[0]);//求PA
point[i].dP[1]=pocess_P(point[i].dBeta,point[i].dAngel[1]);//求PB
point[i].dP[2]=pocess_P(point[i].dGamma,point[i].dAngel[2]);//求PC
//计算xp,yp
point[i].dxp=pocess_answer01(point[i].dP[0],point[i].dP[1],point[i].dP[2],point[i].dx1,point[i].dx2,point[i].dx3);
point[i].dyp=pocess_answer01(point[i].dP[0],point[i].dP[1],point[i].dP[2],point[i].dy1,point[i].dy2,point[i].dy3);
//判断数据 判断后方交会是否危险园附近
point[i].temp1 =point[i].dGamma0+point[i].dBeta0+point[i].dAngel[0]*180/PI;
point[i].temp2 =point[i].dAlpha0+point[i].dGamma0+point[i].dAngel[1]*180/PI;
point[i].temp3 =point[i].dAlpha0+point[i].dBeta0+point[i].dAngel[2]*180/PI;
if((point[i].temp1>170&&point[i].temp1<190)||(point[i].temp2>170&&point[i].temp2<190)||(point[i].temp3>170&&point[i].temp3<190))
{
point[i].dDanger=1;
}
else
{
point[i].dDanger=0;
}
//输出
strResult.Format(_T("%s\t%s\t%s\t\r\n"),
_T("Yp:"),
_T("Xp:"),
_T(" ")
);
CString strOutput;
for(int z=0;z<iLine;z++)
{
if(point[z].dAlpha0+point[z].dBeta0+point[z].dGamma0==360){
if(AreYouTriangle(point[z].dlength[0],point[z].dlength[1],point[z].dlength[2]))
{
if(point[z].dDanger)
{
strOutput.Format(_T("%.3lf\t%.3lf\t%s\r\n"),point[z].dxp,point[z].dyp,_T("危险圆"));
strResult=strResult+strOutput;
}
else
{
strOutput.Format(_T("%.3lf\t%.3lf\t\r\n"),point[z].dxp,point[z].dyp);
strResult=strResult+strOutput;
}
}
else
{
strOutput.Format(_T("错误,不能构成三角形\r\n"));
strResult=strResult+strOutput;
}
}
else
{
strOutput.Format(_T("α与β与γ之和非360,错误\r\n"));
strResult=strResult+strOutput;
}
}
}
if(point!=NULL)
{
delete[] point;
point=NULL;
}
}
/***************************************************************************
* 名字:CFore_intersection(CString strFront,CString &strOutFront) *
* *
* 描述:前方交会主函数,调用了SplitStringArray、Process_oppD *
* Process_oppDegree、Back1、Back2等5个函数 *
* *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.CString strFront *
* 2.CString &strOutFront *
* *
* 返回值:CString类型数据 输出坐标(xp,yp) *
* 注:支持多行数据处理 *
* *
/**************************************************************************/
void CSupport::CFore_intersection(CString strFront,CString &strOutFront)
{
int iLine;
CStringArray aStrLine;
iLine=SplitStringArray(strFront,13,aStrLine);
if(iLine==0)
{
AfxMessageBox(_T("请输入数据!"));
}
struct Point2D
{
double dx1;
double dy1;
double dx2;
double dy2;
double dAlpha;
double dBeta;
double dCotA;
double dCotB;
double dxp;
double dyp;
};
Point2D *point= new Point2D[iLine];
//使用Split函数分离,获得坐标
CStringArray aStrTmp;
int n;
for(int i=0;i<iLine;i++)
{
n=SplitStringArray(aStrLine[i],',',aStrTmp);
point[i].dx1 =_tstof(aStrTmp[0]);
point[i].dy1 =_tstof(aStrTmp[1]);
point[i].dx2 =_tstof(aStrTmp[2]);
point[i].dy2 =_tstof(aStrTmp[3]);
point[i].dAlpha =_tstof(aStrTmp[4]);
point[i].dBeta =_tstof(aStrTmp[5]);
point[i].dCotA=1/tan(Process_oppD(Process_oppDegree(point[i].dAlpha)));
point[i].dCotB=1/tan(Process_oppD(Process_oppDegree(point[i].dBeta)));
point[i].dxp=Back1(point[i].dx1,point[i].dx2,point[i].dy1,point[i].dy2,point[i].dCotA,point[i].dCotB);
point[i].dyp=Back2(point[i].dx1,point[i].dx2,point[i].dy1,point[i].dy2,point[i].dCotA,point[i].dCotB);
//输出
strOutFront.Format(_T("%s\t%s\t\r\n"),
_T("Xp:"),
_T("Yp:"));
CString strOutput;
for(int z=0;z<iLine;z++)
{
if((point[z].dAlpha+point[z].dBeta)<180)
{
strOutput.Format(_T("%.3lf\t%.3f\t\r\n"),point[z].dxp,point[z].dyp);
strOutFront=strOutFront+strOutput;
}
else
{
strOutput.Format(_T("错误,alpha+β>180\r\n"));
strOutFront=strOutFront+strOutput;
}
}
}
if(point!=NULL)
{
delete[] point;
point=NULL;
}
}
/***************************************************************************
* 名字:CLinear_intersection(CString strSide,CString &strOutSide) *
* *
* 描述:前方交会主函数,调用了SplitStringArray、Process_Rad *
* angle、AreYouTriangle等4个函数 *
* *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建该函数 *** *
* 参数: 1.CString strSide *
* 2.CString &strOutSide *
* *
* 返回值:CString类型数据 输出坐标(xp,yp) *
* *
* 注:支持多行数据处理 *
/**************************************************************************/
void CSupport::CLinear_intersection(CString strSide,CString &strOutSide)
{
CSupport j;
int iLine;
CStringArray aStrLine;
iLine=SplitStringArray(strSide,13,aStrLine);
if(iLine==0)
{
AfxMessageBox(_T("请输入数据!"));
}
struct Point2D
{
double dx1;
double dy1;
double dx2;
double dy2;
double dDab;//两点长度
double dDap;
double dDbp;
double dAlphaAB;
double dAlphaBA;
double dBAP;
double dABP;
double dap;
double dbp;
double dxp;
double dyp;
};
Point2D *point= new Point2D[iLine];
//使用Split函数分离,获得坐标
CStringArray aStrTmp;
int n;
for(int i=0;i<iLine;i++)
{
n=SplitStringArray(aStrLine[i],',',aStrTmp);
point[i].dx1 =_tstof(aStrTmp[0]);
point[i].dy1 =_tstof(aStrTmp[1]);
point[i].dx2 =_tstof(aStrTmp[2]);
point[i].dy2 =_tstof(aStrTmp[3]);
point[i].dDap =_tstof(aStrTmp[4]);
point[i].dDbp =_tstof(aStrTmp[5]);
point[i].dDab =length(point[i].dx1,point[i].dy1,point[i].dx2,point[i].dy2);
point[i].dAlphaAB=Process_Rad(point[i].dx1,point[i].dy1,point[i].dx2,point[i].dy2);
point[i].dAlphaBA=Process_Rad(point[i].dx2,point[i].dy2,point[i].dx1,point[i].dy1);
point[i].dBAP=angle(point[i].dDab,point[i].dDap,point[i].dDbp);
point[i].dABP=angle(point[i].dDab,point[i].dDbp,point[i].dDap);
point[i].dap=point[i].dAlphaAB-point[i].dBAP;
point[i].dbp=point[i].dAlphaBA+point[i].dABP;
point[i].dxp=point[i].dx1+point[i].dDap*cos(point[i].dap);
point[i].dyp=point[i].dy1+point[i].dDap*sin(point[i].dap);
//输出
strOutSide.Format(_T("%s\t%s\t\r\n"),
_T("Xp:"),
_T("Yp:"));
CString strOutput;
for(int z=0;z<iLine;z++)
{
if(AreYouTriangle(point[z].dDab,point[z].dDap,point[z].dDbp))
{
strOutput.Format(_T("%.3f\t%.3f\t\r\n"),point[z].dxp,point[z].dyp);
strOutSide=strOutSide+strOutput;
}
else
{
strOutput.Format(_T("错误,不能构成三角形\r\n"));
strOutSide=strOutSide+strOutput;
}
}
}
if(point!=NULL)
{
delete[] point;
point=NULL;
}
}
3.3.3文件:< CRS_110_zhang_SY3_01Dlg.cpp>
/***************************************************************************
* 文件名:<RS_110_zhang_SY3_01Dlg.cpp> *
* *
* 描述:主界面 生成后方、前方、边长交会 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建 *** *
* *
* 外部过程: *
* *
/**************************************************************************/
void CRS_110_zhang_SY3_01Dlg::OnBnClickedButton1Back()
{
// TODO: 在此添加控件通知处理程序代码
Back B;
B.DoModal ();
}
void CRS_110_zhang_SY3_01Dlg::OnBnClickedButton2Front()
{
// TODO: 在此添加控件通知处理程序代码
Front B;
B.DoModal ();
}
void CRS_110_zhang_SY3_01Dlg::OnBnClickedButton3Side()
{
// TODO: 在此添加控件通知处理程序代码
Side B;
B.DoModal ();
}
3.3.4文件:<Back.cpp>
/***************************************************************************
* 文件名:<Back.cpp> *
* *
* 描述:实现后方交会的类 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建 *** *
* *
* 外部过程: *
* *
/**************************************************************************/
void Back::OnBnClickedWorktoback1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
CSupport k;
k.CBack_intersection(strResection,strResult);
UpdateData(false);
}
void Back::OnBnClickedButton1Zeroing1()
{
// TODO: 在此添加控件通知处理程序代码
strResection.Format(_T(""));
strResult.Format(_T(""));
UpdateData(false);
}
3.3.5文件:<Front.cpp>
/***************************************************************************
* 文件名:<Front.cpp> *
* *
* 描述:实现前方交会的类 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建 *** *
* *
* 外部过程: *
* *
/**************************************************************************/
void Front::OnBnClickedWorkFront2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
CSupport k;
k.CFore_intersection(strFront,strOutFront);
UpdateData(false);
}
void Front::OnBnClickedButton1Zeroing2()
{
// TODO: 在此添加控件通知处理程序代码
strFront.Format(_T(""));
strOutFront.Format(_T(""));
UpdateData(false);
}
3.3.6文件:<Side.cpp>
/***************************************************************************
* 文件名:<Side.cpp> *
* *
* 描述:实现边长交会的类 *
* *
* 历史:**日期** **理由** **签名** *
* 2019年3月20日 创建 *** *
* *
* 外部过程: *
* *
/**************************************************************************/
void Side::OnBnClickedSide3()
{
UpdateData(true);
CSupport k;
k.CLinear_intersection(strSide,strOutSide);
UpdateData(false);
// TODO: 在此9添加控件通知处理程序代码
}
void Side::OnBnClickedButton1Side3()
{
strSide.Format(_T(""));
strOutSide.Format(_T(""));
UpdateData(false);
}
3.4运行结果
3.5设计技巧:
创建一个新类“Support”,将用到的函数全部定义为该类的共有函数,再创建对象,调用该类中的函数,使程序变得整洁,寻找修改函数也更加方便。
在设计之前,要有个整体的框架。提前想好ID及变量名,这样在搭建Dialog时不必纠结,浪费时间,减少错误。此次实验其实也能仅由一个Dialog加多个按钮来完成,不需要多个对话框。而我做之前思路没清晰,搭建过程中不好修改,浪费了一些功夫。
熟练调用函数、结构体可以大幅度节省时间。
调用以前自己编写的函数。