刚开始学函数,用得有点乱。不知道该填啥了
double e2 = GetE2();这括号里边让我添东西但是不知道改填啥。还有就是程序还有啥可以改进的地方吗,刚开始学习,请指教
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BLH__XYZ
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请选择椭球类型:");
Console.WriteLine("如果为克拉索夫斯基椭球请输入1");
Console.WriteLine("如果为IAG-75椭球请输入2");
Console.WriteLine("如果为WGS-84椭球请输入3");
Console.WriteLine("如果为CGCS2000椭球请输入4");
string tuoqiu1 = Console.ReadLine();
int temp = int.Parse(tuoqiu1);
Console.WriteLine(tuoqiu(temp));
double f = tuoqiu(temp);
double e2 = GetE2(f);
Console.WriteLine("请输入纬度,空一格输入经度,在空一格输入大地高");
string str = Console.ReadLine();
string[] str2 = str.Split(' ');
double B = double.Parse(str2[0]);
double L = double.Parse(str2[1]);
double H = double.Parse(str2[2]);
double X, Y, Z;
BLH2XYZ(B, L, H, out X, out Y, out Z);
Console.WriteLine("X={0,12:F3},Y={1,12:F3},Z={2,12:F3}", X, Y, Z);
Console.Read();
}
public static double tuoqiu(int temp)
{
double f=0;
switch (temp)
{
case 1: f = 1 / 298.3; break;
case 2: f = 1 / 298.257; break;
case 3: f = 1 / 298.257223563; break;
case 4: f = 1 / 298.257222101; break;
}
return f;
}
/// <summary>
/// 计算e平方的值
/// </summary>
/// <returns>e的平方</returns>
public static double GetE2(double f)
{
double e2 = 2 * f - f * f;
return e2;
}
/// <summary>
/// 计算椭球面卯酉圈的曲率半径
/// </summary>
/// <param name="B">纬度(以弧度为单位)</param>
/// <returns>椭球面卯酉圈的曲率半径</returns>
public static double GetN(double B)
{
double e2 = GetE2();
double a = 6378137;//椭球长半轴
double sinB = Math.Sin(B);
double N = a / Math.Sqrt(1 - e2 * sinB * sinB);
return N;
}
/// <summary>
/// 参心大地坐标转换为参心空间直角坐标(BLH-->XYZ)
/// </summary>
/// <param name="B">纬度(以弧度为单位)</param>
/// <param name="L">经度(以弧度为单位)</param>
/// <param name="H">大地高(以米为单位)</param>
/// <param name="X">X分量(以米为单位)</param>
/// <param name="Y">Y分量(以米为单位)</param>
/// <param name="Z">Z分量(以米为单位)</param>
public static void BLH2XYZ(double B, double L, double H, out double X, out double Y, out double Z)
{
B = dmsrad(B);
L = dmsrad(L);
double e2 = GetE2();
double N = GetN(B);
X = (N + H) * Math.Cos(B) * Math.Cos(L);
Y = (N + H) * Math.Cos(B) * Math.Sin(L);
Z = (N * (1 - e2) + H) * Math.Sin(B);
}
/// <summary>
/// 度分秒转换
/// </summary>
/// <param name="B">角度</param>
/// <returns>弧度</returns>
public static double dmsrad(double B)
{
double temp = B;
double DD, MM, SS;
DD = Math.Floor(temp);
MM = Math.Floor((temp - DD) * 100);
SS = (temp * 100 - Math.Floor(temp * 100)) * 100;
temp = DD + MM / 60 + SS / 3600;
double rad = temp * Math.PI / 180;
return rad;
}
}
}
GetE2函数不是有一个参数吗,你必须指定啊,根据具体情况用
public static double GetE2(double f)
{
double e2 = 2 * f - f * f;
return e2;
}
你这公式里面的f就是你需要传的值,通过f计算出e2