TarDfoCalc.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. using DevExpress.XtraEditors;
  2. using DevExpress.XtraEditors.Controls;
  3. using ExtensionsDev;
  4. using Newtonsoft.Json.Linq;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Data;
  9. using System.Data.Entity;
  10. using System.Drawing;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Windows;
  15. using System.Windows.Documents;
  16. using System.Windows.Forms;
  17. using System.Windows.Input;
  18. using XdCxRhDW.Api;
  19. using XdCxRhDW.Api.AddIns;
  20. using XdCxRhDW.Entity;
  21. using XdCxRhDW.Repostory;
  22. namespace XdCxRhDW.App.EditForms
  23. {
  24. public partial class TarDfoCalc : DevExpress.XtraEditors.XtraForm
  25. {
  26. public TarDfoCalc()
  27. {
  28. InitializeComponent();
  29. this.layoutControl1.UseDefault();
  30. this.StartPosition = FormStartPosition.CenterParent;
  31. }
  32. public TarDfoCalc(double lon, double lat)
  33. : this()
  34. {
  35. this.txtTar.Text = $"{lon:f3},{lat:f3}";
  36. }
  37. private void TarDfoCalc_Load(object sender, EventArgs e)
  38. {
  39. this.cbPosType.Properties.Items.Add(new RadioGroupItem((int)EnumPosType.X1Leo, EnumPosType.X1Leo.GetEnumDisplayName()));
  40. this.cbPosType.Properties.Items.Add(new RadioGroupItem((int)EnumPosType.X2Leo, EnumPosType.X2Leo.GetEnumDisplayName()));
  41. this.cbPosType.SelectedIndex = 0;
  42. }
  43. private void cbPosType_EditValueChanged(object sender, EventArgs e)
  44. {
  45. var editvalue = cbPosType.EditValue as RadioGroupItem;
  46. var posType = (EnumPosType)editvalue.Value;
  47. if (posType == EnumPosType.X1Leo)
  48. {
  49. var time1SatInfo = "1234,-1608416.82,5994263.83,3139842.12,-6632.9542,-373.9141,-2678.0471";
  50. var time2SatInfo = "1234,-3479304.94,5612482.70,2187901.77,-5784.2167,-2163.5059,-3632.7021";
  51. var time3SatInfo = "1234,-5018683.88,4714452.40,1001435.81,-4399.2159,-3780.5070,-4206.3348";
  52. this.lcX1.Text = "第一时刻主星坐标X";
  53. this.lcY1.Text = "第一时刻主星坐标Y";
  54. this.lcZ1.Text = "第一时刻主星坐标Z";
  55. this.lcVX1.Text = "第一时刻主星坐标VX";
  56. this.lcVY1.Text = "第一时刻主星坐标VY";
  57. this.lcVZ1.Text = "第一时刻主星坐标VZ";
  58. this.lcX2.Text = "第二时刻主星坐标X";
  59. this.lcY2.Text = "第二时刻主星坐标Y";
  60. this.lcZ2.Text = "第二时刻主星坐标Z";
  61. this.lcVX2.Text = "第二时刻主星坐标VX";
  62. this.lcVY2.Text = "第二时刻主星坐标VY";
  63. this.lcVZ2.Text = "第二时刻主星坐标VZ";
  64. var t1 = time1SatInfo.Split(',');
  65. int idx = 0;
  66. txtX1.EditValue = t1[++idx];
  67. txtY1.EditValue = t1[++idx];
  68. txtZ1.EditValue = t1[++idx];
  69. txtVX1.EditValue = t1[++idx];
  70. txtVY1.EditValue = t1[++idx];
  71. txtVZ1.EditValue = t1[++idx];
  72. var t2 = time2SatInfo.Split(',');
  73. idx = 0;
  74. txtX2.EditValue = t2[++idx];
  75. txtY2.EditValue = t2[++idx];
  76. txtZ2.EditValue = t2[++idx];
  77. txtVX2.EditValue = t2[++idx];
  78. txtVY2.EditValue = t2[++idx];
  79. txtVZ2.EditValue = t2[++idx];
  80. var t3= time3SatInfo.Split(',');
  81. idx = 0;
  82. txtX21.EditValue = t3[++idx];
  83. txtY21.EditValue = t3[++idx];
  84. txtZ21.EditValue = t3[++idx];
  85. txtVX21.EditValue = t3[++idx];
  86. txtVY21.EditValue = t3[++idx];
  87. txtVZ21.EditValue = t3[++idx];
  88. this.lcX3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  89. this.lcY3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  90. this.lcZ3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  91. this.lcVX3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  92. this.lcVY3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  93. this.lcVZ3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  94. }
  95. else if (posType == EnumPosType.X2Leo)
  96. {
  97. string mainSatInfo = "23467,-1608418.46,5994257.60,3139819.89,-6632.8731,-373.9909,-2678.2335";
  98. string adja1SatInfo = "40892,-4629555.87,4978929.91,1487241.78,-4890.2693,-3337.6709,-4031.3087";
  99. this.lcX1.Text = "主星坐标X";
  100. this.lcY1.Text = "主星坐标Y";
  101. this.lcZ1.Text = "主星坐标Z";
  102. this.lcVX1.Text = "主星坐标VX";
  103. this.lcVY1.Text = "主星坐标VY";
  104. this.lcVZ1.Text = "主星坐标VZ";
  105. this.lcX2.Text = "邻星坐标X";
  106. this.lcY2.Text = "邻星坐标Y";
  107. this.lcZ2.Text = "邻星坐标Z";
  108. this.lcVX2.Text = "邻星坐标VX";
  109. this.lcVY2.Text = "邻星坐标VY";
  110. this.lcVZ2.Text = "邻星坐标VZ";
  111. var main = mainSatInfo.Split(',');
  112. int idx = 0;
  113. txtX1.EditValue = main[++idx];
  114. txtY1.EditValue = main[++idx];
  115. txtZ1.EditValue = main[++idx];
  116. txtVX1.EditValue = main[++idx];
  117. txtVY1.EditValue = main[++idx];
  118. txtVZ1.EditValue = main[++idx];
  119. var adja = adja1SatInfo.Split(',');
  120. idx = 0;
  121. txtX2.EditValue = adja[++idx];
  122. txtY2.EditValue = adja[++idx];
  123. txtZ2.EditValue = adja[++idx];
  124. txtVX2.EditValue = adja[++idx];
  125. txtVY2.EditValue = adja[++idx];
  126. txtVZ2.EditValue = adja[++idx];
  127. this.lcX3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  128. this.lcY3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  129. this.lcZ3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  130. this.lcVX3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  131. this.lcVY3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  132. this.lcVZ3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  133. }
  134. this.layoutControl1.BestFit();
  135. }
  136. private async void btnOk_Click(object sender, EventArgs e)
  137. {
  138. try
  139. {
  140. var strTar = txtTar.Text.Replace(",", ",");
  141. var fuHz = (Convert.ToDouble(txtFuMhz.Text)+44) * 1e6;
  142. double lon = Convert.ToDouble(strTar.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[0]);
  143. double lat = Convert.ToDouble(strTar.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1]);
  144. double x1 = Convert.ToDouble(txtX1.Text);
  145. double y1 = Convert.ToDouble(txtY1.Text);
  146. double z1 = Convert.ToDouble(txtZ1.Text);
  147. double vx1 = Convert.ToDouble(txtVX1.Text);
  148. double vy1 = Convert.ToDouble(txtVY1.Text);
  149. double vz1 = Convert.ToDouble(txtVZ1.Text);
  150. double[] ephX1 = new double[6] { x1, y1, z1, vx1, vy1, vz1 };
  151. double x2 = Convert.ToDouble(txtX2.Text);
  152. double y2 = Convert.ToDouble(txtY2.Text);
  153. double z2 = Convert.ToDouble(txtZ2.Text);
  154. double vx2 = Convert.ToDouble(txtVX2.Text);
  155. double vy2 = Convert.ToDouble(txtVY2.Text);
  156. double vz2 = Convert.ToDouble(txtVZ2.Text);
  157. double[] ephX2 = new double[6] { x2, y2, z2, vx2, vy2, vz2 };
  158. double[] targetPos = new double[3] { lon, lat, 0 };
  159. var df1 = DfoCalcAPI.DfoCalc(targetPos, ephX1, fuHz);
  160. var df2 = DfoCalcAPI.DfoCalc(targetPos, ephX2, fuHz);
  161. var editvalue = cbPosType.EditValue as RadioGroupItem;
  162. var posType = (EnumPosType)editvalue.Value;
  163. if (posType == EnumPosType.X1Leo)
  164. {
  165. double x3 = Convert.ToDouble(txtX21.Text);
  166. double y3 = Convert.ToDouble(txtY21.Text);
  167. double z3 = Convert.ToDouble(txtZ21.Text);
  168. double vx3 = Convert.ToDouble(txtVX21.Text);
  169. double vy3 = Convert.ToDouble(txtVY21.Text);
  170. double vz3 = Convert.ToDouble(txtVZ21.Text);
  171. double[] ephX3 = new double[6] { x3, y3, z3, vx3, vy3, vz3 };
  172. var df3 = DfoCalcAPI.DfoCalc(targetPos, ephX3, fuHz);
  173. this.txtRes.Text = $"第二时刻频差预测值:{df2 - df1:f3}Hz 第三时刻频差预测值:{df3 - df1:f3}Hz";
  174. }
  175. else if (posType == EnumPosType.X2Leo)
  176. {
  177. this.txtRes.Text = $"主邻频差预测值:{df1 - df2:f3}Hz";
  178. }
  179. }
  180. catch (Exception ex)
  181. {
  182. await LogHelper.Error("频差预测出错", ex);
  183. DxHelper.MsgBoxHelper.ShowError("频差预测出错");
  184. }
  185. }
  186. }
  187. }