R:将笛卡儿转换为极地并进行排序

时间:2016-05-20 11:11:33

标签: r

考虑带有笛卡尔坐标系中顶点的多边形(带有外孔):

> X=
             x           y
[1,] -10.951654  5.1999753
[2,]  -8.648792  7.5526423
[3,]  -5.682459  8.2535191
[4,]  -1.714430  6.4598705
[5,]  -1.606767  3.1157852
[6,]  -0.143845  0.3147358
[7,]   3.823051 -1.4814188
[8,]   7.789705 -3.2781072
[9,]  10.053431 -0.8261339
[10,]  13.061571 -0.2348249
[11,]  13.394428 -3.4885483
[12,]  11.767807 -7.5279214
[13,]   9.264051 -9.3765475
[14,]   5.298010 -7.5785077
[15,]   1.331421 -5.7816749
[16,]  -2.635669 -3.9859493
[17,]  -6.603322 -2.1914693
[18,] -10.571699 -0.3985887
[19,] -14.541248  1.3916934
[20,] -14.102558  4.9583269
[21,] -10.951654  5.1999753

以下是多边形与中心(红点)enter image description here的关系图 将 X 转换为极坐标系

 >theta_1=(atan(X[,2]/X[,1]))
 >r_1=sqrt((X[,1]^2)+(X[,2]^2)) 

假设中心为(0,0)。现在我想将这些点排列为从 0 2 * pi 的值增加的theta值。

坚持这样做。

任何建议!!

1 个答案:

答案 0 :(得分:1)

由于atan会将值从-pi/2返回到pi/2,因此您可以在{{1}的符号上将计算的theta值转换为*(0,2 * pi)*条件坐标。这样的事可能适合你:

(x, y)

如果积分位于第二或第三象限,请将library(dplyr) coords <- as.data.frame(X) mutate(coords, theta = ifelse(x < 0, atan(y / x) + pi, ifelse(y < 0 , atan(y / x) + 2*pi, atan(y / x)))) %>% arrange(theta) x y theta 1 -1.714430 6.4598705 1.830213 2 -0.143845 0.3147358 1.999484 3 -1.606767 3.1157852 2.046914 4 -5.682459 8.2535191 2.173755 5 -8.648792 7.5526423 2.423749 6 -10.951654 5.1999753 2.698298 7 -10.951654 5.1999753 2.698298 8 -14.102558 4.9583269 2.803502 9 -14.541248 1.3916934 3.046177 10 -10.571699 -0.3985887 3.179278 11 -6.603322 -2.1914693 3.462029 12 -2.635669 -3.9859493 4.128153 13 1.331421 -5.7816749 4.938726 14 5.298010 -7.5785077 5.322500 15 9.264051 -9.3765475 5.491752 16 11.767807 -7.5279214 5.714082 17 7.789705 -3.2781072 5.884856 18 3.823051 -1.4814188 5.913504 19 13.394428 -3.4885483 6.028398 20 10.053431 -0.8261339 6.201195 21 13.061571 -0.2348249 6.265209 添加到pi;如果这些点位于第四象限,请将atan()添加到2*pi;保持自己。通过这种方式,您可以保证您的θ位于atan()