当前位置: 首页 > news >正文

闭合附和导线近似平差 ∈ C# 编程笔记

【日志】
2020/6/26
今天想用一下之前写的导线平差计算的小程序代码,打开来一看,
在这里插入图片描述
强迫症令我得又重新搞一遍,好处是可以复习一下,但是真累啊!!
2020/6/27 搞了两天,终于搞完了,我想说,改程序真的不比写程序轻松。在尝试改程序失败后,我霸气地把原程序都删了,重新干,破而后立!

一、原理

我去啊,一时半会还真想不起来,怎么来编程的!还是从一道例题(来源于之前的课件)开始吧!
题目描述如下:
在这里插入图片描述
解答过程如下:
在这里插入图片描述
原理就看这个例子就好了。记住一句话:角均分,坐标按距离分,角限差40根n。闭合可转附和!

二、源码

        /*此函数用近似平差计算导线-通法
         * 输入:dx1 dx2 两个定向角
         *       yz1 yz2 两个已知点
         *       gpt 测站数组
         * 输出:Gpt 得出坐标的测站数组
         */
        public GPoint[] DXJS(Angle dx1, Angle dx2, Point yz1, Point yz2, GPoint[] gpt)
        {
            int n = gpt.Length;
            GPoint[] Gpt = new GPoint[n+1];
            for (int i = 0; i < n+1; i++)
                Gpt[i] = new GPoint();

            Gpt[0].pt = yz1; Gpt[0].s = gpt[0].s;
            Gpt[0].an = Angle.GetNext_FV(dx1, gpt[0].an);
            for (int i = 1; i < n; i++)
            {
                Gpt[i].an = Angle.GetNext_FV(Gpt[i - 1].an, gpt[i].an);
                Gpt[i].s = gpt[i].s;
            }
            Angle ang1 = Gpt[n - 1].an - dx2;

            double dbeta = ang1.rad > (Math.PI * 2 - ang1.rad) ? (Math.PI * 2 - ang1.rad) : ang1.rad,
                dbetan = dbeta / n,
                sSum = 0;
            for (int i = 0; i < n - 1; i++)
            {
                Gpt[i].an = new Angle(Gpt[i].an.rad - dbetan);
                Gpt[i + 1].pt = new Point(Gpt[i].pt, Gpt[i].s, Gpt[i].an);
                sSum += Gpt[i+1].s;
            }
            double dx = Gpt[n - 1].pt.x - yz2.x,
                dy = Gpt[n - 1].pt.y - yz2.y,
                ddx = 0, ddy = 0;
            for (int i = 1; i < n; i++)
            {
                ddx += dx * Gpt[i].s / sSum;
                ddy += dy * Gpt[i].s / sSum;
                Gpt[i].pt.x -= ddx;
                Gpt[i].pt.y -= ddy;
            }
            double fs = Math.Sqrt(dx * dx + dy * dy),
                N = sSum / fs,
                aX = 40 * Math.Sqrt(n - 1);
            dbeta *= 3600 * 180 / Math.PI;
            Gpt[n].s = fs; Gpt[n].pt = new Point(N, aX, dbeta);

            return Gpt;//最后一个点存精度
        }

注意:闭合的 yz1=yz2, dx2=dx1+PI
为了搞好这个,创建了一个新的类:GPoint ,代表测站。测站信息有测站点、观测角(后来变成边的方向角),边长。

    //测站类
    public class GPoint
    {//Define fields
        public Point pt;
        public double s;//观测角(弧度表示),边长
        public Angle an;//观测角

        public Point Pt
        { get { return pt; } set { pt = value; } }
        public Angle An
        { get { return an; } set { an = value; } }
        public double S
        { get { return s; } set { s = value; } }

        //The constructor
        public GPoint(double h = 0, double s = 0, string name = "0", double x = 0, double y = 0, double z = 0)
        {//构造函数1
            this.pt = new Point(x,y,z,name);
            this.an = new Angle(h);
            this.s = s;
        }
        public GPoint(Point pt,Angle an,double s)
        {//构造函数2
            this.pt = pt;
            this.an = an;
            this.s = s;
        }
    }

其所依附的类有:

点类:https://blog.csdn.net/Gou_Hailong/article/details/88989274
角类:https://blog.csdn.net/Gou_Hailong/article/details/95803595

三、秀一波~

在这里插入图片描述

【注1】其中的代码也许并不完整,您可以作为伪码参看,或者您可以去我主博客逛逛,也许有意外之喜!
【注2】此篇博客是 C# 编程笔记 的子博客。
【注3】由于博主水平有限,程序可能存在漏洞或bug, 如有发现,请尽快与博主联系!

相关文章:

  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • Matlab 各种画图 ∈ Matlab 使用笔记
  • C#一个解决方案创建多个项目
  • 夜光遥感卫星调研
  • 回归拟合中的基本概念和公式汇编(SSE, MSE, RMSE, RMS, STD, 方差, SSR, SST, R-square, Adjusted_R-squ, 相关度)
  • 立方体相册
  • 中国行政单位划分
  • Matlab 画地图之 m_map
  • 火影手游饰品分解
  • 水准网平差
  • Matlab 双线性内插 缩放矩阵或图像 函数
  • Matlab 求不规则图形的 内切圆和外接圆 函数
  • Matlab 画地图时搞定经纬度注释 函数
  • Matlab 从全国 shp 中扣出某一省份的shp并画图 函数
  • Matlab 根据 shp 裁剪矩阵/图像 函数
  • [NodeJS] 关于Buffer
  • CAP 一致性协议及应用解析
  • css布局,左右固定中间自适应实现
  • HTTP那些事
  • Linux Process Manage
  • Mocha测试初探
  • Redis 懒删除(lazy free)简史
  • redis学习笔记(三):列表、集合、有序集合
  • Redux 中间件分析
  • SpiderData 2019年2月23日 DApp数据排行榜
  • spring security oauth2 password授权模式
  • Spring框架之我见(三)——IOC、AOP
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • yii2权限控制rbac之rule详细讲解
  • 大整数乘法-表格法
  • 分布式熔断降级平台aegis
  • 基于axios的vue插件,让http请求更简单
  • 将 Measurements 和 Units 应用到物理学
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 双管齐下,VMware的容器新战略
  • 写代码的正确姿势
  • 你对linux中grep命令知道多少?
  • 仓管云——企业云erp功能有哪些?
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #Ubuntu(修改root信息)
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2)nginx 安装、启停
  • (C++17) std算法之执行策略 execution
  • (备忘)Java Map 遍历
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (分类)KNN算法- 参数调优
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (离散数学)逻辑连接词
  • (三)docker:Dockerfile构建容器运行jar包
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Linux下编译安装log4cxx