导线计算常见易犯的错误

一,数据的读取

1,TXT文件的读取

坐标的读取,注意的是步长是2

 

 //导入坐标
            for (int i = 0; i < data[13].Length; i+=2)
            {
                string X = data[13][i];
                string Y = data[13][i+1];
                this.dataGridView1.Rows.Add(X, Y);
            }

 角度和边长的读取

因为角度是比边长多一个的,所以以角度的数量为循环条件,判断是最后一个时只添加角度并且弹出循环。

 

 //导入角度和长度
            for (int i = 0; i < data[15].Length; i++)
            {
                    string A = data[15][i];
                if(i == data[15].Length-1)//最后一次循环仅加角度防止报错
                {
                    this.dataGridView2.Rows.Add(A);
                    break;
                }
                    string L = data[16][i];
                    this.dataGridView2.Rows.Add(A, L);                
            }

2,XLS文件的读取

先添加引用,搜索excel即可

using Excel = Microsoft.Office.Interop.Excel;

最后添加命名空间

 Excel.Application application = new Excel.Application();
            Excel.Workbook workbook = application.Workbooks.Open(path);
            Excel.Worksheet ws = workbook.Worksheets[1]; 

传统的步骤,注意的是excel的读取索引不是从01开始的。

获取有效行数(注意一定要加Rows,因为获取的是行的索引)

 int usedcount = ws.UsedRange.Rows.Count; 

最后一定在cell后面添加value和ToString

cell[i, 2].Value.ToString(); 

角度长度的读取和txt差不多要加一个结束条件

 //给角度赋值
                for (int i = 12; i < usedcount; i++)
                {
                    string A = cell[i, 2].Value.ToString();
                    if (i == usedcount-1)//最后一次循环仅加角度防止报错
                    {
                        this.dataGridView2.Rows.Add(A);
                        break;
                    }
                    string L = cell[i+1, 3].Value.ToString();
                    dataGridView2.Rows.Add(A,L);
                } 

二,数据的计算问题 

方位角的计算中,闭合最后一个角度需要改正 

(因为最后一个角是内部角,需要转换为附和角) 

最后角度不可以小于0或者大于360

 public static void JudgeAlpha(ref double A)
        {
            while (A > 2 * Math.PI)
            {
                A -= 2 * Math.PI;
            }
            while (A < 0)
            {
                A += 2 * Math.PI;
            }
        }

终止方位角的计算(闭合的是起始方位角加180度

if (WT == 0)
            {
                EndA = Math.Atan2(Y[3] - Y[2], X[3] - X[2]);
               
            }
            else
            {
                EndA = Math.PI + StartA;
               
            } 

 闭合差的单位是毫米mm,输出答案时候用的是角度不是弧度。

 List<double> direct_azimuth = azimuth.Select((n1, index) => n1 - index * fbeta/pointcount).ToList();//使用linq快速分配方位角闭合差。

//注意的是方位角闭合差是迭代累计的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值