zoukankan      html  css  js  c++  java
  • 后方交会代码

     /// <summary>
       /// 测点信息
       /// </summary>
       /// <param name="list"></param>
       /// <returns></returns>
      public class PointInfo
        {
            /// <summary>
            /// 是否基准点 0基准点 1 测量点 2全站仪
            /// </summary>
            public int Type { get; set; }
            /// <summary>
            /// X坐标
            /// </summary>
            public double Y { get; set; }
            /// <summary>
            /// Y坐标
            /// </summary>
            public double X { get; set; }
            /// <summary>
            /// 水平位置
            /// </summary>
            public double Hz { get; set; }
        }
            /// <summary>
            /// 后方交会算法 返回坐标
            /// </summary>
            /// <param name="list"></param>
            /// <returns></returns>
            private static double[] Resection(List<PointInfo> list)
            {
                var dataList = list.Where(x => x.Type == 0).ToList();
                if (dataList.Count < 3) return null;//至少三个基准点
                var pointA = dataList[0];
                var pointB = dataList[1];
                var pointC = dataList[2];
    
                //三个基准点坐标
                double xa = pointA.X;
                double xb = pointB.X;
                double xc = pointC.X;
                double ya = pointA.Y;
                double yb = pointB.Y;
                double yc = pointC.Y;
    
                double alpha = pointC.Hz - pointB.Hz;
                double beta = pointA.Hz - pointC.Hz;
                double gamma = pointB.Hz - pointA.Hz;
                double cotA = ((xb - xa) * (xc - xa) + (yb - ya) * (yc - ya)) / ((xb - xa) * (yc - ya) - (yb - ya) * (xc - xa));
                double cotB = ((xc - xb) * (xa - xb) + (yc - yb) * (ya - yb)) / ((xc - xb) * (ya - yb) - (yc - yb) * (xa - xb));
                double cotC = ((xa - xc) * (xb - xc) + (ya - yc) * (yb - yc)) / ((xa - xc) * (yb - yc) - (ya - yc) * (xb - xc));
    
                double pA = 1.0 / (cotA - Math.Pow(Math.Tan(alpha), -1));
                double pB = 1.0 / (cotB - Math.Pow(Math.Tan(beta), -1));
                double pC = 1.0 / (cotC - Math.Pow(Math.Tan(gamma), -1));
    
                double xp = (pA * xa + pB * xb + pC * xc) / (pA + pB + pC);
                double yp = (pA * ya + pB * yb + pC * yc) / (pA + pB + pC);
                return new double[2] { xp, yp };
            }
    
    
    
     
  • 相关阅读:
    hdu 1060 Leftmost Digit
    HDU 1081 To The Max 动态规划
    不安装Oracle客户端,透过PL/SQL Developer连接Server DB
    ASP.net:Ftp操作FtpWebRequest
    VS2008:log4net.dll 使用
    社会生活——《哥哥又逃票了》
    VS2008:AjaxPro.2 的应用
    Linq to SQL 根据自己需要更改数据源
    ExtJS Combobox 如何改变下拉列列宽问题
    ExtJs 的Enter特殊键事件处理
  • 原文地址:https://www.cnblogs.com/haishikugua/p/13565236.html
Copyright © 2011-2022 走看看