C++ Создание Atan2 из Atan

Как мне взять мою функцию atan и превратить ее в atan2? Например

float myAtan2(double a, double b)
{
    float atan2val = //calculate atan2 using atan
    return atan2val;
}

Извините, я не лучший в тригонометрии!


person coddding    schedule 24.11.2016    source источник
comment
en.wikipedia.org/wiki/Atan2#Definition_and_computation   -  person user4581301    schedule 24.11.2016
comment
Ха-ха, я собирался опубликовать это, user4581301. Если у вас уже есть функция atan, решение этой проблемы тривиально.   -  person Robert M.    schedule 24.11.2016
comment
@ Роберт М. вот почему я разместил этот вопрос, я знаю, что это легко сделать с помощью атана, но я не силен в тригонометрии.   -  person coddding    schedule 24.11.2016
comment
У меня сложилось впечатление, что у вас уже есть функция атана. Нет?   -  person Robert M.    schedule 24.11.2016
comment
@ Роберт М. у меня уже есть функция Atan. Но не могу понять, как с ним вычислить Atan2. Как я уже сказал, я сосать триггер   -  person coddding    schedule 24.11.2016
comment
Если у вас есть функциональный атан, просто используйте связанные формулы и несколько операторов if для обработки шести случаев. Это решенная проблема. Триггер не требуется.   -  person user4581301    schedule 24.11.2016
comment
@coddding Зачем тебе что-то знать о триггере? Wiki показывает логику, вам просто нужно перевести это в код. Любой программист должен уметь это делать, даже не зная, что делает функция atan.   -  person Barmar    schedule 24.11.2016
comment
Если мой ответ решит вашу проблему, не могли бы вы щелкнуть его как принятый, пожалуйста?   -  person Robert M.    schedule 24.11.2016
comment
@ Роберт М. нет проблем!   -  person coddding    schedule 24.11.2016


Ответы (1)


Что-то вроде этого:

float myAtan2(double a, double b)
{
    float atan2val;
    if (b > 0) {
        atan2val = atan(a/b);
    }
    else if ((b < 0) && (a >= 0) {
        atan2val = atan(a/b) + pi;
    }
    else if ((b < 0) && (a < 0) {
        atan2val = atan(a/b) - pi;
    }
    else if ((b = 0) && (a > 0)) {
        atan2val = pi / 2;
    }
    else if ((b = 0) && (a < 0)) {
        atan2val = 0 - (p / 2 );
    }
    else if ((b = 0) && (a = 0)) {
        atan2val = 1000;               //represents undefined
    }
    return atan2val;
}

Вы, вероятно, можете закодировать это красивее, но это логика, которую я взял отсюда: https://en.wikipedia.org/wiki/Atan2#Definition_and_computation.

Я возвращаю 1000 (невозможное значение для арктангенса), чтобы представить «неопределенное». Вы могли бы сделать это по-другому, возможно, используя NaN или что-то в этом роде.

person Robert M.    schedule 24.11.2016
comment
Разумный ответ, но он слишком урезан. Вы должны быть немного осторожны с тривиальными проблемами. Вы не хотите работать с кем-то, кто получил диплом в области программирования Cargo Cult. - person user4581301; 24.11.2016
comment
@user4581301 user4581301 Мне 14, лол, не волнуйтесь, это не для курса или диплома или чего-то еще, лол. Это просто небольшая программа, над которой я работаю для удовольствия, ничего больше. - person coddding; 24.11.2016