/// <summary> /// Конвертирует декартовые координаты в полярные. Используется координатная /// система unity, где ось Y направленна вверх. /// </summary> /// <param name="decart">Вектор в декартовых координатах. /// (Ось Y направленна вверх)</param> /// <returns>Возвращает вектор в полярных координатах /// [дальность; азимутальный угол; угол места]</returns> public static Vector3 DecToPolar(Vector3 decart) => decart == Vector3.zero ? Vector3.zero : new Vector3(decart.magnitude, AngleUtils.NormalizeAngle(90 - AngleUtils.Rad2Deg(decart.x > 0 && decart.z >= 0 ? Mathf.Atan(decart.z / decart.x) : decart.x > 0 && decart.z < 0 ? Mathf.Atan(decart.z / decart.x) + 2 * Mathf.PI : decart.x < 0 ? Mathf.Atan(decart.z / decart.x) + Mathf.PI : Mathf.Abs(decart.x) < ZERO_ACCURACY && decart.z > 0 ? Mathf.PI / 2 : Mathf.Abs(decart.x) < ZERO_ACCURACY && decart.z < 0 ? 3 * Mathf.PI / 2 : 0)), AngleUtils.NormalizeAngle(90 - AngleUtils.Rad2Deg(Mathf.Acos(decart.y / decart.magnitude))));
private float GetHeight(float angle, float height) => height + Mathf.Sin(AngleUtils.Deg2Rad(AngleUtils.NormalizeAngle(angle)) * 2) * height / 4;
private float GetAzimut(float potential) => AngleUtils.NormalizeAngle(potential * Time.deltaTime * 360 / (BASE_H_SPEED * speed));