Это проблема, с которой я немного боролся и не смог найти там хорошего ответа. В конце концов я решил это в R, но подумал, что все равно опубликую его, если он понадобится другим. Если у кого-то есть более элегантное решение, я хотел бы его увидеть. Это немного грубая сила.
У меня есть ряд парных XY (декартовых) координат. Я могу легко получить углы между ними, используя простую команду atan(). Однако мне нужны углы в направлениях компаса (полярные? стороны света?) (где север = 0 °, восток = 90 ° и т. д.). Вот минимальный пример для получения данных и декартовых углов, и я разместил свое преобразование методом грубой силы в угол по компасу ниже. Преобразование градусов (из радианов) использует deg() из пакета 'circular'.
require(circular)
test <- data.frame(x=c(0,1,1,1,0,-1,-1,-1),y=c(1,1,0,-1,-1,-1,0,1))
test$angle <- deg(atan(test$y/test$x))
test
... производит
x y angle
1 0 1 90
2 1 1 45
3 1 0 0
4 1 -1 -45
5 0 -1 -90
6 -1 -1 45
7 -1 0 0
8 -1 1 -45
Обратите внимание, что углы в нижнем левом и верхнем левом квадрантах такие же, как и в нижнем и верхнем правом квадрантах, что приводит к потере направленности векторов.
atan2(x,y)
? - person baptiste   schedule 11.04.2014