DectionModel.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. namespace SimulationCommon;
  2. public class DectionModel
  3. {
  4. /// <summary>
  5. ///
  6. /// </summary>
  7. /// <param name="a">光电转塔水平范围</param>
  8. /// <param name="f">红外探测器视场角</param>
  9. /// <param name="h">飞行高度</param>
  10. /// <param name="x">搜寻目标相对搜救力量的侧向距离</param>
  11. /// <param name="visibility"> 能见度(km)</param>
  12. /// <returns></returns>
  13. public static double GuangDian(double a, double f, double h, double Rx, double visibility)
  14. {
  15. double a1 = a * (Math.PI / 180);
  16. double f1 = f * (Math.PI / 180);
  17. double D = 2 * Math.Sin(a1) * h * 2 * Math.Tan(f1 / 2);
  18. double p = 1 - Math.Exp(-D * D / (4 * Math.PI * Rx * Rx));
  19. double px;
  20. if (visibility <= 9)
  21. {
  22. px = 0.4 * p;
  23. }
  24. else if (9 < visibility & visibility < 19)
  25. {
  26. px = 0.6 * p;
  27. }
  28. else if (19 < visibility & visibility < 28)
  29. {
  30. px = 0.8 * p;
  31. }
  32. else
  33. {
  34. px = p;
  35. }
  36. return px;
  37. }
  38. public static int GetResultGD(double px)
  39. {
  40. int result = 0;
  41. System.Random random = new();
  42. double randomNumber = random.NextDouble();
  43. if (px > randomNumber)
  44. {
  45. result = 1;
  46. return result;
  47. }
  48. return result;
  49. }
  50. /// <summary>
  51. ///
  52. /// </summary>
  53. /// <param name="λ"></param>
  54. /// <param name="Si"></param>
  55. /// <param name="Pt"></param>
  56. /// <param name="Gt"></param>
  57. /// <param name="Gr"></param>
  58. /// <param name="Rx">目标距离(km)</param>
  59. /// <returns></returns>
  60. public static double Radar(double λ, double Si, double Pt, double Gt, double Gr, double Rx)
  61. {
  62. double Si1 = Math.Pow(10, (Si / 10 - 3));
  63. double Pt1 = Math.Pow(10, (Pt / 10 - 3));
  64. double Gt1 = Math.Pow(10, Pt / 10);
  65. double Gr1 = Math.Pow(10, Gr / 10);
  66. double Rmax = Math.Pow(Pt1 * Gt1 * Gr1 * λ * λ / (64 * (Math.Pow(Math.PI, 3)) * Si1), 0.25);
  67. double px = Math.Exp(Math.Log(Math.E, 0.000001) / (1 + 19 * Math.Pow(Rx, 4) / Math.Pow(Rmax, 4)));
  68. return px;
  69. }
  70. public static int GetResultRadar(double px)
  71. {
  72. int result = 0;
  73. System.Random random = new();
  74. double randomNumber = random.NextDouble();
  75. if (px > randomNumber)
  76. {
  77. result = 1;
  78. return result;
  79. }
  80. return result;
  81. }
  82. }