大地坐標(biāo)系
空間直角坐標(biāo)系
子午面直角坐標(biāo)系文章來源:http://www.zghlxwxcb.cn/news/detail-738606.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-738606.html
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace project1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double L, B, H, X, Y, Z, x, y;
double a = 6378137;//橢圓長(zhǎng)半軸
double b = 6356752.3141;//橢圓短半軸
double e_2 = 0.00669438002290;//橢圓第一偏心率e^2
double e_dot_2 = 0.00673949677548;//橢圓第二偏心率e'^2
double c = a * a / b;
double k = 1 + e_dot_2;
double p = Math.PI / 180;//角度值轉(zhuǎn)弧度制系數(shù)
//如果需要更嚴(yán)謹(jǐn)?shù)拇a,可以更換為三個(gè)textbox是否為空的判斷,并自行添加參數(shù)錯(cuò)誤提示的信息
if (textBox5.Text != string.Empty&& textBox4.Text != string.Empty)//已知大地坐標(biāo)系
{
L = Convert.ToDouble(textBox1.Text);
B= Convert.ToDouble(textBox4.Text);
H= Convert.ToDouble(textBox5.Text);
double W = Math.Sqrt(1 - e_2 * Math.Sin(B*p) * Math.Sin(B * p));
double V = Math.Sqrt(1 + e_dot_2 * Math.Cos(B * p) * Math.Cos(B * p));
double N = a / W;
//計(jì)算空間直角坐標(biāo)系
X = (N+H)*Math.Cos(B * p) * Math.Cos(L * p);
Y = (N + H) * Math.Cos(B * p) * Math.Sin(L * p);
Z = (N*(1-e_2)+H)*Math.Sin(B * p);
textBox3.Text = Convert.ToString(X);
textBox8.Text = Convert.ToString(Y);
textBox9.Text = Convert.ToString(Z);
//計(jì)算子午面直角坐標(biāo)系
x =X/Math.Cos(L*p);
y = Z;
textBox2.Text = Convert.ToString(L);
textBox6.Text = Convert.ToString(x);
textBox7.Text = Convert.ToString(y);
}
else if (textBox7.Text != string.Empty&& textBox6.Text != string.Empty)//已知子午面直角坐標(biāo)系
{
L = Convert.ToDouble(textBox2.Text);
x= Convert.ToDouble(textBox6.Text);
y= Convert.ToDouble(textBox7.Text);
//計(jì)算空間直角坐標(biāo)系
X = x * Math.Cos(L * p);
Y = x * Math.Sin(L * p);
Z = y;
textBox3.Text = Convert.ToString(X);
textBox8.Text = Convert.ToString(Y);
textBox9.Text = Convert.ToString(Z);
//計(jì)算大地坐標(biāo)系
double tan0 = Z / Math.Sqrt(X *X + Y *Y);
double P = c * e_2 / Math.Sqrt(X * X + Y * Y);
double tanB=tan0,cha;//循環(huán)迭代
do
{
cha = tanB;
tanB = tan0 + P * cha / Math.Sqrt(k + cha * cha);
} while (Math.Abs(cha-tanB) > Math.Pow(10, -10));
B = Math.Atan(tanB );
double W = Math.Sqrt(1 - e_2 * Math.Sin(B ) * Math.Sin(B ));
double V = Math.Sqrt(1 + e_dot_2 * Math.Cos(B ) * Math.Cos(B ));
double N = a / W;
H = Math.Sqrt(X * X + Y * Y) / Math.Cos(B ) - N;
textBox1.Text = Convert.ToString(L);
textBox4.Text = Convert.ToString(B * 180 / Math.PI);
textBox5.Text = Convert.ToString(H);
}
else if (textBox9.Text != string.Empty&& textBox8.Text != string.Empty)//已知空間直角坐標(biāo)系
{
X = Convert.ToDouble(textBox3.Text);
Y = Convert.ToDouble(textBox8.Text);
Z = Convert.ToDouble(textBox9.Text);
//計(jì)算大地坐標(biāo)系
L = Math.Atan(Y / X );
double tan0 = Z / Math.Sqrt(X * X + Y * Y);
double P = c * e_2 / Math.Sqrt(X * X + Y * Y);
double tanB = tan0, cha;//循環(huán)迭代
do
{
cha = tanB;
tanB = tan0 + P * cha / Math.Sqrt(k + cha * cha);
} while (Math.Abs(cha - tanB) > Math.Pow(10, -10));
B = Math.Atan(tanB );
double W = Math.Sqrt(1 - e_2 * Math.Sin(B ) * Math.Sin(B ));
double V = Math.Sqrt(1 + e_dot_2 * Math.Cos(B ) * Math.Cos(B));
double N = a / W;
H = Math.Sqrt(X * X + Y * Y) /Math.Cos(B ) - N;
textBox1.Text = Convert.ToString(L*180/Math.PI);
textBox4.Text = Convert.ToString(B *180/ Math.PI);
textBox5.Text = Convert.ToString(H);
//計(jì)算子午面直角坐標(biāo)系
x = X / Math.Cos(L);
y = Z;
textBox2.Text = Convert.ToString(L*180/Math.PI);
textBox6.Text = Convert.ToString(x);
textBox7.Text = Convert.ToString(y);
}
}
}
}
到了這里,關(guān)于c#大地測(cè)量學(xué)各坐標(biāo)系坐標(biāo)轉(zhuǎn)換(窗體應(yīng)用程序)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!