public Indirect(TraverseNetwork travNet, bool isAdjusted = false) { this.net = travNet; n = travNet.lengthNum + travNet.angleNum; t = 2 * (net.pointNum - 2);//可扩展成多个点 r = n - t; u = t; c = r + u; s = 0; observe = new Mat(n, 1, false); observeAppro = new Mat(n, 1, false); observeAdjust = new Mat(n, 1, false); paramAppro = new Mat(u, 1, false); paramAdjust = new Mat(u, 1, false); B = new Mat(n, u, false); P = new Mat(n, n); l = new Mat(n, 1, false); x = new Mat(u, 1, false); V = new Mat(n, 1, false); MakeParaDictionary(); isOrigin = !isAdjusted; }
private void Indirect_ToolStripMenuItem_Click(object sender, EventArgs e) { const double PI = Math.PI; string pathLengths = @".\data\Lengths.txt"; string pathAngles = @".\data\Angles.txt"; string pathLengthsAdjust = @".\result\LengthsAdjust.txt"; string pathAnglesAdjust = @".\result\AnglesAdjust.txt"; string pathPointsAdjust = @".\result\PointsAdjust.txt"; int adjustNum = 1; double d0 = 0; TraverseNetwork net; Indirect indirect; bool changeRoute = false; for (adjustNum = 1; adjustNum <= 1; adjustNum++) { if (adjustNum <= 10 || adjustNum % 10 == 0) { } if (adjustNum == 1) { net = new TraverseNetwork(pathLengths, pathAngles, false, false); d0 = net.deltaAngle; } else { changeRoute = !changeRoute; net = new TraverseNetwork(pathLengthsAdjust, pathAnglesAdjust, true, changeRoute); } indirect = new Indirect(net); indirect.Calculate_observe(); indirect.CalculatePointsAppro(); indirect.Calculate_paramAppro(); indirect.CalculateObserveAppro(); indirect.Calculate_B(); indirect.Calculate_P(d0); indirect.Compute_l(); indirect.Compute_x(); indirect.Compute_V(); indirect.Compute_observeAdjust(); indirect.Compute_paramAdjust(); d0 = indirect.Accuracy();//此步平差的d0平差值的中误差,下一步的初始d0 indirect.WriteObserAdjust(); indirect.WritePointsAdjust(); IGraph graph = new IGraph(net.pointNum, net.lengthNum); graph.UndirectedGraph(pathLengths, false); graph.adjMatrix.value[net.startKnownPoint, net.endKnownPoint] = 1; graph.adjMatrix.value[net.endKnownPoint, net.startKnownPoint] = 1; List <List <int> > circles = graph.DFS_FindCircle(); for (int i = 0; i < circles.Count; i++) { List <int> circle = circles[i]; double angleClosure = indirect.CalculateAngleClosure(circle); //Console.WriteLine("angle closure: {0}''", angleClosure); } for (int i = 0; i < net.lengthNum; i++) { // Console.WriteLine("{0}mm", indirect.V.value[i, 0] * 1000); } for (int i = net.lengthNum; i < net.lengthNum + net.angleNum - 1; i++) { // Console.WriteLine("{0}", indirect.V.value[i, 0] / PI * 180 * 3600); } } }