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(); } }
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(); }