Esempio n. 1
0
        // 坐标平差
        private bool AdjCoord()
        {
            mDspStr += ">>>  4.坐标近似平差计算  <<<\r\n";
            double fx, fy, fs;
            double totalS = 0.0;
            int    n      = mTraverseLine.Lines.Count; // 导线所有直线段数

            for (int i = 1; i <= n - 2; i++)           // 计算观测直线总长
            {
                totalS += mTraverseLine.Lines[i].Distance;
            }
            double fs0 = 5000.0;

            fx       = mTraverseLine.Lines[n - 1].StartPt.X - mTraverseLine.KnowedObsData.X0[2];
            fy       = mTraverseLine.Lines[n - 1].StartPt.Y - mTraverseLine.KnowedObsData.Y0[2];
            fs       = Math.Sqrt(fx * fx + fy * fy);
            fs       = Math.Floor(1 / (fs / totalS));
            mDspStr += " 坐标闭合差fx=" + (fx * 1000).ToString("0.0") + "mm  fy=" + (fy * 1000).ToString("0.0") + "mm   边长相对误差fs=1/" + fs.ToString("0") + "  限差=1/" + fs0.ToString("0") + "\r\n";
            if (fs < fs0)
            {
                mDspStr += "坐标闭合差超限!\r\n";
                return(false);
            }
            // 计算坐标改正数
            mDspStr += "坐标改正数\r\n";
            double[] Vx  = new double[n - 3 + 1], Vy = new double[n - 3 + 1];
            double   Vx0 = -fx / totalS;
            double   Vy0 = -fy / totalS;

            for (int i = 0; i <= n - 3; i++)
            {
                Vx[i]    = Vx0 * mTraverseLine.Lines[i + 1].Distance;
                Vy[i]    = Vy0 * mTraverseLine.Lines[i + 1].Distance;
                mDspStr += mTraverseLine.Lines[i + 1].EndPt.Name + " 点 的坐标改正数Vx=" + (Vx[i] * 1000).ToString("0.0") + "mm  Vy=" + (Vy[i] * 1000).ToString("0.0") + "mm \r\n";
            }

            // 计算坐标改正数
            mDspStr += "坐标平差值\r\n";
            double totalVx, totalVy;

            totalVx = totalVy = 0.0;

            for (int i = 0; i <= n - 3; i++)
            {
                totalVx += Vx[i];
                totalVy += Vy[i];
                mTraverseLine.Lines[i + 1].EndPt.X += totalVx;
                mTraverseLine.Lines[i + 1].EndPt.Y += totalVy;
                mDspStr += mTraverseLine.Lines[i + 1].EndPt.Name + " 点 平差坐标X=" + mTraverseLine.Lines[i + 1].EndPt.X.ToString("0.000") + "  Y=" + mTraverseLine.Lines[i + 1].EndPt.Y.ToString("0.000") + "\r\n";
                // 重新计算导线距离、方位角等数据
                mTraverseLine.Lines[i + 1].Direction = BaseFunction.DirectAB(mTraverseLine.Lines[i + 1]);
                mTraverseLine.Lines[i + 1].Distance  = BaseFunction.DistAB(mTraverseLine.Lines[i + 1]);
            }
            return(true);
        }
Esempio n. 2
0
        // 初始化观测值表格
        public void InitlGridObsData(frmProcess viewForm)
        {
            int n;

            n = mKnowedObsData.Pnames.Count;   // 总点数(已知+未知)
            viewForm.gridObsData.Rows.Clear(); // 清空原有行
            viewForm.gridObsData.Rows.Add(n);  // 增加数据行
            // 设置已知点单元格格式
            // 前面两已知点
            viewForm.gridObsData.Rows[0].DefaultCellStyle.BackColor = Color.LightGray;
            viewForm.gridObsData.Rows[0].ReadOnly = true;
            viewForm.gridObsData.Rows[1].DefaultCellStyle.BackColor = Color.LightGray;
            viewForm.gridObsData.Rows[1].ReadOnly = true;
            viewForm.gridObsData.Rows[1].Cells[2].Style.BackColor = Color.White;
            viewForm.gridObsData.Rows[1].Cells[2].ReadOnly        = false;
            // 后面两已知点
            viewForm.gridObsData.Rows[n - 1].DefaultCellStyle.BackColor = Color.LightGray;
            viewForm.gridObsData.Rows[n - 1].ReadOnly = true;
            viewForm.gridObsData.Rows[n - 2].Cells[1].Style.BackColor = Color.LightGray;
            viewForm.gridObsData.Rows[n - 2].Cells[1].ReadOnly        = true;

            // 赋值序号及点号
            for (int i = 0; i <= n - 1; i++)
            {
                viewForm.gridObsData.Rows[i].Cells[0].Value = i + 1;
                viewForm.gridObsData.Rows[i].Cells[1].Value = mKnowedObsData.Pnames[i];
            }
            // 赋值已知点距离
            double dist;

            dist = BaseFunction.DistAB(mKnowedObsData.X0[0], mKnowedObsData.Y0[0], mKnowedObsData.X0[1], mKnowedObsData.Y0[1]);
            viewForm.gridObsData.Rows[1].Cells[3].Value = dist.ToString("0.000");
            dist = BaseFunction.DistAB(mKnowedObsData.X0[2], mKnowedObsData.Y0[2], mKnowedObsData.X0[3], mKnowedObsData.Y0[3]);
            viewForm.gridObsData.Rows[n - 1].Cells[3].Value = dist.ToString("0.000");

            // 赋值观测角度默认值
            for (int i = 1; i <= n - 2; i++)
            {
                viewForm.gridObsData.Rows[i].Cells[2].Value = "0.0000";
            }
            // 赋值观测距离默认值
            for (int i = 2; i <= n - 2; i++)
            {
                viewForm.gridObsData.Rows[i].Cells[3].Value = "0.000";
            }
        }
Esempio n. 3
0
        // 初始化导线
        private void Intil()
        {
            MyPoint startPt, endPt;
            MyLine  line;
            int     n = mTraverseLine.KnowedObsData.Pnames.Count; // 总点数(已知点4+未知点数)

            // 赋值第一条起始边
            startPt        = new MyPoint();
            startPt.Name   = mTraverseLine.KnowedObsData.Pnames[0];
            startPt.X      = mTraverseLine.KnowedObsData.X0[0];
            startPt.Y      = mTraverseLine.KnowedObsData.Y0[0];
            startPt.Type   = 1;
            endPt          = new MyPoint();
            endPt.Name     = mTraverseLine.KnowedObsData.Pnames[1];
            endPt.X        = mTraverseLine.KnowedObsData.X0[1];
            endPt.Y        = mTraverseLine.KnowedObsData.Y0[1];
            endPt.Type     = 1;
            line           = new MyLine();
            line.StartPt   = startPt;
            line.EndPt     = endPt;
            line.Name      = startPt.Name + endPt.Name;
            line.Distance  = BaseFunction.DistAB(line);
            line.Direction = BaseFunction.DirectAB(line);
            line.Type      = 1;
            mTraverseLine.Lines.Add(line);
            // 赋值中间未知边
            for (int i = 2; i <= n - 2; i++)
            {
                startPt    = endPt;
                endPt      = new MyPoint();
                endPt.Name = mTraverseLine.KnowedObsData.Pnames[i];
                endPt.Type = 2;
                if (i == n - 2)
                {
                    endPt.Type = 1;
                    endPt.X    = mTraverseLine.KnowedObsData.X0[2];
                    endPt.Y    = mTraverseLine.KnowedObsData.Y0[2];
                }
                line          = new MyLine();
                line.StartPt  = startPt;
                line.EndPt    = endPt;
                line.Name     = startPt.Name + endPt.Name;
                line.Distance = mTraverseLine.KnowedObsData.SS[i - 2]; // 赋值实测距离
                line.Type     = 2;
                mTraverseLine.Lines.Add(line);
            }
            // 赋值最后一条已知边
            startPt        = endPt;
            endPt          = new MyPoint();
            endPt.Name     = mTraverseLine.KnowedObsData.Pnames[n - 1];
            endPt.Type     = 1;
            endPt.X        = mTraverseLine.KnowedObsData.X0[3];
            endPt.Y        = mTraverseLine.KnowedObsData.Y0[3];
            line           = new MyLine();
            line.StartPt   = startPt;
            line.EndPt     = endPt;
            line.Name      = startPt.Name + endPt.Name;
            line.Distance  = BaseFunction.DistAB(line);
            line.Direction = BaseFunction.DirectAB(line);
            line.Type      = 1;
            mTraverseLine.Lines.Add(line);
        }