Вторник, 26 Ноября 2024, 21:04

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
[Решено] Как получить правильный угол?
urbemAngeliДата: Суббота, 12 Мая 2018, 13:42 | Сообщение # 1
частый гость
Сейчас нет на сайте
Всем привет! Не могу разобраться с углами объекта. На картинке показан игрок, который может вращаться по часовой или против часовой стрелки. Углы которые подписаны (на первом скрине), я получил при помощи transPlayer.localEulerAngles.x. Мне нужно получить углы как показаны на втором скрине. Как я только не пробовал рассчитывать эти углы, однако если угол поворота игрока был ниже горизонтальной оси, рассчитанный угол становился неправильным. Может есть у кого какие идеи, как получить результат согласно второму скрину?
Скрин 1:


Скрин 2:


Вот решение, может кому-то пригодится:

public float Get360Angle(Vector3 a, Vector3 b)
{
float angle = Vector3.Angle(a, b);
return Vector3.Cross(a, b).z <= 0.0f ? angle : 360.0f - angle;
}


Сообщение отредактировал urbemAngeli - Воскресенье, 13 Мая 2018, 13:32
drcrackДата: Суббота, 12 Мая 2018, 16:54 | Сообщение # 2
старожил
Сейчас нет на сайте
Как-то так
Код

float AddAngle(float original, float angle){
    var r = original + angle;
    if(r < 0) r = 360 + r;
    if(r > 360) r -= 360;
    return r;
}

var playerAngle = 0f;

Console.WriteLine(AddAngle(playerAngle, 45));
Console.WriteLine(AddAngle(playerAngle, 135));
Console.WriteLine(AddAngle(playerAngle, 225));
Console.WriteLine(AddAngle(playerAngle, 315));
Abel399Дата: Суббота, 12 Мая 2018, 17:02 | Сообщение # 3
Surpass your limits. Right now.
Сейчас нет на сайте
drcrack, для большей точности я бы заменил if на while...

Ninja Slayer - 2D Physics Puzzle [cancelled]
drcrackДата: Суббота, 12 Мая 2018, 18:04 | Сообщение # 4
старожил
Сейчас нет на сайте
я не стал ставить while потому что это усложнило бы понимание кода для новичков
urbemAngeliДата: Суббота, 12 Мая 2018, 18:15 | Сообщение # 5
частый гость
Сейчас нет на сайте
drcrack, вы похоже меня не поняли. Попробую по другому объяснить. На первом скрине показан игрок с исходной позицией. При его повороте против часовой стрелки угол должен увеличиваться от 0 к 360, при вращении по час. стрелки уменьшаться. Сейчас же у меня, где выделено синим угол "обнуляется", хотя должен быть 180 град. Так вот, как получить угол поворота игрока вокруг своей оси от 0 к 360 ?, если transPlayer.localEulerAngles.x не тот угол показывает. А ваш метод добавляет к текущему углу еще значение, чего мне не нужно

Сообщение отредактировал urbemAngeli - Суббота, 12 Мая 2018, 18:19
drcrackДата: Суббота, 12 Мая 2018, 18:20 | Сообщение # 6
старожил
Сейчас нет на сайте
Если в момент, когда угол по нужной оси обнуляется после 179.99, в других осях тоже резко меняются углы, то дело в неоднозначности преобразования кватернионов в углы эйлера
Проверь это


Сообщение отредактировал drcrack - Суббота, 12 Мая 2018, 18:22
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг