Как к карте atan2 () до градусов 0-360

Уверенный это возможно:

open input file
open output file 1
count = 0
for each line in file:
    write to output file
    count = count + 1
    if count > maxlines:
         close output file
         open next output file
         count = 0
91
задан Bob Gilmore 17 November 2013 в 21:04
поделиться

5 ответов

(x > 0 ? x : (2*PI + x)) * 360 / (2*PI)
55
ответ дан 24 November 2019 в 06:41
поделиться

@erikkallen близок, но не совсем так.

theta_rad = atan2(y,x);
theta_deg = (theta_rad/M_PI*180) + (theta_rad > 0 ? 0 : 360);

Это должно работать на C ++: (в зависимости от того, как реализован fmod, он может быть быстрее или медленнее, чем условное выражение)

theta_deg = fmod(atan2(y,x)/M_PI*180,360);

В качестве альтернативы вы можете сделать это:

theta_deg = atan2(-y,-x)/M_PI*180 + 180;

поскольку (x, y) и (-x, -y) различаются по углам на 180 градусов.

20
ответ дан 24 November 2019 в 06:41
поделиться

Или, если вам не нравится ветвление, просто отмените два параметра и добавьте 180 ° к ответу.

(Добавление 180 ° к возвращаемому значению прекрасно помещает его в 0- 360, но меняет угол. Отрицание обоих входных параметров меняет угол.)

31
ответ дан 24 November 2019 в 06:41
поделиться

Просто добавьте 360 °, если ответ от atan2 меньше 0 °.

36
ответ дан 24 November 2019 в 06:41
поделиться

@Jason S: ваш вариант "fmod" не будет работать в реализации, соответствующей стандартам. Стандарт C ясен и ясен (7.12.10.1, "функции fmod"):

если y не равно нулю, результат имеет тот же знак, что и x

, таким образом,

fmod(atan2(y,x)/M_PI*180,360)

на самом деле является просто многословным переписыванием :

atan2(y,x)/M_PI*180

Ваше третье предложение, однако, уместно.

6
ответ дан 24 November 2019 в 06:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: