2016-05-20 2 views
0

ソート:ここ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 極性座標系

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

にXを変形すると、(0,0)などの中心と仮定する。今度は、点を値の大きい値として取ることを、から2 * piに変更したいと思います。

ここにこだわっています。

+0

** **後で**を追加すると、 'theta_1'が増え、' r_1'が減少するようにデータを並べ替えることを意味しますか? –

答えて

1

-pi/2pi/2からatan戻り値ので、あなたは(x, y)座標の符号にコンディショニング* *(0、2 * PI)の計算シータ値を変換することができます。このような何かがあなたのために働く可能性があります。ポイントは第二または第三象限にある場合は、atan()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 

。ポイントが第4象限にある場合は、atan()2*piを追加します。そうでなければそれ自身を保つ。このようにして、あなたはシータが(0, 2*pi)にあることを保証します。

+0

ありがとうございます。私は主なポイントを得た。上記のコードを "coords"と説明してください。私がcoords = Xを取ると、次のエラーが表示されます:is.data.frame(.data)|| is.list(.data)|| is.environment(.data)がTRUEではない – Janak

+1

'coords'は' X'のdata.frameバージョンです。ちょうど答えを更新しました。 – Psidom

+0

どのような問題がありますか?エラーメッセージはありますか? – Psidom

関連する問題