示例#1
0
 private void button4_Click(object sender, EventArgs e)
 {
     if ((textBox7.Text == "") || (textBox8.Text == ""))
     {
         MessageBox.Show("必需数据不足!");
     }
     else
     {
         dPoint dp = new dPoint();
         kPoint kp = new kPoint();
         dp.L = double.Parse(textBox1.Text);
         dp.B = double.Parse(textBox8.Text);
         int what = comboBox1.SelectedIndex;
         kp             = Gauss.Forsol(dp, what);
         textBox10.Text = kp.X.ToString("F6");
         textBox11.Text = kp.Y.ToString("F6");
         double L0;
         L0             = 6 * ((int)(dp.L / 6) + 1) - 3;
         textBox12.Text = L0.ToString();
     }
 }
示例#2
0
        private void button1_Click(object sender, EventArgs e)
        {
            //(L,B)->(x,y)
            //c#的sin,cos采用弧度制,asin,acos返回也是弧度

            //先度分秒转换
            double degreeL = 0, degreeB = 0;
            string dmsTextL, dmsTextB;

            if (radioButtonD.Checked)//若以°形式输入,显示即可
            {
                if (BB.Text == "")
                {
                    MessageBox.Show("请输入B的值");
                }
                if (LL.Text == "")
                {
                    MessageBox.Show("请输入L的值");
                }

                degreeL = Convert.ToDouble(LL.Text);
                degreeB = Convert.ToDouble(BB.Text);

                dmsTextL = D2DMS(degreeL);
                dmsTextB = D2DMS(degreeB);

                LL2.Text = dmsTextL;
                BB2.Text = dmsTextB;
            }
            else//若以度分秒形式输入,转换为°
            {
                if (BB2.Text == "")
                {
                    MessageBox.Show("请输入B的值");
                }
                if (LL2.Text == "")
                {
                    MessageBox.Show("请输入L的值");
                }

                dmsTextB = BB2.Text;
                dmsTextL = LL2.Text;

                string[] PrimiryStrB = new String[100];
                PrimiryStrB = dmsTextB.Split(',');
                string[] PrimiryStrL = new String[100];
                PrimiryStrL = dmsTextL.Split(',');

                degreeB = DMS2D(Convert.ToDouble(PrimiryStrB[0]), Convert.ToDouble(PrimiryStrB[1]), Convert.ToDouble(PrimiryStrB[2]));
                degreeL = DMS2D(Convert.ToDouble(PrimiryStrL[0]), Convert.ToDouble(PrimiryStrL[1]), Convert.ToDouble(PrimiryStrL[2]));

                LL.Text = degreeL.ToString();
                BB.Text = degreeB.ToString();
            }

            double a  = Convert.ToDouble(longtextBox.Text);
            double aa = Convert.ToDouble(denominatorTextBox.Text);
            double b  = a * (1 - 1 / aa);
            double E  = Math.Sqrt(a * a - b * b) / a;
            double EE = Math.Sqrt(a * a - b * b) / b;//初始化各种数据

            double L = degreeL;
            double B = degreeB;    //单位为°

            B = B * Math.PI / 180; //化为弧度
            double t = Math.Tan(B);
            double n = Math.Sqrt(EE * EE * Math.Cos(B) * Math.Cos(B));
            double W = Math.Sqrt(1 - E * E * Math.Sin(B) * Math.Sin(B));
            double V = Math.Sqrt(1 + n * n);
            double N = a / W;

            double X;//由赤道开始到此点的子午线弧长
            double m0, m2, m4, m6, m8;

            m0 = a * (1 - E * E);
            m2 = 1.5 * E * E * m0;
            m4 = 1.25 * E * E * m2;
            m6 = 7 * E * E * m4 / 6;
            m8 = 9 * E * E * m6 / 8;
            double a0, a2, a4, a6, a8;

            a0 = m0 + m2 / 2 + 3 * m4 / 8 + 5 * m6 / 16 + 35 * m8 / 128;
            a2 = m2 / 2 + m4 / 2 + 15 * m6 / 32 + 7 * m8 / 16;
            a4 = m4 / 8 + 3 * m6 / 16 + 7 * m8 / 32;
            a6 = m6 / 32 + m8 / 16;
            a8 = m8 / 128;
            X  = a0 * B - a2 * Math.Sin(2 * B) / 2 + a4 * Math.Sin(4 * B) / 4 - a6 * Math.Sin(6 * B) / 6 + a8 * Math.Sin(8 * B) / 8;
            //这里B单位为弧度

            double l;  //此点经度与中央子午线的经度之差,在东为正,在西为负,单位″
            double L0;

            if (middleLongitude.Text != "")
            {
                L0 = Convert.ToDouble(middleLongitude.Text);
            }
            else
            {
                L0 = ComputeMid(L);
                middleLongitude.Text = L0.ToString();//输入至窗体
            }
            //中央子午线经度,单位°

            l = (L - L0) * 60 * 60;//单位″

            double x, y;
            double SB = Math.Sin(B); double CB = Math.Cos(B);

            x = X + N * SB * CB * l * l / (2 * p * p) + N * SB * Math.Pow(CB, 3) * (5 - t * t + 9 * n * n + 4 * Math.Pow(n, 4)) * Math.Pow(l, 4) / (24 * Math.Pow(p, 4))
                + N * SB * Math.Pow(CB, 5) * (61 - 58 * t * t + Math.Pow(t, 4)) * Math.Pow(l, 6) / (720 * Math.Pow(p, 6));
            y = N * CB * l / p + N * Math.Pow(CB, 3) * (1 - t * t + n * n) * Math.Pow(l, 3) / (6 * Math.Pow(p, 3)) +
                N * Math.Pow(CB, 5) * (5 - 18 * t * t + Math.Pow(t, 4) + 14 * n * n - 58 * n * n * t * t) * Math.Pow(l, 5) / (120 * Math.Pow(p, 5));

            /*//电算公式,书p175
             * double a0, a3, a4, a5, a6, NN;
             * NN = 6399698.902 - (21562.267 - (108.973 - 0.612 * CB * CB) * CB * CB) * CB * CB;
             * a0 = 32140.404 - (135.3302 - (0.7092 - 0.004 * CB * CB) * CB * CB) * CB * CB;
             * a4 = (0.25 + 0.00252 * CB * CB) * CB * CB - 0.04166;
             * a6 = (0.166 * CB * CB - 0.084) * CB * CB;
             * a3 = (0.3333333 + 0.001123 * CB * CB) * CB * CB - 0.16666667;
             * a5 = 0.0083 - (0.1667 - (0.1968 + 0.004 * CB * CB) * CB * CB) * CB * CB;
             * //下面的l单位为°
             * l = l / p;
             * x = 6367558.4969 * B - (a0 - (0.5 + (a4 + a6 * l * l) * l * l) * l * l * NN) * SB * CB;
             * y = (1 + (a3 + a5 * l * l) * l * l) * l * NN * CB;*/
            xx.Text = x.ToString();
            yy.Text = y.ToString();
        }