测量程序设计报告

环境与测绘工程学院

课程论文

学年学期: 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、在课外时间里要阅读一些知识,多做一些项目,不能只依靠书本知识,书本知识是远远不够的。


相关内容

  • 2013年全国电子设计竞赛预测题目
  • 2013年全国电子设计竞赛赛题预测(权威版) 承载平台平衡调整系统 一. 任务 设计并制作一个承载平台平衡调整系统.该承载平台由多条腿支撑,并能承受一定重量的载重.通过调整支撑腿的伸缩来调整平台的水平和倾斜.平台为长方形,宽带尺寸不小于25cm,长度比例不小于1.4. 二. 要求 1. 基本要求 a ...

  • 市政竣工测量作业技术指导书
  • 深圳市政建设工程竣工 测绘作业技术指导书 (2012版) 二〇一一年十一月 目 录 第一部分 作业技术指导书 ......................................................................................... 1 1概述 ...

  • 三坐标测量仪项目可行性研究报告
  • 三坐标测量仪项目可行性研究报告 核心提示:三坐标测量仪项目投资环境分析,三坐标测量仪项目背景和发展概况,三坐标测量仪项目建设的必要性,三坐标测量仪行业竞争格局分析,三坐标测量仪行业财务指标分析参考,三坐标测量仪行业市场分析与建设规模,三坐标测量仪项目建设条件与选址方案,三坐标测量仪项目不确定性及风险 ...

  • 测量不确定度评定程序
  • 测量不确定度评定程序 1 目的 满足顾客与认可准则的要求,对检测结果的可信程度进行评价. 2 范围 适用于对检测中心检测结果进行测量不确定度的评定和验证. 3 职责 3.1 检测中心主任 3.1.1 负责检测中心检测结果测量不确定度报告的批准: 3.1.2 负责检测中心测量不确定度评定小组成员的批准 ...

  • 测量员岗位责任制
  • 测量员岗位责任书 一.岗位职责 1. 贯彻执行施工测量规程.规范.标准,负责项目范围内的交接桩和施工复测.放线.施工过程控制测量.监控量测及分析数据指导施工.竣工测量工作. 2. 负责项目部测量仪器的管理工作,建立测量仪器台账.维修保养台账.(应包含合格证.设备使用说明书.配件手册.检定记录.鉴定证 ...

  • 程序文件测量不确定度评定与表示程序
  • 1.目的 为了对本公司测量结果的准确性合理评价,以确保检测结果准确.可靠,因 此建立本程序予以控制. 2.范围 适用于本公司进行检测中所有检测结果的不确定度评价. 3.引用文件 3.1CNAS-CL01<检测和校准实验室能力认可准则> 3.2 GB/T27025-2010<检测和校 ...

  • 物理化学实验心得
  • 物理化学实验心得 一.物理化学实验的目的与要求 (一) 物理化学实验教学的目的 物理化学实验是化学实验科学的重要分支,也是研究化学基本理论和问题的重要手段和方法.物理化学实验的特点是利用物理方法研究化学系统变化规律,通过实验的手段,研究物质的物理化学性质及这些性质与化学反应之间的某些重要规律.物理化 ...

  • 测量管理办法
  • 蒙华铁路**标一工区测量管理办法 第一章 总则 第一条:施工测量是工程建设的重要技术环节,是工程施工技术的基础,是保证工程质量的根本.为明确各级测量技术人员的职责,保证测量成果的质量,特制定本办法. 第二条:铁路工程测量要认真执行国家的有关法律.规范.行业的标准.强制性标准和行业的标准.规范.暂行规 ...

  • 水电安装工程材料进场验收标准大全
  • 工程材料验收标准 (安装工程) 目 录 第一部分 通用类 ................................................................................................................ 3 第一章 管材 ...

  • 八年级物理上实验报告单
  • 新康府学校 八年级物理实验报告册 学校 班级 姓名 目 录 一.用刻度尺测量长度二.用停表测量时间 三.测量同学们跑步的平均速度 四.探究光反射时的规律五.探究平面镜成像的特点六.探究光折射时的规律七.探究凸透镜成像的规律八.用温度计测量水的温度十.探究水沸腾时温度变化的特点十一.用天平测固体和液体 ...