Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Функция atan возвращает значения фрагментарно


Автор: Hrundel 21.11.2012, 01:58
Всем привет,

нужно значение угла от мыши (x, y) до координаты (0,0) окна.
Пишу следующее:

Код

double panel::checkSector(int x, int y)
{
    if(x > 1 & y > 1 & x < 300 & y < 300) return atan(x/y) * (180 / PI);
}


Возвращает значение для секторов:

если < 45° ==> 0.0
< 61° ==> 45°
<72° ==> 61°
<80° ==> 72°

и только начиная с 80 возвращает каждый градус отдельно.
Бред какой-то!!!
Что здесь может быть не так, и почему не возвращает каждый градус от 0 до 90?

Спасибо

Автор: Akina 21.11.2012, 08:03
Наверное, проблема в том, что int x / int y в аргументе даёт int результат...

Автор: maxim1000 21.11.2012, 08:39
и вообще лучше использовать atan2

Автор: Peter 23.12.2012, 14:17
Цитата(Hrundel @ 21.11.2012,  01:58)
Код

double panel::checkSector(int x, int y)
{
    if(x > 1 & y > 1 & x < 300 & y < 300) return atan(x/y) * (180 / PI);
}

Может быть, хотели написать условие
Код
    if(x > 1 && y > 1 && x < 300 && y < 300)

?
И, конечно, аргументом atan нужно бы поставить, например,
Код
((double)x / y)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)