/// <summary> /// 写入 /// </summary> /// <param name="filePath"></param> /// <param name="maxOrder">只读取到相应的阶次,节约时间</param> /// <returns></returns> public void Write(SphericalHarmonicsFile file, int maxOrder = int.MaxValue) { using (StreamWriter wr = new StreamWriter(path)) { var format = "0.000000000000000E+00"; var sigmaFormat = "0.0000000000E+00"; foreach (var kv in file.Data) { var order = kv.Key; if (order > maxOrder) { break; } var n = Geo.Utils.StringUtil.FillSpaceLeft(kv.Key.ToString(), 5); int i = 0; foreach (var item in kv.Value.C) { var m = Geo.Utils.StringUtil.FillSpaceLeft(i.ToString(), 5); var c = Geo.Utils.StringUtil.FillSpaceLeft(item.Value.ToString(format), 25); var s = Geo.Utils.StringUtil.FillSpaceLeft(kv.Value.S[i].Value.ToString(format), 25); var sigmaC = Geo.Utils.StringUtil.FillSpaceLeft(item.Rms.ToString(sigmaFormat), 20); var sigmaS = Geo.Utils.StringUtil.FillSpaceLeft(kv.Value.S[i].Rms.ToString(sigmaFormat), 20); var line = n + m + c + s + sigmaC + sigmaS; wr.WriteLine(line); i++; } } } }
/// <summary> /// 球谐函数计算器 /// </summary> /// <param name="File"></param> public SphericalHarmonicsCalculater(SphericalHarmonicsFile File) { this.File = File; if (this.File.Contains(0))//包含0,非重力,为高程 { IsCommon2DSphericalHarmonics = true; } }
/// <summary> /// 读取 /// </summary> /// <param name="maxOrder">只读取到相应的阶次,节约时间</param> /// <returns></returns> public SphericalHarmonicsFile Read(int maxOrder = int.MaxValue) { SphericalHarmonicsFile file = new SphericalHarmonicsFile(); using (StreamReader sr = new StreamReader(path)) { string line = null; SphericalHarmonicsItem current = null; while ((line = sr.ReadLine()) != null) { line = line.Replace("D", "E"); string[] strs = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (strs.Length < 4) { continue; } int n = int.Parse(strs[0]); int m = int.Parse(strs[1]); if (n > maxOrder) { break; } if (m == 0) { current = file.GetOrCreate(n); } // current = new SphericalHarmonicsItem(n + 1); file[n] = current; } var cVal = double.Parse(strs[2]); var sVal = double.Parse(strs[3]); var cSigma = 0.0; if (strs.Length > 4) { cSigma = double.Parse(strs[4]); } var sSigma = 0.0; if (strs.Length > 5) { sSigma = double.Parse(strs[5]); } current.Set(m, new RmsedNumeral(cVal, cSigma), new RmsedNumeral(sVal, sSigma)); } } return(file); }