Пример #1
0
 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;
 }
Пример #2
0
        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);
                }
            }
        }