环境与测绘工程学院
课程论文
学年学期: 2016-2017(一)
课程名称: 测量程序设计
论文题目: 附合导线平差求解
姓 名: 胡慧茹
学 号: 2014100455
任课教师: 白洪伟
目录
一 实训目的.....................................3
二 实训任务.....................................3
三 实训环境.....................................4
3.1 硬件环境......................................................4
3.2软件环境.......................................................4
四 项目设计与分析...............................5
4.1软件基本界面...................................................6
4.2 附合导线平差求解...............................................7
4.3 高差求解......................................................11
4.4 计算方位角...................................................12
4.4.1 实训内容....................................................12
4.4.2 实现步骤设计 ...............................................12
4.5 角度转换......................................................13
4.5.1 实训内容....................................................13
4.5.2 实现步骤设计................................................13
4.6 计算坐标......................................................14
五 调用程序....................................15
1.导线...........................................................15
2. 将度分秒转换为度...............................................16
3.将度分秒转换为秒数.............................................17
4.将弧度转化为度分秒.............................................17
5.将角度转换为弧度 ............................................17
6. 给定俩坐标,坐标正y 算方位角, 返回的是以弧度为单位的角度........18
六 实验心得.................................................18
一 实训目的
(1)掌握C#窗体创建及其常用控件的选用和编程。进一步提高编程能力,掌握对C#方法的调用,同时学会并运用Microsoft Visual Studio2010软件编辑C#语言程序。
(2)实训室由学校组织,利用课堂有限的时间掌握专业知识与运用,结合课下空闲时间巩固加强。学生在实训期间,以个人为单位完成项目,通过自己的不断摸索,实训可以学到课堂上学不到的知识,可以将学到的知识灵活运用起来。
(3)在实训的过程中,可以让学生树立明确的学习态度,拥有良好的职业素养,锻炼扎实的职业技能,塑造坚定的职业人生,也为选择考研深造的同学提供锻炼的机会。
(4)C#是当今社会中发展速度迅猛的一种语言,所以企业公司对于人员的要求也不断提高,与测绘相关的职业也需要具备编程知识的人员,通过实训激发自身潜力,提高自身修养,掌握编程语言,养成良好的编程习惯,为以后的求职生涯添上一块“敲门砖”。
(5)利用Microsoft Visual Studio2010软件设计窗体应用程序并完成“附合导线平差”程序设计, 其中包括登录界面、主界面、角弧转换界面和距离及方位角计算等界面。
二 实训任务
(1)软件基本界面
软件的基本界面包登录界面和主界面,主界面里面为附合导线平差求解,在菜单栏的小工具中包高差求解、角度转换和坐标求解。
(2)附合导线平差求解
在一条双定向附合导线中,已知端点四点坐标,若干左角和边长,求其中各点坐标。
(3)高差求解
用全站仪在一点观测了另一点斜边和垂直角,求两点的高差。
(4)计算方位角
方位角的取值为0-360度。
(5)角度转换
将输入的角度转换为弧度或弧度转换为角度。
(6)计算坐标
已知两点中一点的坐标、距离及方位角,求另一点的坐标。
三 实训环境
3.1 硬件环境
硬件环境是计算机及其外围设备组成的计算机物理系统,即硬件设施,是指由传播活动所需要的那些物质条件、有形条件之和构筑而成的环境。硬件环境主要是由计算机的硬件组成的,而计算机硬件是指计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。这些物理装置系统按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。简而言之,计算机硬件的功能是输入并存储程序和数据,以及执行程序把数据加工成可以利用的形式。从外观上来看,微机由主机箱和外部设备组成。主机箱内主要包CPU 、内存、主板、硬盘驱动器、光盘驱动器、各种扩展卡、连接线、电源;外部设备包鼠标、键盘、显示器、音箱等,这些设备通过接口和连接线与主机相连。这些都是构成硬件的主要部分。
对于C#面向对象的软件来说,所需的硬件环境,要求其实不是很高,安装Visual Studio 2010时的所需的必备条件如表1:
表1 安装Visual Studio 2010所需的必备条件
3.2软件环境
软件环境是指由传播活动所需要的那些非物质条件、无形条件之和构筑而成的环境。只要指软件的运行环境以软件运行所需要的周边软件等等,除此之外,还包括目的软件之外的应用层软件,在涉及软件交互的时候,这些应用软件往往影响很大。
实训中,我们使用VS 集成环境来实现对于C#程序的运行。Visual Studio是微软公司推出的开发环境,是目前最流行的Windows 平台应用程序开发环境。Visual Studio 2010版本于2010年4月12日上市,其集成开发环境(IDE )的界面被重新设计和组织,变得更加简单和明了。Visual Studio 2010同时带来了NET Framework 4.0、Microsoft Visual Studio 2010 CTP ,并且支持开发面向windows7的应用程序。
Visual Studio是开发.NET 应用程序的一套完整的开发工具集,集设计、编辑、运行和调试等多种功能于一体的集成开发环境(IDE )。Visual Studio 支持四种内置的开发语言:Visual Basic、Visual C++、Visual C#和Visual J#,他们使用相同的集成开发环境,因而有助于创建混合语言解决方案。使用Visual Studio 可以高效的生成各种ASP.NET web 应用程序、XML Web Services ,桌面应用程序和移动应用程序。使用Visual Studio集成开发环境可以快捷高效的开发Windows 窗体应用程序。
Visual Studio是我们学习C#必不可少的应用环境,实训时,我们对于Visual Studio 的应用更加熟练了,也对Visual Studio有了各方面的了解。
四 项目设计与分析
4.1软件基本界面
图1 程序设计
本程序名为“程序设计”,登录界面如图1,用户名为“2014100455”,密码为“胡慧茹”。双击“确定”,为了实现账户名密码登录输入一下程序:
private void button1_Click(object sender, Eventrgs e)
{
string = textBox1.Text;
string b = textBox2.Text;
if ( == "2014100455" && b == " 胡慧茹" )
{
this .Hide();
附合导线平差求解frm2 = new 附合导线平差求解();
frm2.Show();
}
具体步骤:
文件,新建项目,windows 应用窗体程序,添加两个label 控件,两个textbox 控件,两个button ,右键属性修改控件的name 和text 的名称。
主界面如图2,主界面是附合导线平差求解,菜单栏中包“文件(打开、另存为)”、“小工具(角度转换、高差求解、计算坐标和计算方位角)”和“帮助(示意图)”。
图2 主界面示意图
4.2 附合导线平差求解
新建windows 窗体命名为附和导线平差,添加五个label 控件,十一个textbox 控件,三个button 控件,一个pictureBox 控件,一个openFileDialog ,一个 saveFileDialog 右键属性修改控件的name 和text 的名称。
图3 附合导线示意图
图4 附合导线平差求解
在菜单栏中选择“文件”“打开”,导入文件夹中“附合导线实例数据”,点击“平差.txt ”,就得出如图4的结果,点击“另存为”,可以将结果以“.txt ”格式保存,命名为“附合导线输出数据实例”。
新建一个Windows 应用程序命名为“附合导线平差求解”,并设计窗口,双击“平差”,编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
double Mx = Convert .ToDouble(textBox1.Text);
double My = Convert .ToDouble(textBox2.Text);
double Ax = Convert .ToDouble(textBox3.Text);
double Ay = Convert .ToDouble(textBox4.Text);
double Nx = Convert .ToDouble(textBox5.Text);
double Ny = Convert .ToDouble(textBox6.Text);
double Bx = Convert .ToDouble(textBox7.Text);
double By = Convert .ToDouble(textBox8.Text);
//计算M 到A 的方位角
double α0 = 导线. 方位角(Mx, My, Ax, Ay);
//计算B 到N 的方位角
double α1 = 导线. 方位角(Bx, By, Nx, Ny);
List 坐标增量X 集合 = new List ();
List 坐标增量Y 集合 = new List ();
List 水平距离平方集合 = new List ();
List 方位角集合 = new List ();
double 坐标增量X 和 = 0;
double 坐标增量Y 和 = 0;
double 坐标增量X 绝对值和 = 0;
double 坐标增量Y 绝对值和 = 0;
double 水平距离和 = 0;
double 水平距离平方和 = 0;
double α = α0;
//ArrayList pj_spj = new ArrayList(256);
string st = textBox9.Text;
string [] array = st.Split('\n');
int pj; int spj;
//int n;
//for (n = 0; n
//{
// if (aArray[n] != "")
// {
// n++;
// }
// else break;
//}
for (pj = 0, spj =1; spj
{
string str = array[pj];
double S = double .Parse(str);
string sd = array[spj];
double sd1 = double .Parse(sd);
double β = 导线.DEG(sd1);
水平距离平方集合.Add(S * S);
水平距离平方和 += S * S;
double dx, dy;
α = 导线. 坐标(0, 0, β, S, α, out dx, out dy);
方位角集合.Add(α);
坐标增量X 集合.Add(dx);
坐标增量Y 集合.Add(dy);
坐标增量X 和 += dx;
坐标增量Y 和 += dy;
坐标增量X 绝对值和 += Math .Abs(dx);
坐标增量Y 绝对值和 += Math .Abs(dy);
pj += 2; spj += 2;
//int number = pj.Capacity;
//pj.TrimtoSize();
}
double LJ = Convert .ToDouble(textBox13.Text);
double βn = 导线.DEG(LJ);
//推算B 到N 的方位角
double αBN = 导线. 方位角(方位角集合[方位角集合.Count - 1], βn);
//计算方位角闭合差
double 方位角闭合差 = αBN - α1;
textBox10.Text = Convert .ToString(方位角闭合差);
double 方位角改正数 = -方位角闭合差 / (方位角集合.Count + 1);
//先对角度进行平差计算, 并重新计算坐标增量
坐标增量X 集合.Clear();
坐标增量Y 集合.Clear();
坐标增量X 和 = 0;
坐标增量Y 和 = 0;
坐标增量X 绝对值和 = 0;
坐标增量Y 绝对值和 = 0;
for (int j = 0; j
{
方位角集合[j] += 方位角改正数 * (j + 1);
//计算坐标增量
double 平距 = Math .Sqrt(水平距离平方集合[j]);
double dx = 平距 * Math .Cos(方位角集合[j]);
double dy = 平距 * Math .Sin(方位角集合[j]);
坐标增量X 集合.Add(dx);
坐标增量Y 集合.Add(dy);
坐标增量X 和 += dx;
坐标增量Y 和 += dy;
坐标增量X 绝对值和 += Math .Abs(dx);
坐标增量Y 绝对值和 += Math .Abs(dy);
}
//计算闭合差
double 闭合差X = Ax + 坐标增量X 和 - Bx;
textBox11.Text = Convert .ToString(闭合差X);
double 闭合差Y = Ax + 坐标增量Y 和 - By;
textBox12.Text = Convert .ToString(闭合差Y);
//计算单位长度改正数
double X坐标单位长度改正数 = -闭合差X / 坐标增量X 绝对值和;
double Y坐标单位长度改正数 = -闭合差Y / 坐标增量Y 绝对值和;
//计算导线相对精度
int f = (int )(水平距离和 / Math .Sqrt(闭合差X * 闭合差X + 闭合差Y * 闭合差Y)); Console .WriteLine(" 导线的相对精度为1/{0}", f);
//计算每点坐标
double X = Ax;
double Y = Ay; List 坐标x = new List (); List 坐标y = new List (); for (int j = 0; j
{
X += 坐标增量X 集合[j] + X坐标单位长度改正数 * Math .Abs(坐标增量X 集合[j]);
坐标x.Add(Convert .ToString(X));
Y += 坐标增量Y 集合[j] + Y坐标单位长度改正数 * Math .Abs(坐标增量Y 集合[j]);
坐标y.Add(Convert .ToString(Y));
}
string JG = 坐标x[0] +" " + 坐标y[0] +" " + 坐标x[1] +" " +坐标y[1] +" " + 坐标x[2]+" " + 坐标y[2];
textBox14.Text = JG;
}
4.3 高差求解
新建一个Windows 应用程序,命令为“高差求解”,按图5布置控件。双击“确定”,输入一下程序。
图5 高差求解示意图
编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
double D = Convert .ToDouble(textBox1.Text);
double a = Convert .ToDouble(textBox2.Text);
double i = Convert .ToDouble(textBox3.Text);
double v = Convert .ToDouble(textBox4.Text);
double h = D * Math .Sin(a) + (1 - 0.13) * D / 6371000.0 * D / 6371000.0 * Math .Cos(a) * Math .Cos(a) /
2.0 + i - v;
textBox5.Text = h.ToString();
}
4.4 计算方位角
4.4.1 实训内容
方位角的取值为0-360度。
4.4.2 实现步骤设计
新建一个Windows 应用程序,命名为“计算方位角”,按照如8布置控件。依次双击两个“确定”,输入以下程序:
图6 计算方位角
编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
double 后视边方位角 = Convert .ToDouble(textBox1.Text);
double 左角 = Convert .ToDouble(textBox2.Text);
double 方位角 = 后视边方位角 + 左角 + 180.0;
{
if (方位角 >= 360.0) 方位角 -= 360.0;
if (方位角
}
textBox3.Text = Convert .ToString(方位角);
}
4.5 角度转换
4.5.1 实训内容
将输入的角度转换为弧度或弧度转换为角度。
4.5.2 实现步骤设计
新建一个Windows 应用程序,命名为“角度转换”,按照如8布置控件。依次双击两个“确定”,输入以下程序:
图7 角度转换
编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
//try catch用来捕获异常
try
{
double jiao = double .Parse(textBox1.Text.Trim());//从TextBox1框中获得值
j_h jh = new j_h();//新 建一个j_h的类
textBox2.Text = jh.JIAO_HUDU(jiao).ToString();//使用jh.JIAO_HUDU方法,在textBox2框中显示
}
catch
{
MessageBox .Show(" 请输入数字" , " 错误" , MessageBoxButtons .OK, MessageBoxIcon .Error); }
}
4.6 计算坐标
建一个Windows 应用程序,命名为“坐标求解”,按照如7布置控件。双击“确定”,输入以下程序:
图8 计算坐标
编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
double 左角 = Convert .ToDouble(textBox3.Text);
double XA = Convert .ToDouble(textBox1.Text);
double YA = Convert .ToDouble(textBox2.Text);
double 已知方位角 = Convert .ToDouble(textBox4.Text);
double 水平距 = Convert .ToDouble(textBox5.Text);
double 方位角 = 已知方位角 + 左角 + Math .PI;
if (方位角 >= Math .PI * 2) 方位角 -= Math .PI;
if (方位角
XA=XA+水平距*Math .Cos(方位角);
YA = YA + 水平距 * Math .Sin(方位角);
textBox6.Text = XA.ToString();
textBox7.Text = YA.ToString();
}
五 调用程序
在编程过程有些程序经常能用到,如果每次都重新编写,不仅费时费力而且数据冗长,本软件调用的程序如下:
1.导线
class 导线
{
//将ddd.mmss 转为弧度
static public double DEG(double ang)
{
int fuhao = (int )(ang / Math .Abs(ang));
ang = Math .Abs(ang);
int d = (int )ang;
int m = ((int )(ang * 100)) - d * 100;
double s = ang * 10000 - m * 100 - d * 10000;
return ((d + m / 60.0 + s / 3600.0) * fuhao) / 180.0 * Math .PI;
}
//计算方位角, 返回弧度值
public static double 方位角(double x1, double y1, double x2, double y2)
{
double deltX = x2 - x1;
double deltY = y2 - y1;
double angle = Math .PI * 0.5;
if (Math .Abs(deltX) > 0.000000001)
{
angle = Math .tn2(deltY, deltX);
}
if (angle
{
angle += Math .PI;
}
if (deltY
{
angle += Math .PI;
return angle;
}
//计算坐标返回已知点到计算点的方位角
public static double 坐标double x0, double y0, double 左哩角, double 水平距离, double 已知方位角, out double x, out double y)
{
double 方位角 = 已知方位角 + 左哩角 + Math .PI;
//将方位角调獭整到0到2πD 之间
if (方位角 >= Math .PI * 2) 方位角 -= Math .PI * 2;
if (方位角
x = x0 + 水平距离 * Math .Cos(方位角);
y = y0 + 水平距离 * Math .Sin(方位角);
return 方位角;
}
//根据Y 后边的方位角与左角, 计算前进边的方位角
public static double 方位角(double 后视边方位角, double 左角)
{
double 方位角 = 后视边方位角 + 左角 + Math .PI;
//将方位角调整到0到2πD 之间
if (方位角 >= Math .PI * 2) 方位角 -= Math .PI * 2;
if (方位角
return 方位角;
}
}
2. 将度分秒转换为度
public class cejiao_jiao
{
public double cj_j(double jiao)
{
jiao = Math .AAbs(jiao);
int du = (int )(Math .Floor(jiao));
jiao = (jiao - du) * 100;
int fen = (int )(Math .Floor(jiao));
jiao = (jiao - fen) * 100;
int miao = (int )(Math .Floor(jiao));
jiao = du + fen / 60 + miao / 3600;
return jiao;
}
}
3. 将度分秒转换为秒数
public class cejiao_jiaomiao
{
public double cj_j(double jiao)
jiao = Math .AAbs(jiao);
int du = (int )(Math .Floor(jiao));
jiao = (jiao - du) * 100;
int fen = (int )(Math .Floor(jiao));
jiao = (jiao - fen) * 100;
int miao = (int )(Math .Floor(jiao));
jiao = du * 3600 + fen * 60 + miao;
return jiao;
}
}
4. 将弧度转化为度分秒
public class h_j
{
public double HUDU_to_JIAODU(double dd)
{
double a = dd;
a = a * 57.[1**********]23;
int d = (int )System. Math .Floor(a);
a = a - d;
a = a * 60;
int f = (int )System. Math .Floor(a);
a = a - f;
a = a * 60;
if (a + 0.0001 > 60) { a = 0; f = f + 1; }
if (f >= 60) { f = 0; d = d + 1; }
a = d + f / 100.0 + a / 10000.0;
return a;
}
}
5.将角度转换为弧度
public class j_h
{
public double JIAO_HUDU(double jiao)
{
int d = (int )(Math .Floor(jiao));
jiao = jiao - d;
int f = (int )(Math .Floor(jiao * 100.0));
jiao = jiao * 100 - f;
double m = jiao * 100.0;
jiao = d * 3600.0 + f * 60.0 + m;
double hudu = jiao / 206264.[1**********]3;
return hudu;
}
}
6. 给定俩坐标,坐标正
public class fwj
{
public double jisuan(double x1, double y1, double x2, double y2)
{
double cx, cy, cc;
cx = x2 - x1;
cy = y2 - y1;
if (cx == 0 && cy == 0)
return -1;
else
{
if (cx == 0)
{
if (cy > 0)
cc = Math .PI / 2.0;
else
cc = Math .PI * 1.5;
}
else
cc = Math .Atan2(cy, cx);
if (cy
cc = cc + Math .PI;
return cc;
}
}
}
y 算方位角, 返回的是以弧度为单位的角度
六 实验心得
1、学习编程语言一方面需掌握一下处理基本事件的方法,如如何获得输入的字符串等;另一方面应用的软件有清楚的认识,并且还要对编写程序所需的方法和事件要掌握牢固。
2、课程设计是培养我们学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程。通过附合导线平差程序设计实训,使我们更加深入的理解课本中的知识,同时加强了我们个人的实践操作能力,并且培养了我们独立思考能力和程序逻辑创造能力。
3、应该及时掌握课本中的知识点,在课下多编写程序,将知识与实践结合起来。遇到不懂或者难以解决的问题时,及时与老师和同学交流。
4、在课外时间里要阅读一些知识,多做一些项目,不能只依靠书本知识,书本知识是远远不够的。
环境与测绘工程学院
课程论文
学年学期: 2016-2017(一)
课程名称: 测量程序设计
论文题目: 附合导线平差求解
姓 名: 胡慧茹
学 号: 2014100455
任课教师: 白洪伟
目录
一 实训目的.....................................3
二 实训任务.....................................3
三 实训环境.....................................4
3.1 硬件环境......................................................4
3.2软件环境.......................................................4
四 项目设计与分析...............................5
4.1软件基本界面...................................................6
4.2 附合导线平差求解...............................................7
4.3 高差求解......................................................11
4.4 计算方位角...................................................12
4.4.1 实训内容....................................................12
4.4.2 实现步骤设计 ...............................................12
4.5 角度转换......................................................13
4.5.1 实训内容....................................................13
4.5.2 实现步骤设计................................................13
4.6 计算坐标......................................................14
五 调用程序....................................15
1.导线...........................................................15
2. 将度分秒转换为度...............................................16
3.将度分秒转换为秒数.............................................17
4.将弧度转化为度分秒.............................................17
5.将角度转换为弧度 ............................................17
6. 给定俩坐标,坐标正y 算方位角, 返回的是以弧度为单位的角度........18
六 实验心得.................................................18
一 实训目的
(1)掌握C#窗体创建及其常用控件的选用和编程。进一步提高编程能力,掌握对C#方法的调用,同时学会并运用Microsoft Visual Studio2010软件编辑C#语言程序。
(2)实训室由学校组织,利用课堂有限的时间掌握专业知识与运用,结合课下空闲时间巩固加强。学生在实训期间,以个人为单位完成项目,通过自己的不断摸索,实训可以学到课堂上学不到的知识,可以将学到的知识灵活运用起来。
(3)在实训的过程中,可以让学生树立明确的学习态度,拥有良好的职业素养,锻炼扎实的职业技能,塑造坚定的职业人生,也为选择考研深造的同学提供锻炼的机会。
(4)C#是当今社会中发展速度迅猛的一种语言,所以企业公司对于人员的要求也不断提高,与测绘相关的职业也需要具备编程知识的人员,通过实训激发自身潜力,提高自身修养,掌握编程语言,养成良好的编程习惯,为以后的求职生涯添上一块“敲门砖”。
(5)利用Microsoft Visual Studio2010软件设计窗体应用程序并完成“附合导线平差”程序设计, 其中包括登录界面、主界面、角弧转换界面和距离及方位角计算等界面。
二 实训任务
(1)软件基本界面
软件的基本界面包登录界面和主界面,主界面里面为附合导线平差求解,在菜单栏的小工具中包高差求解、角度转换和坐标求解。
(2)附合导线平差求解
在一条双定向附合导线中,已知端点四点坐标,若干左角和边长,求其中各点坐标。
(3)高差求解
用全站仪在一点观测了另一点斜边和垂直角,求两点的高差。
(4)计算方位角
方位角的取值为0-360度。
(5)角度转换
将输入的角度转换为弧度或弧度转换为角度。
(6)计算坐标
已知两点中一点的坐标、距离及方位角,求另一点的坐标。
三 实训环境
3.1 硬件环境
硬件环境是计算机及其外围设备组成的计算机物理系统,即硬件设施,是指由传播活动所需要的那些物质条件、有形条件之和构筑而成的环境。硬件环境主要是由计算机的硬件组成的,而计算机硬件是指计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。这些物理装置系统按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。简而言之,计算机硬件的功能是输入并存储程序和数据,以及执行程序把数据加工成可以利用的形式。从外观上来看,微机由主机箱和外部设备组成。主机箱内主要包CPU 、内存、主板、硬盘驱动器、光盘驱动器、各种扩展卡、连接线、电源;外部设备包鼠标、键盘、显示器、音箱等,这些设备通过接口和连接线与主机相连。这些都是构成硬件的主要部分。
对于C#面向对象的软件来说,所需的硬件环境,要求其实不是很高,安装Visual Studio 2010时的所需的必备条件如表1:
表1 安装Visual Studio 2010所需的必备条件
3.2软件环境
软件环境是指由传播活动所需要的那些非物质条件、无形条件之和构筑而成的环境。只要指软件的运行环境以软件运行所需要的周边软件等等,除此之外,还包括目的软件之外的应用层软件,在涉及软件交互的时候,这些应用软件往往影响很大。
实训中,我们使用VS 集成环境来实现对于C#程序的运行。Visual Studio是微软公司推出的开发环境,是目前最流行的Windows 平台应用程序开发环境。Visual Studio 2010版本于2010年4月12日上市,其集成开发环境(IDE )的界面被重新设计和组织,变得更加简单和明了。Visual Studio 2010同时带来了NET Framework 4.0、Microsoft Visual Studio 2010 CTP ,并且支持开发面向windows7的应用程序。
Visual Studio是开发.NET 应用程序的一套完整的开发工具集,集设计、编辑、运行和调试等多种功能于一体的集成开发环境(IDE )。Visual Studio 支持四种内置的开发语言:Visual Basic、Visual C++、Visual C#和Visual J#,他们使用相同的集成开发环境,因而有助于创建混合语言解决方案。使用Visual Studio 可以高效的生成各种ASP.NET web 应用程序、XML Web Services ,桌面应用程序和移动应用程序。使用Visual Studio集成开发环境可以快捷高效的开发Windows 窗体应用程序。
Visual Studio是我们学习C#必不可少的应用环境,实训时,我们对于Visual Studio 的应用更加熟练了,也对Visual Studio有了各方面的了解。
四 项目设计与分析
4.1软件基本界面
图1 程序设计
本程序名为“程序设计”,登录界面如图1,用户名为“2014100455”,密码为“胡慧茹”。双击“确定”,为了实现账户名密码登录输入一下程序:
private void button1_Click(object sender, Eventrgs e)
{
string = textBox1.Text;
string b = textBox2.Text;
if ( == "2014100455" && b == " 胡慧茹" )
{
this .Hide();
附合导线平差求解frm2 = new 附合导线平差求解();
frm2.Show();
}
具体步骤:
文件,新建项目,windows 应用窗体程序,添加两个label 控件,两个textbox 控件,两个button ,右键属性修改控件的name 和text 的名称。
主界面如图2,主界面是附合导线平差求解,菜单栏中包“文件(打开、另存为)”、“小工具(角度转换、高差求解、计算坐标和计算方位角)”和“帮助(示意图)”。
图2 主界面示意图
4.2 附合导线平差求解
新建windows 窗体命名为附和导线平差,添加五个label 控件,十一个textbox 控件,三个button 控件,一个pictureBox 控件,一个openFileDialog ,一个 saveFileDialog 右键属性修改控件的name 和text 的名称。
图3 附合导线示意图
图4 附合导线平差求解
在菜单栏中选择“文件”“打开”,导入文件夹中“附合导线实例数据”,点击“平差.txt ”,就得出如图4的结果,点击“另存为”,可以将结果以“.txt ”格式保存,命名为“附合导线输出数据实例”。
新建一个Windows 应用程序命名为“附合导线平差求解”,并设计窗口,双击“平差”,编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
double Mx = Convert .ToDouble(textBox1.Text);
double My = Convert .ToDouble(textBox2.Text);
double Ax = Convert .ToDouble(textBox3.Text);
double Ay = Convert .ToDouble(textBox4.Text);
double Nx = Convert .ToDouble(textBox5.Text);
double Ny = Convert .ToDouble(textBox6.Text);
double Bx = Convert .ToDouble(textBox7.Text);
double By = Convert .ToDouble(textBox8.Text);
//计算M 到A 的方位角
double α0 = 导线. 方位角(Mx, My, Ax, Ay);
//计算B 到N 的方位角
double α1 = 导线. 方位角(Bx, By, Nx, Ny);
List 坐标增量X 集合 = new List ();
List 坐标增量Y 集合 = new List ();
List 水平距离平方集合 = new List ();
List 方位角集合 = new List ();
double 坐标增量X 和 = 0;
double 坐标增量Y 和 = 0;
double 坐标增量X 绝对值和 = 0;
double 坐标增量Y 绝对值和 = 0;
double 水平距离和 = 0;
double 水平距离平方和 = 0;
double α = α0;
//ArrayList pj_spj = new ArrayList(256);
string st = textBox9.Text;
string [] array = st.Split('\n');
int pj; int spj;
//int n;
//for (n = 0; n
//{
// if (aArray[n] != "")
// {
// n++;
// }
// else break;
//}
for (pj = 0, spj =1; spj
{
string str = array[pj];
double S = double .Parse(str);
string sd = array[spj];
double sd1 = double .Parse(sd);
double β = 导线.DEG(sd1);
水平距离平方集合.Add(S * S);
水平距离平方和 += S * S;
double dx, dy;
α = 导线. 坐标(0, 0, β, S, α, out dx, out dy);
方位角集合.Add(α);
坐标增量X 集合.Add(dx);
坐标增量Y 集合.Add(dy);
坐标增量X 和 += dx;
坐标增量Y 和 += dy;
坐标增量X 绝对值和 += Math .Abs(dx);
坐标增量Y 绝对值和 += Math .Abs(dy);
pj += 2; spj += 2;
//int number = pj.Capacity;
//pj.TrimtoSize();
}
double LJ = Convert .ToDouble(textBox13.Text);
double βn = 导线.DEG(LJ);
//推算B 到N 的方位角
double αBN = 导线. 方位角(方位角集合[方位角集合.Count - 1], βn);
//计算方位角闭合差
double 方位角闭合差 = αBN - α1;
textBox10.Text = Convert .ToString(方位角闭合差);
double 方位角改正数 = -方位角闭合差 / (方位角集合.Count + 1);
//先对角度进行平差计算, 并重新计算坐标增量
坐标增量X 集合.Clear();
坐标增量Y 集合.Clear();
坐标增量X 和 = 0;
坐标增量Y 和 = 0;
坐标增量X 绝对值和 = 0;
坐标增量Y 绝对值和 = 0;
for (int j = 0; j
{
方位角集合[j] += 方位角改正数 * (j + 1);
//计算坐标增量
double 平距 = Math .Sqrt(水平距离平方集合[j]);
double dx = 平距 * Math .Cos(方位角集合[j]);
double dy = 平距 * Math .Sin(方位角集合[j]);
坐标增量X 集合.Add(dx);
坐标增量Y 集合.Add(dy);
坐标增量X 和 += dx;
坐标增量Y 和 += dy;
坐标增量X 绝对值和 += Math .Abs(dx);
坐标增量Y 绝对值和 += Math .Abs(dy);
}
//计算闭合差
double 闭合差X = Ax + 坐标增量X 和 - Bx;
textBox11.Text = Convert .ToString(闭合差X);
double 闭合差Y = Ax + 坐标增量Y 和 - By;
textBox12.Text = Convert .ToString(闭合差Y);
//计算单位长度改正数
double X坐标单位长度改正数 = -闭合差X / 坐标增量X 绝对值和;
double Y坐标单位长度改正数 = -闭合差Y / 坐标增量Y 绝对值和;
//计算导线相对精度
int f = (int )(水平距离和 / Math .Sqrt(闭合差X * 闭合差X + 闭合差Y * 闭合差Y)); Console .WriteLine(" 导线的相对精度为1/{0}", f);
//计算每点坐标
double X = Ax;
double Y = Ay; List 坐标x = new List (); List 坐标y = new List (); for (int j = 0; j
{
X += 坐标增量X 集合[j] + X坐标单位长度改正数 * Math .Abs(坐标增量X 集合[j]);
坐标x.Add(Convert .ToString(X));
Y += 坐标增量Y 集合[j] + Y坐标单位长度改正数 * Math .Abs(坐标增量Y 集合[j]);
坐标y.Add(Convert .ToString(Y));
}
string JG = 坐标x[0] +" " + 坐标y[0] +" " + 坐标x[1] +" " +坐标y[1] +" " + 坐标x[2]+" " + 坐标y[2];
textBox14.Text = JG;
}
4.3 高差求解
新建一个Windows 应用程序,命令为“高差求解”,按图5布置控件。双击“确定”,输入一下程序。
图5 高差求解示意图
编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
double D = Convert .ToDouble(textBox1.Text);
double a = Convert .ToDouble(textBox2.Text);
double i = Convert .ToDouble(textBox3.Text);
double v = Convert .ToDouble(textBox4.Text);
double h = D * Math .Sin(a) + (1 - 0.13) * D / 6371000.0 * D / 6371000.0 * Math .Cos(a) * Math .Cos(a) /
2.0 + i - v;
textBox5.Text = h.ToString();
}
4.4 计算方位角
4.4.1 实训内容
方位角的取值为0-360度。
4.4.2 实现步骤设计
新建一个Windows 应用程序,命名为“计算方位角”,按照如8布置控件。依次双击两个“确定”,输入以下程序:
图6 计算方位角
编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
double 后视边方位角 = Convert .ToDouble(textBox1.Text);
double 左角 = Convert .ToDouble(textBox2.Text);
double 方位角 = 后视边方位角 + 左角 + 180.0;
{
if (方位角 >= 360.0) 方位角 -= 360.0;
if (方位角
}
textBox3.Text = Convert .ToString(方位角);
}
4.5 角度转换
4.5.1 实训内容
将输入的角度转换为弧度或弧度转换为角度。
4.5.2 实现步骤设计
新建一个Windows 应用程序,命名为“角度转换”,按照如8布置控件。依次双击两个“确定”,输入以下程序:
图7 角度转换
编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
//try catch用来捕获异常
try
{
double jiao = double .Parse(textBox1.Text.Trim());//从TextBox1框中获得值
j_h jh = new j_h();//新 建一个j_h的类
textBox2.Text = jh.JIAO_HUDU(jiao).ToString();//使用jh.JIAO_HUDU方法,在textBox2框中显示
}
catch
{
MessageBox .Show(" 请输入数字" , " 错误" , MessageBoxButtons .OK, MessageBoxIcon .Error); }
}
4.6 计算坐标
建一个Windows 应用程序,命名为“坐标求解”,按照如7布置控件。双击“确定”,输入以下程序:
图8 计算坐标
编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
double 左角 = Convert .ToDouble(textBox3.Text);
double XA = Convert .ToDouble(textBox1.Text);
double YA = Convert .ToDouble(textBox2.Text);
double 已知方位角 = Convert .ToDouble(textBox4.Text);
double 水平距 = Convert .ToDouble(textBox5.Text);
double 方位角 = 已知方位角 + 左角 + Math .PI;
if (方位角 >= Math .PI * 2) 方位角 -= Math .PI;
if (方位角
XA=XA+水平距*Math .Cos(方位角);
YA = YA + 水平距 * Math .Sin(方位角);
textBox6.Text = XA.ToString();
textBox7.Text = YA.ToString();
}
五 调用程序
在编程过程有些程序经常能用到,如果每次都重新编写,不仅费时费力而且数据冗长,本软件调用的程序如下:
1.导线
class 导线
{
//将ddd.mmss 转为弧度
static public double DEG(double ang)
{
int fuhao = (int )(ang / Math .Abs(ang));
ang = Math .Abs(ang);
int d = (int )ang;
int m = ((int )(ang * 100)) - d * 100;
double s = ang * 10000 - m * 100 - d * 10000;
return ((d + m / 60.0 + s / 3600.0) * fuhao) / 180.0 * Math .PI;
}
//计算方位角, 返回弧度值
public static double 方位角(double x1, double y1, double x2, double y2)
{
double deltX = x2 - x1;
double deltY = y2 - y1;
double angle = Math .PI * 0.5;
if (Math .Abs(deltX) > 0.000000001)
{
angle = Math .tn2(deltY, deltX);
}
if (angle
{
angle += Math .PI;
}
if (deltY
{
angle += Math .PI;
return angle;
}
//计算坐标返回已知点到计算点的方位角
public static double 坐标double x0, double y0, double 左哩角, double 水平距离, double 已知方位角, out double x, out double y)
{
double 方位角 = 已知方位角 + 左哩角 + Math .PI;
//将方位角调獭整到0到2πD 之间
if (方位角 >= Math .PI * 2) 方位角 -= Math .PI * 2;
if (方位角
x = x0 + 水平距离 * Math .Cos(方位角);
y = y0 + 水平距离 * Math .Sin(方位角);
return 方位角;
}
//根据Y 后边的方位角与左角, 计算前进边的方位角
public static double 方位角(double 后视边方位角, double 左角)
{
double 方位角 = 后视边方位角 + 左角 + Math .PI;
//将方位角调整到0到2πD 之间
if (方位角 >= Math .PI * 2) 方位角 -= Math .PI * 2;
if (方位角
return 方位角;
}
}
2. 将度分秒转换为度
public class cejiao_jiao
{
public double cj_j(double jiao)
{
jiao = Math .AAbs(jiao);
int du = (int )(Math .Floor(jiao));
jiao = (jiao - du) * 100;
int fen = (int )(Math .Floor(jiao));
jiao = (jiao - fen) * 100;
int miao = (int )(Math .Floor(jiao));
jiao = du + fen / 60 + miao / 3600;
return jiao;
}
}
3. 将度分秒转换为秒数
public class cejiao_jiaomiao
{
public double cj_j(double jiao)
jiao = Math .AAbs(jiao);
int du = (int )(Math .Floor(jiao));
jiao = (jiao - du) * 100;
int fen = (int )(Math .Floor(jiao));
jiao = (jiao - fen) * 100;
int miao = (int )(Math .Floor(jiao));
jiao = du * 3600 + fen * 60 + miao;
return jiao;
}
}
4. 将弧度转化为度分秒
public class h_j
{
public double HUDU_to_JIAODU(double dd)
{
double a = dd;
a = a * 57.[1**********]23;
int d = (int )System. Math .Floor(a);
a = a - d;
a = a * 60;
int f = (int )System. Math .Floor(a);
a = a - f;
a = a * 60;
if (a + 0.0001 > 60) { a = 0; f = f + 1; }
if (f >= 60) { f = 0; d = d + 1; }
a = d + f / 100.0 + a / 10000.0;
return a;
}
}
5.将角度转换为弧度
public class j_h
{
public double JIAO_HUDU(double jiao)
{
int d = (int )(Math .Floor(jiao));
jiao = jiao - d;
int f = (int )(Math .Floor(jiao * 100.0));
jiao = jiao * 100 - f;
double m = jiao * 100.0;
jiao = d * 3600.0 + f * 60.0 + m;
double hudu = jiao / 206264.[1**********]3;
return hudu;
}
}
6. 给定俩坐标,坐标正
public class fwj
{
public double jisuan(double x1, double y1, double x2, double y2)
{
double cx, cy, cc;
cx = x2 - x1;
cy = y2 - y1;
if (cx == 0 && cy == 0)
return -1;
else
{
if (cx == 0)
{
if (cy > 0)
cc = Math .PI / 2.0;
else
cc = Math .PI * 1.5;
}
else
cc = Math .Atan2(cy, cx);
if (cy
cc = cc + Math .PI;
return cc;
}
}
}
y 算方位角, 返回的是以弧度为单位的角度
六 实验心得
1、学习编程语言一方面需掌握一下处理基本事件的方法,如如何获得输入的字符串等;另一方面应用的软件有清楚的认识,并且还要对编写程序所需的方法和事件要掌握牢固。
2、课程设计是培养我们学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程。通过附合导线平差程序设计实训,使我们更加深入的理解课本中的知识,同时加强了我们个人的实践操作能力,并且培养了我们独立思考能力和程序逻辑创造能力。
3、应该及时掌握课本中的知识点,在课下多编写程序,将知识与实践结合起来。遇到不懂或者难以解决的问题时,及时与老师和同学交流。
4、在课外时间里要阅读一些知识,多做一些项目,不能只依靠书本知识,书本知识是远远不够的。