TarDfoLeoX2Calc.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. using ExtensionsDev;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data.Entity;
  5. using System.Linq;
  6. using System.Windows.Forms;
  7. using XdCxRhDW.Api.AddIns;
  8. using XdCxRhDW.Entity;
  9. using XdCxRhDW.Repostory;
  10. namespace XdCxRhDW.App.EditForms
  11. {
  12. public partial class TarDfoLeoX2Calc : DevExpress.XtraEditors.XtraForm
  13. {
  14. public TarDfoLeoX2Calc()
  15. {
  16. InitializeComponent();
  17. this.layoutControl1.UseDefault();
  18. this.StartPosition = FormStartPosition.CenterParent;
  19. }
  20. public TarDfoLeoX2Calc(double lon, double lat)
  21. : this()
  22. {
  23. this.txtTar.Text = $"{lon:f3},{lat:f3}";
  24. string mainSatInfo = "23467,-1608418.46,5994257.60,3139819.89,-6632.8731,-373.9909,-2678.2335";
  25. string adja1SatInfo = "40892,-4629555.87,4978929.91,1487241.78,-4890.2693,-3337.6709,-4031.3087";
  26. this.lcX1.Text = "主星坐标X";
  27. this.lcY1.Text = "主星坐标Y";
  28. this.lcZ1.Text = "主星坐标Z";
  29. this.lcVX1.Text = "主星坐标VX";
  30. this.lcVY1.Text = "主星坐标VY";
  31. this.lcVZ1.Text = "主星坐标VZ";
  32. this.lcX2.Text = "邻星坐标X";
  33. this.lcY2.Text = "邻星坐标Y";
  34. this.lcZ2.Text = "邻星坐标Z";
  35. this.lcVX2.Text = "邻星坐标VX";
  36. this.lcVY2.Text = "邻星坐标VY";
  37. this.lcVZ2.Text = "邻星坐标VZ";
  38. var main = mainSatInfo.Split(',');
  39. int idx = 0;
  40. txtX1.EditValue = main[++idx];
  41. txtY1.EditValue = main[++idx];
  42. txtZ1.EditValue = main[++idx];
  43. txtVX1.EditValue = main[++idx];
  44. txtVY1.EditValue = main[++idx];
  45. txtVZ1.EditValue = main[++idx];
  46. var adja = adja1SatInfo.Split(',');
  47. idx = 0;
  48. txtX2.EditValue = adja[++idx];
  49. txtY2.EditValue = adja[++idx];
  50. txtZ2.EditValue = adja[++idx];
  51. txtVX2.EditValue = adja[++idx];
  52. txtVY2.EditValue = adja[++idx];
  53. txtVZ2.EditValue = adja[++idx];
  54. }
  55. private async void TarDfoLeoX2Calc_Load(object sender, EventArgs e)
  56. {
  57. try
  58. {
  59. using (RHDWContext db = new RHDWContext())
  60. {
  61. var rec = await db.TxInfos.Where(p => p.TxType == EnumTxType.Rec).FirstOrDefaultAsync();
  62. this.txtRec.Text = $"{rec.Lon},{rec.Lat}";
  63. var refstation = await db.TxInfos.Where(p => p.TxType == EnumTxType.Ref).FirstOrDefaultAsync();
  64. this.txtRef.Text = $"{refstation.Lon},{refstation.Lat}";
  65. }
  66. }
  67. catch (Exception ex)
  68. {
  69. await LogHelper.Error("查询天线信息出错", ex);
  70. DxHelper.MsgBoxHelper.ShowError("查询天线信息出错");
  71. }
  72. }
  73. private async void btnOk_Click(object sender, EventArgs e)
  74. {
  75. try
  76. {
  77. this.listBoxRes.Items.Clear();
  78. var strTar = txtTar.Text.Replace(",", ",");
  79. var strRef = txtRef.Text.Replace(",", ",");
  80. var strRec = txtRec.Text.Replace(",", ",");
  81. //var tarfuHz = (Convert.ToDouble(txtTarFuMhz.Text) + 44) * 1e6;
  82. // var reffuHz = (Convert.ToDouble(txtRefFuMhz.Text) + 44) * 1e6;
  83. var tarfuHz = (Convert.ToDouble(txtTarFuMhz.Text)) * 1e6;
  84. var reffuHz = (Convert.ToDouble(txtRefFuMhz.Text)) * 1e6;
  85. double x1 = Convert.ToDouble(txtX1.Text);
  86. double y1 = Convert.ToDouble(txtY1.Text);
  87. double z1 = Convert.ToDouble(txtZ1.Text);
  88. double vx1 = Convert.ToDouble(txtVX1.Text);
  89. double vy1 = Convert.ToDouble(txtVY1.Text);
  90. double vz1 = Convert.ToDouble(txtVZ1.Text);
  91. double[] ephX1 = new double[6] { x1, y1, z1, vx1, vy1, vz1 };
  92. double x2 = Convert.ToDouble(txtX2.Text);
  93. double y2 = Convert.ToDouble(txtY2.Text);
  94. double z2 = Convert.ToDouble(txtZ2.Text);
  95. double vx2 = Convert.ToDouble(txtVX2.Text);
  96. double vy2 = Convert.ToDouble(txtVY2.Text);
  97. double vz2 = Convert.ToDouble(txtVZ2.Text);
  98. double[] ephX2 = new double[6] { x2, y2, z2, vx2, vy2, vz2 };
  99. double[] targetPos = GetDoubles(strTar);
  100. double[] refPos = GetDoubles(strRef);
  101. double[] recPos = GetDoubles(strRec);
  102. var tarEcef = PhysicsHelper.GeoToEcef((targetPos[0], targetPos[1], targetPos[2]));
  103. var recEcef = PhysicsHelper.GeoToEcef((recPos[0], recPos[1], recPos[2]));
  104. var refEcef = PhysicsHelper.GeoToEcef((refPos[0], refPos[1], refPos[2]));
  105. var xlEcef1 = (x1, y1, z1);
  106. var x2Ecef1 = (x2, y2, z2);
  107. var dt1 = PhysicsHelper.Dto(tarEcef, xlEcef1, recEcef);
  108. var dt2 = PhysicsHelper.Dto(tarEcef, x2Ecef1, recEcef);
  109. var refdt1 = PhysicsHelper.Dto(tarEcef, xlEcef1, refEcef);
  110. var refdt2 = PhysicsHelper.Dto(tarEcef, x2Ecef1, refEcef);
  111. var df1 = DfoCalcAPI.DfoCalc(targetPos, ephX1, tarfuHz);
  112. var df2 = DfoCalcAPI.DfoCalc(targetPos, ephX2, tarfuHz);
  113. var refdf1 = DfoCalcAPI.DfoCalc(targetPos, ephX1, reffuHz);
  114. var refdf2 = DfoCalcAPI.DfoCalc(targetPos, ephX2, reffuHz);
  115. List<string> list = new List<string>();
  116. list.Add($"目标主邻时差预测值:{dt1 * 1e6 - dt2 * 1e6:f3}us");
  117. list.Add($"参考主邻时差预测值:{refdt1 * 1e6 - refdt2 * 1e6:f3}us");
  118. list.Add($"目标主邻频差预测值:{df1 - df2:f3}Hz ");
  119. list.Add($"参考主邻频差预测值:{refdf1 - refdf2:f3}Hz");
  120. this.listBoxRes.Items.AddRange(list.ToArray());
  121. }
  122. catch (Exception ex)
  123. {
  124. await LogHelper.Error("频差预测出错", ex);
  125. DxHelper.MsgBoxHelper.ShowError("频差预测出错");
  126. }
  127. }
  128. private double[] GetDoubles(string str)
  129. {
  130. double lon = Convert.ToDouble(str.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[0]);
  131. double lat = Convert.ToDouble(str.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1]);
  132. double[] ds = new double[3] { lon, lat, 0 };
  133. return ds;
  134. }
  135. }
  136. }