/// <summary> /// математическая функция для просчета поляризационной характеристики /// </summary> /// <param name="fi">аргумент (для этой программы это тетта Q)</param> /// <param name="typeFunction">передаем тип функции зависит от кси и может быть 1, 2 или 3</param> /// <returns></returns> public float PolarCharacteristic(float fi, Enums.TypeFunction typeFunction, float dx) { float f_4 = General_F_4_WithOutAbs(consts.Q, typeFunction, dx); float f_4_abs = Math.Abs(f_4); float f_Q_abs = Math.Abs(f_4 * CosInRadians(consts.Q)); float a = 1; if (f_Q_abs == 0) { f_Q_abs = 0.0001F; } float m = f_4_abs / f_Q_abs; if (m > 1000) { m = 1000; } float b = m * a; float e = b * b > 1 ? (float)Math.Sqrt(1 - a * a / (b * b)) : (float)Math.Sqrt(0.1); var radicand = 1 - e * e * CosInRadians(fi) * CosInRadians(fi); float r = radicand < 0 //для защиты от отрицательного подкоренного выражения ? b / (float)Math.Sqrt(radicand) : b; return(r); }
/// <summary> /// расчет кси в зависимости от вида фукции /// </summary> /// <param name="x">аргумент функции</param> /// <param name="TypeE_a">передается 1(если кси меньше оптимального), 2(кси оптимальный) или 3(если кси критический) </param> /// <returns></returns> private float E_a(float x, Enums.TypeFunction TypeE_a) { switch (TypeE_a) { case Enums.TypeFunction.E_LessOpt: return(SinInRadians(x)); case Enums.TypeFunction.E_Opt: return(1F + 1F / (2F * consts.N) + SinInRadians(x)); case Enums.TypeFunction.E_Crit: return(1f / consts.N + SinInRadians(x)); default: throw new ArgumentException(); } }
/// <summary> /// в зависимости от типа спиральных антенн и вида кси (Е_а) выбираются фунции для просчета F от фи, тип спиральных антенн задается в GraficForm имеет значения 1 или 2 /// </summary> /// <param name="x">аргумент функции - (тут)Q</param> /// <param name="typeFunction">тип функции в зависимости от вида кси (Е_а) принимает значение 1, 2 или 3</param> /// <returns></returns> public float General_F_4_WithOutAbs(float x, Enums.TypeFunction typeFunction, float dx) => functionByTypeSpiralAntennasAndTypeFunction[consts.TypeSpiralAntennas][typeFunction](E_a(consts.A, typeFunction), x, dx);
public float General_F_Q(float x, Enums.TypeFunction typeFunction, float dx) => Math.Abs(General_F_4_WithOutAbs(x, typeFunction, dx) * CosInRadians(x));
/// <summary> /// Основная функция, которая выбирает, другие функции для просчета значения функции F в точке с аргументом X /// </summary> /// <param name="q">передавать значение Х</param> /// <param name="typeFunction">передавать 1, 2 или 3 рисуется 3 разных графика в зависимости от кси E</param> /// <param name="nameFunc">передвать "F_4" функция от фи , "F_Q"функция от тетта или "r" поляризационная характеристика</param> /// <returns>возвращает значение функции в точке X</returns> public float GeneralFuncForDrawDec(float q, Enums.TypeFunction typeFunction, Enums.NameFunction nameFunc, float dx) => generalFunctionsByNameFunc[nameFunc](q, typeFunction, dx);