窗体设计

代码实现

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Collections;namespace 方位角计算器
{public partial class 方位角计算器 : Form{private string strline;private string x;public 方位角计算器(){InitializeComponent();}//新建公共字段public string allstring = "";//新建存放数据的类Point3dpublic class Point3d{  //新建字段用于储存坐标数据public string name;public double x, y, z;//建立换算方位角方法public static double Angle(Point3d p1, Point3d p2)  //public static 表示公共的静态方法,可以通过类名调用{double x3 = p2.x - p1.x;  //表示两点之间x的坐标差double y3 = p2.y - p1.y;  //表示两点之间y的坐标差if (x3 > 0 && y3 >= 0)//x、y差都大于0,方位角等于atanreturn Math.Atan(Math.Abs(y3 / x3));else if (x3 < 0 && y3 >= 0) //x差小于0,y差大于或等于0,方位角等于PI减atanreturn Math.PI - Math.Atan(Math.Abs(y3 / x3));else if (x3 > 0 && y3 < 0) //x差大于0,y差小于0,方位角等于2PI减atanreturn 2 * Math.PI - Math.Atan(Math.Abs(y3 / x3));else if (x3 < 0 && y3 < 0)//x、y差都小于0,方位角等于PI加atanreturn Math.PI + Math.Atan(Math.Abs(y3 / x3));elsereturn 2 * Math.PI - Math.Atan(Math.Abs(y3 / x3));}}//打开文件并读取到富文本框private void button1_Click(object sender, EventArgs e){//打开选择文件对话框OpenFileDialog openFileDialog1 = new OpenFileDialog();  //动态初始化//可以选择打开DAT文件或者txt文件openFileDialog1.Filter = "DAT文件 (*.DAT)|*.DAT|(*.txt)|*.*";openFileDialog1.FileName = "";if (openFileDialog1.ShowDialog() == DialogResult.OK){//将文件路径读取显示到textBox1中textBox1.Text = openFileDialog1.FileName;//使用StreamReader类来读取文件FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);//FileStream 类,为文件提供 Stream(数据流),既支持同步读写操作,也支持异步读写操作。//FileMode.open:指定操作系统应打开现有文件// FileAccess.Read:对文件进行读取StreamReader sr = new StreamReader(fs, Encoding.Default);//StreamReader 类用于从流中读取字符串。                // 从数据流中读取每一行,直到文件的最后一行sr.BaseStream.Seek(0, SeekOrigin.Begin);//(0, SeekOrigin.Begin)重置一个流到开始               this.richTextBox1.Text = "";string strLine = sr.ReadLine();//分割字符串,将数据显示到富文本框while (strLine != null){//用逗号分割字符串1string[] b = strLine.Split(',');//将点的编号单独一行,点的x、y、z坐标间用逗号分隔,在富文本框中显示数据this.richTextBox1.Text += b[0] + "\r " + b[3] + "," + b[2] + "," + b[4] + "\r";strLine = sr.ReadLine();}}}//将结果另存为private void button2_Click(object sender, EventArgs e){SaveFileDialog save = new SaveFileDialog();save.InitialDirectory = "C:\\";  //将C盘设为默认路径save.Filter = "(*.txt)|*.*";    //设置保存文件格式为txt格式save.RestoreDirectory = true;//RestoreDirectory是控制当前程序中的System.Environment.CurrentDirectory的,也就是,当属性设置为true时,System.Environment.CurrentDirectory永远是程序从中启动的文件夹目录;而设置为false是,则每次使用OpenFileDialog选择完文件后,System.Environment.CurrentDirectory会变成最后一次打开文件的 目录if (save.ShowDialog() == DialogResult.OK){string str = save.FileName;//向指定的文件中追加内容,如果文件不存在,则创建文件StreamWriter sw = File.AppendText(str);sw.Write(this.richTextBox2.Text);sw.Flush();sw.Close();}}//清楚已计算的方位角private void button4_Click(object sender, EventArgs e){richTextBox1.Text = "";}//清楚已计算的方位角private void button5_Click(object sender, EventArgs e){richTextBox2.Text = "";allstring = "";}//计算方位角private void button3_Click(object sender, EventArgs e){string mystr = richTextBox1.Text;  //从富文本框读取数据mystr = mystr.Replace("\n", ",");  //遇到逗号换行,即一个字符串一行string[] ss = mystr.Split(',');  //用逗号分割字符串int count = 0;  //引入变量count用于字符串计数for (int i = 0; i < mystr.Length; i++)//该循环用于获取字符串数{if (mystr[i] == ',')count++;}Point3d[] pts = new Point3d[(count + 1) / 4];  //最后一个字符串后没有逗号,所以count要+1for (int i = 0; i < (count + 1) / 4; i++)  //读取x、y、z{pts[i] = new Point3d();pts[i].name = string.Format(ss[4 * (i + 1) - 4]);pts[i].x = double.Parse(ss[4 * (i + 1) - 3]);pts[i].y = double.Parse(ss[4 * (i + 1) - 2]);pts[i].z = double.Parse(ss[4 * (i + 1) - 1]);}for (int i = 0; i < pts.Length - 1; i++){string name1 = pts[i].name;string name2 = pts[i + 1].name;string x1 = string.Format("{0:f3}", pts[i].x);//f为浮点型输出数据精度为三位小数string x2 = string.Format("{0:f3}", pts[i + 1].x);string y1 = string.Format("{0:f3}", pts[i].y);string y2 = string.Format("{0:f3}", pts[i + 1].y);string z1 = string.Format("{0:f3}", pts[i].z);string z2 = string.Format("{0:f3}", pts[i + 1].z);double rad = Point3d.Angle(pts[i], pts[i+1]);double single = (180 / Math.PI) * rad;//计算方位角弧度double singles = 3600 * single;string single1 = string.Format("{0}", Math.Floor(singles / 3600));//Math.Floor 返回小于等于x的最大整数string single2 = string.Format("{0}", Math.Floor((singles - ((int)single) * 3600) / 60));string single3 = string.Format("{0}", Math.Floor(singles - ((int)single) * 3600 - (Math.Floor((singles - ((int)single) * 3600) / 60)) * 60));string allpoints = string.Format("{0},{1},{2},{3}\r{4},{5},{6},{7}\r", name1, x1, y1, z1, name2, x2, y2, z2);string chinse = string.Format("点{1}至点{0}的坐标方位角为{2}°{3}′{4}″\r", i + 2, i + 1, single1, single2, single3);allstring = allstring + allpoints + chinse+"\r";}richTextBox2.Text = allstring;}//将读取的原始数据另存为private void button6_Click(object sender, EventArgs e){SaveFileDialog save = new SaveFileDialog();save.InitialDirectory = "C:\\";save.Filter = "(*.txt)|*.*";    //打开text文件save.RestoreDirectory = true;          if (save.ShowDialog() == DialogResult.OK){string str = save.FileName;//向指定的文件中追加内容,如果文件不存在,则创建文件StreamWriter sw = File.AppendText(str);sw.Write(this.richTextBox1.Text);sw.Flush();sw.Close();}}}
}

效果展示

原始数据格式如下:

运行程序:

测试数据、程序下载:https://download.csdn.net/download/HAIIAKU/20678461?spm=1001.2014.3001.5503

c#实现批量坐标方位角计算相关推荐

  1. 定量库存控制模型_经济订货批量不是最终的订货批量,计算订货批量的最高库存定量法...

    上个星期,在我的供应链管理分享与交流群里,讨论订货批量时,有位朋友提到,采用经济订货批量订货时,按经济订货批量公式(详见下图,EOQ等于2乘以年总需求量乘以单次订货费用除以单位库存持有成本再开根号), ...

  2. 坐标方位角计算通用公式

    坐标方位角计算通用公式:http://www.docin.com/p-465612644.html 坐标方位角计算通用公式及编程方法:http://www.docin.com/p-875488803. ...

  3. QGIS中进行批量坡度计算

    QGIS中进行批量坡度计算 1. 坡度计算中的Z因子(垂直单位与水平单位的比值) 2. 坡度计算步骤 1. 坡度计算中的Z因子(垂直单位与水平单位的比值) z 因子是一个转换因子,当输入表面的垂直坐标 ...

  4. cfd post session, 自动, 批量 , 后处理计算结果,

    用法:参考链接:http://blog.sciencenet.cn/blog-531760-1009318.html 基本思路就是建立session,然后start,录制屏幕操作,stop保存sess ...

  5. 批量计算多个点到一个点的距离

    批量经纬度计算到另一个经纬度的距离 """地理中常用的数学计算,把地球简化成了一个标准球形,如果想要推广到任意星球可以改成类的写法,然后修改半径即可 "&quo ...

  6. 道路缓冲区的批量景观格局指数计算

    数据格式 道路缓冲区分别为50m,100m,200m,500m,1000m,3000m,5000m,10000m 初尝试 最开始使用Moving window,尝试了多个窗口半径,最后选定500m方形 ...

  7. 流计算与批量计算的对比

    相比于批量大数据计算,流(式)计算整体上还属于较为新颖的计算概念,下面我们从用户/产品层面来理解下两类计算方式的区别. 批量计算 目前绝大部分传统数据计算和数据分析服务均是基于批量数据处理模型: 使用 ...

  8. TensorFlow基础11-(小批量梯度下降法和梯度下降法的优化)

    记录TensorFlow听课笔记 文章目录 记录TensorFlow听课笔记 一,梯度下降法:求解函数极值问题 二,梯度下降法的优化 多层神经网络--非线性分类问题 损失函数不是凸函数,很难计算解析解 ...

  9. 【Pytorch神经网络理论篇】 16 过拟合问题的优化技巧(三):批量归一化

    1 批量归一化理论 1.1 批量归一化原理 1.2 批量归一化定义 将每一层运算出来的数据归一化成均值为0.方差为1的标准高斯分布.这样就会在保留样本的分布特征,又消除了层与层间的分布差异. 在实际应 ...

最新文章

  1. 10.17 配置IP,网络问题排查
  2. Javascript跨域访问解决方案
  3. springboot 手动提交事务_分布式事务开局第一篇,从数据库事务隔离级别说起
  4. 大数据之-Hadoop3.x_Yarn_生产环境核心参数配置案例---大数据之hadoop3.x工作笔记0150
  5. 返回固定数据的web服务器
  6. rabbitmq之SimpleMessageListenerContainer监听容器
  7. 200724 EXCEL
  8. 惠普服务器关机自动重启,HP笔记本关机自动重启的解决办法
  9. bongo cat mver手机版|键盘猫手机版
  10. MOOS-ivp 实验十四(1)编写行为使命
  11. Android如何让Fragment加载到Activity中
  12. --go_out: protoc-gen-go: plugins are not supported问题处理
  13. FastDeRain解读
  14. QT 虚拟键盘使用问题
  15. UIUC简介 -- 写给今年得到UIUC Offer并在犹豫中的同学
  16. win7 安装ox oracle,windows 2012 R2 core安装0x800f0906 -mgmt-infra出现0x800f0906
  17. Python作为移动客户端后台服务器
  18. 一起来做NES开发(1)
  19. python决策树逻辑回归_决策树,逻辑回归,PCA-算法面试题
  20. 李宏毅nlp学习笔记12:DST(Dialogue State Tracking)

热门文章

  1. firefoxos :add ipdl
  2. 一份完整的app产品运营推广方案,app推广运营的方法(二
  3. 温莎大学的计算机科学,温莎大学荣誉计算机科学专业本科.pdf
  4. 数据库中update怎么用事例_Oracle的update语句set里使用子查询的例子解释
  5. 外文翻译原文附在后面_本周作业是翻译外文文献摘要,电子版,回复到作业中,提交附件,格式按照外文文献翻译模版,先中文再附上英文原文,只需要摘要_学小易找答案...
  6. 什么是云数据库RDS?
  7. 全球及中国隐形眼镜护理液行业消费规模及投资竞争力分析报告2021-2027年
  8. matlab计算胎心率,基于盲分离的胎心音心率检测算法与实现
  9. cocos2dx 特效 3D特效
  10. pikachu漏洞练习平台XSS