C Sharp进行全站仪的圆曲线整桩位计算

在测绘行业中经常会用到圆曲线方法放样,我们在测量出数据后会进行大量计算,为了方便计算小编编写了一套简易的C Sharp程序。

此程序基于C Sharp控制台应用程序Program.cs文件

整体思路:

第一步:需要将所有参数进行定义(这里只定义了主要的参数)

//代求参数
            double T;              double L;
            double E;              double q;
 

第二步:考虑到角度弧度需要相互转换,那么可以在整体Program中建立结构,也可以添加一个类(这里新入门的同学建议第一种方法!)

1:角度转弧度方法:

public struct AtH1                                                       
        {
            public double AtH2(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;
            }

 2:弧度转角度方法:

public double HtA(double ang)
            {
                ang += 1.0E-15;
                int fuhao = (int)(ang / Math.Abs(ang));
                ang = Math.Abs(ang) * 180.0 / Math.PI;
                int d = (int)ang;
                ang = (ang - d) * 60.0;
                int m = (int)ang;
                double s = (ang - m) * 60.0;
                return (d + m / 100.0 + s / 10000.0) * fuhao;
            }

 第三步:计算(分别计算圆曲线要素以及主点里程)

所需计算公式请自行寻找,这里就不作赘述!

(记得检核哦!!!

            检校值{0}", ****
            请输入整桩点间隔值
            double  = double

第四步:极坐标元素计算and桩位坐标计算

利用for,if,else 等方法

第五步:存储

存.Add   存.count  等

下面是整体程序:

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;



namespace 圆曲线计算
{
    class Program
    {
        public struct AtH1                                                       
        {
            public double AtH2(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 double HtA(double ang)
            {
                ang += 1.0E-15;
                int fuhao = (int)(ang / Math.Abs(ang));
                ang = Math.Abs(ang) * 180.0 / Math.PI;
                int d = (int)ang;
                ang = (ang - d) * 60.0;
                int m = (int)ang;
                double s = (ang - m) * 60.0;
                return (d + m / 100.0 + s / 10000.0) * fuhao;
            }
        }
        static void Main(string[] args)
        {
            double T;              double L;
            double E;              double q;
            double Kzy;            double Kqz;
            double Kyz;            double Dert;
            double Dis;            double Tx;
            double Ty;
            AtH1 A;
            Console.WriteLine("请输入交点里程(输入里程与小数):");
            double Kjd = double.Parse(Console.ReadLine());
            Console.WriteLine("请输入转角值:");
            double Aef = A.AtH2( double.Parse(Console.ReadLine())) ;
            Console.WriteLine("请输入曲线半径值:");
            double R = double.Parse(Console.ReadLine()); 
            Console.WriteLine("请输入直圆点的X坐标:");
            double Xzy = double.Parse(Console.ReadLine()); 
            Console.WriteLine("请输入直圆点的Y坐标:");
            double Yzy = double.Parse(Console.ReadLine()); 
            Console.WriteLine("请输入ZY-JD方位角:");
            double Wt = A.AtH2(double.Parse(Console.ReadLine())); 

            T = R * Math.Tan(Aef/2);
            Console.WriteLine("T ={0}", T);
            L = R * Aef ;
            Console.WriteLine("L ={0}", L);
            E = R / Math.Cos(Aef / 2) - R;
            Console.WriteLine("E = {0}", E);
            q = 2 * T - L;
            Console.WriteLine("q = {0}", q);

            Kzy = Kjd - T;
            Console.WriteLine("Kzy = {0}", Kzy);
            Kqz = Kzy + L / 2;
            Console.WriteLine("Kqz = {0}", Kqz);
            Kyz = Kqz + L / 2;
            Console.WriteLine("Kyz = {0}", Kyz);

            Console.WriteLine("检校值{0}", Kqz + q/2 - Kjd);
            Console.WriteLine("请输入整桩点间隔值:");
            double ZZD = double.Parse(Console.ReadLine());
            double Kjd1 = 0;
            List<double> 存里程 = new List<double>();
            for (double i = 0; i < Kyz; i +=  ZZD)
            {
                if (i > Kzy )
                {
                    Kjd1 = i;
                    存里程.Add(Kjd1);
                }
            }
            Console.WriteLine("本曲线共有{0}个整桩点,请输入需要计算的整桩点点号",存里程.Count);
            int co = int.Parse(Console.ReadLine());
            Kjd1= 存里程[ co - 1 ];
            if (Kqz + q / 2 - Kjd == 0)
            {
                Dert = A.AtH2(90) * (Kjd1 - Kzy) / (Math.PI * R);
                Console.WriteLine("第一桩Dert = {0}", A.HtA(Dert));
                Dis = 2 * R * Math.Sin(Dert);
                Console.WriteLine("第一桩DIS = {0}", Dis);
                Tx = Xzy + Dis * Math.Cos( Wt + Dert);
                //Tx =  Dis * Math.Cos(Wt + Dert);
                Console.WriteLine("Tx(第一桩) = {0}", Tx);
                Ty = Yzy + Dis * Math.Sin(Wt + Dert);
                Console.WriteLine("Ty(第一桩) = {0}", Ty);
                Console.ReadKey();
            }
            else
            {
                Console.WriteLine("里程不符合,计算超限");
                Console.ReadKey();
            }

        }
    }
}

本程序由吉林建筑科技学院梁*杰老师教学授课,小编经梁*杰老师传授,进行一系列整理希望能帮助到各位测绘同学!(如有侵权请告知!!!)

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值