考虑带有笛卡尔坐标系中顶点的多边形(带有外孔):
> 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
>theta_1=(atan(X[,2]/X[,1]))
>r_1=sqrt((X[,1]^2)+(X[,2]^2))
假设中心为(0,0)。现在我想将这些点排列为从 0 到 2 * pi 的值增加的theta值。
坚持这样做。
任何建议!!
答案 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()
。