예제 #1
0
 /// <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))));
예제 #2
0
 private float GetHeight(float angle, float height) =>
 height + Mathf.Sin(AngleUtils.Deg2Rad(AngleUtils.NormalizeAngle(angle)) * 2) * height / 4;
예제 #3
0
 private float GetAzimut(float potential) =>
 AngleUtils.NormalizeAngle(potential * Time.deltaTime * 360 / (BASE_H_SPEED * speed));