C#高斯换带计算报告和代码(共33页)_第1页
C#高斯换带计算报告和代码(共33页)_第2页
C#高斯换带计算报告和代码(共33页)_第3页
C#高斯换带计算报告和代码(共33页)_第4页
C#高斯换带计算报告和代码(共33页)_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上设 计 说 明 书设计题目: 高斯投影换带计算 姓 名: 指导教师:专 业: 测绘工程 2013 年 7月 2 日专心-专注-专业学号姓名课程设计具体工作内容 个人得分208程序总体设计与分析207C#界面开发210程序编程和调试215制作答辨PPT程序设计与测试(0.7) 小组得分界面设计友好,用户数据输入及操作自由度高,有测试数据;20数据结构设计合理,代码模块化,通用性强;20设计思想清晰,代码编写采取逐层递进格式,注释可读性高;20程序总体运行通过,各部分功能实现程度高,注重容错处理40设计说明书部分 (0.3)设计报告说明书内容全面,层次清楚、完整程度高30

2、设计思路清析、对设计思想、完成情况等重要内容说明表达清晰,总体分析、详细设计、界面设计各部分内容表述清楚50数据结构和算法合理,知识点明晰20教师评语成 绩 评 分 表1 设计内容1.1 设计意义高斯投影虽然保证了角度投影前后没有变形,但其长度变形仍然存在,并且距离中央子午线愈远,长度变形愈大。为了限制高斯投影的长度变形,将椭球面按一定经度的子午线划分成不同的投影带,把投影范围限制在中央子午线东西两侧一定的狭长地带内分别进行投影。由于中央子午线的经度不同,使得椭球面上统一的大地坐标系,分割成为各带独立的平面坐标系。为了得到统一的坐标系,必须进行换带计算。在实际测量工作中,我们常常遇到坐标不统一

3、的情况,为了计算简便,把不同形式的坐标转换成我们所需的坐标,为我们的工程服务,经常需要进行高斯投影正算、反算、坐标换带和子午线收敛角的计算工作。为此,我们编写了这一程序设计,希望能使以后的转换工作更加简便。本软件主要应用相关的转换公式,采用C#编程可随时随地实现任何参考椭球体下高斯坐标转换与大地坐标之间的正反算和换带计算,达到高斯平面坐标转换的目的。本文所编程序的特点是,操作简单输出简捷、结果完整,不需要另加辅助内容。本设计主要是利用C#作为前端开发工具进行应用程序开发。1.2 基础理论正算是指:由大地坐标(L,B)求得高斯平面坐标(x,y)的过程。反算是指:由高斯平面坐标(x,y)求得大地坐

4、标(L,B)的过程。正算:高斯投影必须满足的三个条件:(1),中央子午线投影后为直线。(2),中央子午线投影后长度不变。(3) ,投影具有正性性质,即正性投影条件。由第一个条件可知,中央子午线东西两侧的投影必然对称于中央子午线。设在托球面上有P1 ,P2,且对称于中央子午线。其大地坐标为(l,B),(-l,B)则投影后的平面坐标一定为P1·(x,y),P2·(x,-y).由第二个条件可知,位于中央子午线上的点,投影后的纵坐标x应该等于投影前从赤道量至该点的子午弧长。相应计算公式:x=.4969B''''-a0-0.5+(a4+a6l2)l2l

5、2NsinBcosBy=1+(a3+a5l2)l2lNcosB(克氏椭球)其中:l=L-L0'''' N=.902-21562.267-108.973-0.612cos2Bcos2Bcos2B a0=32140.404-135.3302-0.7092-0.0040cos2Bcos2Bcos2B a4=0.25+0.00252cos2Bcos2B-0.04166 a6=(0.166cos2B-0.084)cos2B a3=0.+0.cos2Bcos2B-0. a5=0.0083-0.1667-0.1968+0.0040cos2Bcos2Bcos2B(IAG椭球)反

6、算:在高斯投影坐标反算时,原面是高斯平面,投影面是椭球面,则有如下的投影方程:则其的三个条件:(1),x坐标轴投影成中央子午线,是投影的对称轴;(2),x轴上的长度投影保持不变;(3),正性投影条件。相应计算公式:B=Bf-1-b4-0.12Z2Z2Z2b2''l=1-b3-b5Z2Z2Z2''L=L0+l(克氏椭球)其中:Bf=+2350+22cos2cos2cos210-10sincos''=x.4969''Z=y/(NfcosBf)Nf=.902-21562.267-108.973-0.612cos2Bfcos2Bfcos2

7、Bfb2=0.5+0.cos2BfsinBfcosBfb3=0.-(0.-0.cos2Bf)cos2Bfb4=0.25+(0.16161+0.00562cos2Bf)cos2Bfb5=0.2-(0.16667-0.0088cos2Bf)cos2Bf(克氏椭球)1.3 数据流程图 进入系统选择带转换和椭球系统输入已知数据和中央子午线任意带输入已知数据3-3 3-6带重置计算2-1 数据流程图1.4 详细设计主要研究内容是利用c#软件把高斯换带计算从手算实现电算的一个过程。主要分为四个界面:(1)欢迎界面主要结构过程名功能与作用进入功能label3_Click 欢迎界面进入主页面(2)主程序界面主

8、要结构 过程名功能与作用读入函数public void ReadData() 读入数据反算函数public void FS() 高斯反算正算函数public void ZS() 高斯正算弧度转角度函数redian_a(double alfa) 弧度转角度角度转弧度函数angle_r(double alfa) 角度转弧度输出函数public void WriteData() 输出数据计算button1_Click 进行换带计算重置button2_Click_1 恢复原状态改变属性radioButton3_CheckedChanged点击3-3换带时改变textbox的属性改变属性radioBut

9、ton4_CheckedChanged点击3-3换带时改变textbox的属性改变属性radioButton5_CheckedChanged点击3-3换带时改变textbox的属性带号与中央子午线转换 带号与中央子午线转换ToolStripMenuItem_Click 进入带号与中央子午线转换 窗体弧度角度转换 弧度角度转换ToolStripMenuItem_Click 进入弧度角度转换窗体关闭Form1_FormClosing 关闭整个程序(3)带号与中央子午线转换界面主要结构过程名功能与作用求中央子午线button1_Click由带号求中央子午线求带号button2_Click中央子午线由

10、求带号关闭Form3_FormClosing关闭该窗体(4) 弧度角度转换界面主要结构过程名功能与作用角转弧button1_Click角度转弧度弧转角button2_Click弧度转角度关闭Form3_FormClosing关闭该窗体2 功能实现2.1 关键技术和难点/ <summary> / 反算函数 / </summary> public void FS() / 克氏椭球反算 if (radioButton1.Checked = true) = x / .4969; Bf = + ( + ( + (2350 + 22 * Math.Pow (Math.Cos() ,

11、2) * Math.Pow (Math.Cos() ,2) * Math.Pow (Math.Cos() ,2) * Math .Pow (10,-10) * Math.Sin() * Math.Cos(); Nf = .902 - (21562.267 - (108.973 - 0.612 * Math.Pow(Math.Cos(Bf), 2) * Math.Pow(Math.Cos(Bf), 2) * Math.Pow(Math.Cos(Bf), 2); Z = y / (Nf * Math.Cos(Bf); b2 = (0.5 + 0. * Math.Pow(Math.Cos(Bf),

12、2) * Math.Sin(Bf) * Math.Cos(Bf); b3 = 0. - (0. - 0. * Math.Pow(Math.Cos(Bf), 2) * Math.Pow(Math.Cos(Bf), 2); b4 = 0.25 + (0.16161 + 0.00562 * Math.Pow(Math.Cos(Bf), 2) * Math.Pow(Math.Cos(Bf), 2); b5 = 0.2 - (0.1667 - 0.0088 * Math.Pow(Math.Cos(Bf), 2) * Math.Pow(Math.Cos(Bf), 2); B = Bf - (1 - (b4

13、 - 0.12 * Z * Z) * Z * Z) * Z * Z * b2; B1 = redian_a(B); l = (1 - (b3 - b5 * Z * Z) * Z * Z) * Z; L = L01 + l; L1 = redian_a(L); / IAG椭球反算 else = x / .1328; Bf = + ( + ( + (2383 + 22 * Math.Pow(Math.Cos(), 2) * Math.Pow(Math.Cos(), 2) * Math.Pow(Math.Cos(), 2) * Math.Pow(10, -10) * Math.Sin() * Mat

14、h.Cos(); Nf = .652 - (21565.045 - (108.996 - 0.603 * Math.Pow(Math.Cos(Bf), 2) * Math.Pow(Math.Cos(Bf), 2) * Math.Pow(Math.Cos(Bf), 2); Z = y / (Nf * Math.Cos(Bf); b2 = (0.5 + 0. * Math.Pow(Math.Cos(Bf), 2) * Math.Sin(Bf) * Math.Cos(Bf); b3 = 0. - (0. - 0. * Math.Pow(Math.Cos(Bf), 2) * Math.Pow(Math

15、.Cos(Bf), 2); b4 = 0.25 + (0. + 0. * Math.Pow(Math.Cos(Bf), 2) * Math.Pow(Math.Cos(Bf), 2); b5 = 0.2 - (0.16667 - 0.00878 * Math.Pow(Math.Cos(Bf), 2) * Math.Pow(Math.Cos(Bf), 2); B = Bf - (1 - (b4 - 0.147 * Z * Z) * Z * Z) * Z * Z * b2; B1 = redian_a(B); l = (1 - (b3 - b5 * Z * Z) * Z * Z) * Z; L =

16、(L01 + l); L1 = redian_a(L); / 克氏椭球 if (radioButton1.Checked = true) / <summary> / 3-3正算函数 / </summary> if (radioButton3.Checked = true) if (MessageBox.Show("您确定向右换带吗?", "确定向右换带吗?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes) l1 = l - 3 * Mat

17、h.PI / 180; else l1 = l + 3 * Math.PI / 180; / <summary> / 3-6正算函数 / </summary> else if (radioButton4.Checked = true) if (MessageBox.Show("您确定向右换带吗?", "确定向右换带吗?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes) l1 = l - 6 * Math.PI / 180; else l1

18、 = l + 3 * Math.PI / 180; / <summary> / 任意正算函数 / </summary> else if (radioButton5.Checked = true) l1 = L - L02; N = .902 - (21562.267 - (108.973 - 0.612 * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B); a0 = 32140.404 - (135.3302 - (0.7092 - 0.004 * Mat

19、h.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B); a4 = (0.25 + 0.00252 * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) - 0.04166; a6 = (0.166 * Math.Cos(B) * Math.Cos(B) - 0.084) * Math.Cos(B) * Math.Cos(B); a3 = (0. + 0. * Math.Cos(B) * Math.Cos(B) * Math.Cos(B

20、) * Math.Cos(B) - 0.; a5 = 0.0083 - (0.1667 - (0.1968 + 0.004 * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B); X = .4969 * B - (a0 - (0.5 + (a4 + a6 * l1 * l1) * l1 * l1) * l1 * l1 * N) * Math.Sin(B) * Math.Cos(B); Y = (1 + (a3 + a5 * l1 * l1) * l1 * l1) * l1 * N

21、* Math.Cos(B); / 克氏椭球 else / <summary> / 3-3正算函数 / </summary> if (radioButton3.Checked = true) if (MessageBox.Show("您确定向右换带吗?", "确定向右换带吗?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes) l1 = l - 3 * Math.PI / 180; else l1 = l + 3 * Math.PI / 18

22、0; / <summary> / 3-6正算函数 / </summary> else if (radioButton4.Checked = true) if (MessageBox.Show("您确定向右换带吗?", "确定向右换带吗?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes) l1 = l - 6 * Math.PI / 180; else l1 = l + 3 * Math.PI / 180; / <summary>

23、; / 任意正算函数 / </summary> else if (radioButton5.Checked = true) l1 = L - L02; N = .652 - (21565.045 - (108.996 - 0.603 * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B); a0 = 32144.5189 - (135.3646 - (0.7034 - 0.0041 * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * M

24、ath.Cos(B) * Math.Cos(B) * Math.Cos(B); a4 = (0.25 + 0.00253 * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) - 0.04167; a6 = (0.167 * Math.Cos(B) * Math.Cos(B) - 0.084) * Math.Cos(B) * Math.Cos(B); a3 = (0. + 0. * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) - 0.; a5 = 0.00878 - (0.

25、1702 - 0.20382 * Math.Cos(B) * Math.Cos(B) * Math.Cos(B) * Math.Cos(B); X = .1328 * B - (a0 - (0.5 + (a4 + a6 * l1 * l1) * l1 * l1) * l1 * l1 * N) * Math.Sin(B) * Math.Cos(B); Y = (1 + (a3 + a5 * l1 * l1) * l1 * l1) * l1 * N * Math.Cos(B); / <summary> / 角度转化为弧度 / </summary> / <param n

26、ame="alfa"></param> / <returns></returns> public static double angle_r(double alfa) double alfa1, alfa2; alfa1 = Math.Floor(alfa) + Math.Floor(alfa - Math.Floor(alfa) * 100) / 60d; alfa2 = (alfa * 100 - Math.Floor(alfa * 100) / 36d; alfa1 += alfa2; return (alfa1 / 180

27、* Math.PI); / <summary> / 弧度转化为角度 / </summary> / <param name="alfa"></param> / <returns></returns> public static double redian_a(double alfa) double alfa1, alfa2; alfa = alfa * 180 / Math.PI; alfa1 = Math.Floor(alfa) + Math.Floor(alfa - Math.Floor(alfa)

28、* 60) / 100d; alfa2 = (alfa * 60 - Math.Floor(alfa * 60) * 0.006; alfa1 += alfa2; return (alfa1); 带号与中央子午线转换窗体代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace 高斯

29、换带 public partial class Form3 : Form int N; double L; public Form3() InitializeComponent(); private void button1_Click(object sender, EventArgs e) N = int.Parse(textBox1.Text); if (radioButton1.Checked = true) L = 3 * N; else L = 6 * N-3; textBox2.Text = L.ToString(); private void button2_Click(obje

30、ct sender, EventArgs e) label2.Text = "经度L=" L = double.Parse(textBox2.Text); if (radioButton1.Checked = true) N =(int) (L+1.5)/3 ; else N = (int)L / 6; textBox1.Text = N.ToString(); private void Form3_FormClosing(object sender, FormClosingEventArgs e) if (MessageBox.Show("您确定要退出吗?&qu

31、ot;, "确定要退出吗?", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) = DialogResult.Cancel) e.Cancel = true; 角度弧度转换窗体代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Fo

32、rms;namespace 高斯换带 public partial class Form4 : Form double du, fen, miao,hudu,jiao; public Form4() InitializeComponent(); private void button1_Click(object sender, EventArgs e) hudu = double.Parse(textBox4.Text); jiao =hudu* 180 / Math.PI; du = Math.Floor(jiao); fen = Math.Floor(jiao - du) * 60); m

33、iao = Math.Floor(jiao-du-fen /60)*3600); textBox1.Text = du.ToString(); textBox2.Text = fen.ToString(); textBox3.Text = miao.ToString(); private void button2_Click(object sender, EventArgs e) du = double.Parse(textBox1.Text); fen = double.Parse(textBox2.Text); miao = double.Parse(textBox3.Text); jia

34、o = du + fen / 60 + miao / 3600; hudu = jiao / 180 * Math.PI; textBox4.Text = hudu.ToString("0."); private void Form4_Load(object sender, EventArgs e) private void Form4_FormClosing(object sender, FormClosingEventArgs e) if (MessageBox.Show("您确定要退出吗?", "确定要退出吗?", Messag

35、eBoxButtons.OKCancel, MessageBoxIcon.Warning) = DialogResult.Cancel) e.Cancel = true; 2.2 程序使用说明书首先,打开软件后,出现进入系统界面。图2-2进入系统界面然后点击进入系统,出现如图界面,系统默认为任意带,克氏椭球。图2-3 主界面请选择带转换和椭球,选好后输入数据,如果为任意带时需要输入中央子午线,输入完成后可以点击计算。如果选择的为3-3换带/3-6换带,点击计算后会出现如下对话框点击是则向右换带,点否则想左换带图2-4 换带界面点击重置后,所以textbox全部清空;可重新输入再次计算图2-5

36、重置点击菜单中的“带号与中央子午线转换”,出现如下窗体可以选择三度带和六度带,然后输入数据点击 “求中央子午线” / “求带号”来求该带号下的中央子午线,或者求该经度下的带号图2-6 带号与中央子午线转换点击菜单中的“弧度角转换”,出现如下窗体;输入数据;点击“角转弧”/ “弧转角”。图2-7 角转弧界面图2-8弧转角转换点击关闭时,会提示是否退出,如下图点击“确定”的话则退出系统;点击“取消”则返回系统。图2-9 退出界面图2-10 确定退出3.总结1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分

37、析问题、解决问题的能力。 3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。 4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。 根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点: 1、认真上好专业实验课,多在实践中锻炼自己。 2、写程序的过程中要考虑周到,严密。 3、在做设计的时候要有信心,有耐心,切勿浮躁。 4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。 5、在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。 代码:/欢迎界面using Sys

38、tem;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace 高斯换带 public partial class Form2 : Form public Form2() InitializeComponent(); private void label3_Click(object sender, Event

39、Args e) Form1 f1 = new Form1(); f1.Show(); this.Hide(); /主窗体代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace 高斯换带 public partial class Form1 : Form / <summary

40、> / 定义变量 / </summary> double x, y, X, Y; /原带平面坐标x,y,新带平面坐标X,Y double B, L01, L02, L, l, L1; /纬度,原带中央子午线,新带中央子午线,经差 double , Bf, Z, Nf, b2, b3, b4, b5, B1; /反算中的变量 double N, a0, a4, a6, a3, a5, l1; /正算中的变量 / <summary> / 读入函数 / </summary> public void ReadData() if (radioButton3.Ch

41、ecked = true | radioButton4.Checked = true) if (textBox1.Text = "" | textBox2.Text = "") MessageBox.Show("请输入数据x值或y值!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); else x = double.Parse(textBox1.Text); y = double.Parse(textBox2.Text); else if (textBox

42、1.Text = "" | textBox2.Text = "" | textBox3.Text = "" | textBox4.Text = "") MessageBox.Show("请输入数据x值或y值或着中央子午线!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); else x = double.Parse(textBox1.Text); y = double.Parse(textBox2.Text); L01 = angle_r(double.Parse(textBox3.Text); /读入的角度转换为弧度 L02 = angle_r(double.Parse(textBox4.Text); /读入的角度转换为弧度 / <summary> / 反算函数 / </summary> public void FS() / 克氏椭球反算 if (radioButton1.Checked = true) = x / .4969; Bf = + ( + ( + (2350 + 22 * Math.Pow (Math.Cos() ,2) * Math.Pow (Ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论