LINUX.ORG.RU

Оптимизация угла поворота


0

1

Дело следующее: Имеется объект с определенной скоростью поворота и целью поворота (углом, который нужно достичь). Угол объекта от +Пи до -Пи соответственно. Так вот, как сделать, чтобы при угле объекта в 3.13 и цели в -3.1 к примеру, он вспоминал про то, что короче пусть с другой стороны? (Знаю, вопрос довольно глуп, но обычно я обходился без этого. Желательно бы показать, как это реализуется на C++)...

Так вот, как сделать, чтобы при угле объекта в 3.13 и цели в -3.1 к примеру, он вспоминал про то, что короче пусть с другой стороны?

Если разница по модулю больше π, значит путь с другой стороны короче.

i-rinat ★★★★★
()
Ответ на: комментарий от anonymous

тьху.. у тебя там ещё другой угол какой-то. Идею ты понял вобщем.

anonymous
()
Ответ на: комментарий от anonymous

с тебя $1000.

Нет, с тебя. Каждому зашедшему в эту тему. В качестве компенсации морального вреда, вызванного лицезрением произведенного тобой быдлокода.

auto12884839
()

Если я правильно понял задачу, то вот как я делал в Toy Defense:

float Utils::mod(float value, float module)
{
    float delta = value - floorf(value / module) * module;
    return (delta > module * 0.5f) ? delta - module : module;
}

bool Utils::rotateTo(float dt, float angle_desired, float accuracy, float speed, float* angle)              
{
    for(float a = 0.0f; a < speed; a += accuracy)
    {   
        float delta = Utils::mod(angle_desired - *angle, M_PI * 2.0f); 
        if(fabsf(delta) > M_PI / 180.0f)
        {   
            *angle += (delta < 0.0f ? -dt : dt);
        }   

        if(fabsf(delta) < accuracy)
        {   
            return true;
        }   
    }   

    return false;
}

Таким способом у меня поворачивалась башня в кратчайшую сторону на нужную цель. Когда поворот с нужной точностью был совершен, то производился выстрел.

Параметр angle_desired расчитывался каждый раз при смене или движении цели. Параметр angle содержал текущий угол поворота башни.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.