Beispiel #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))));
Beispiel #2
0
    private void Update()
    {
        switch (moveType)
        {
        case MoveType.Circular:
        case MoveType.CircularSin:
            angleSpeed         = AngleUtils.Rad2Deg(speed / radius);
            newPos             = GetCircularPos(moveType);
            velocity           = (newPos - transform.position).normalized * speed;
            transform.position = newPos;
            break;

        case MoveType.InDirection: break;

        default: throw new ArgumentOutOfRangeException();
        }
        dirRelativeRocket = PvoUtils.DecToPolar(transform.position - pvo.position);
    }