簡體   English   中英

R:將笛卡爾坐標轉換為極坐標並排序

[英]R: Converting cartesian to polar and sorting

考慮具有笛卡爾坐標系中頂點的多邊形(不帶孔):

> 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

這是具有中心(紅點)的多邊形的圖 在此處輸入圖片說明 X轉換為極坐標系

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

假設中心為(0,0)。 現在,我想將點安排為theta的遞增值,取值范圍為02 * pi

卡在這里這樣做。

任何建議!

由於atan會將-pi/2值返回到pi/2 ,因此您可以將計算出的theta值轉換為以(x, y)坐標的符號為*(0,2 * pi)*的條件。 這樣的事情可能適合您:

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() 否則保持自己。 這樣,您可以確保theta位於(0, 2*pi)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM