Уверенный это возможно:
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
@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 градусов.
Или, если вам не нравится ветвление, просто отмените два параметра и добавьте 180 ° к ответу.
(Добавление 180 ° к возвращаемому значению прекрасно помещает его в 0- 360, но меняет угол. Отрицание обоих входных параметров меняет угол.)
Просто добавьте 360 °, если ответ от atan2 меньше 0 °.
@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
Ваше третье предложение, однако, уместно.