一,数据的读取
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快速分配方位角闭合差。
//注意的是方位角闭合差是迭代累计的