4

Rの円上の等距離n点の座標を取得したい.

数学的には次のようになります: exp((2*pi * i)*(k/n)) ここで 0 <= k < n

この問題を処理するための多くの SOF 質問があります。すべてのソリューションは非 R 環境にあります。

球上に n 個の点を均等に分散する(Java、Python のソリューションを提示)

円上に点を生成する(非 R ソリューション)

円上の 8 つの等距離点のピクセル座標を計算する(python ソリューション)

円上に均等に分布する描画点(非 R ソリューション)

Rで円の周りに点をプロットする方法(等間隔ではありません)

円周上のすべての点の座標(非 R 解)

Pebble で円を n 個の等しい半分に分割する点の座標

画面上に正確にN点を効率的に描画するには? (python ソリューション)

n 点の円上のおおよその位置(非 R 解)

円上のベクトル点の決定

私が解決のためにしたこと:

# For 4 points, 0<=k<4    
exp((2*pi*sqrt(-1))*(0/4)); exp((2*pi*sqrt(-1))*(1/4)); exp((2*pi*sqrt(-1))*(2/4)); exp((2*pi*sqrt(-1))*(3/4)) 

複素数 i は R では定義されていません。pi (3.14) の逆のような定数はありません。i をシミュレートするトリック sqrt(-1) は機能しません。エラー:

[1] NaN 
Warning message: In sqrt(-1) : NaNs produced
4

3 に答える 3

5

複素数を使用してこれを非常に簡単に実現できますが、正しい構文を使用する必要があります。一般に、複素数はai + b(eg 3i + 2) のように記述できます。虚数成分しかない場合は、 と書くことができますai。したがって、架空のものは単純に1iです。

Npoints = 10
points = exp(pi * 1i * seq(0, 2, length.out = Npoints+1)[-1])
plot(points)

ここに画像の説明を入力

何らかの理由で、複素数からデカルト平面に変換する必要がある場合は、 と を使用して実数成分と虚数成分を抽出できRe()ますIm()

points.Cartesian = data.frame(x=Re(points), y=Im(points))
于 2016-10-27T13:34:20.947 に答える
3
f <- function(x){
  i <- sqrt(as.complex(-1))
  exp(2*pi*i*x)
}

> f(0/4)
[1] 1+0i
> f(1/4)
[1] 0+1i
> f(2/4)
[1] -1+0i
> f(3/4)
[1] 0-1i

そうは言っても、複素数に頼らなくても、円上の等間隔の点を見つけることはできませんか?

eq_spacing <- function(n, r = 1){
  polypoints <- seq(0, 2*pi, length.out=n+1)
  polypoints <- polypoints[-length(polypoints)]
  circx <- r * sin(polypoints)
  circy <- r * cos(polypoints)
  data.frame(x=circx, y=circy)
}

eq_spacing(4)
               x             y
 1  0.000000e+00  1.000000e+00
 2  1.000000e+00  6.123032e-17
 3  1.224606e-16 -1.000000e+00
 4 -1.000000e+00 -1.836910e-16

plot(eq_spacing(20), asp = 1)

ここに画像の説明を入力

于 2016-10-27T07:53:20.287 に答える
2

Yoもこれを試して(そして複雑な計算を避けて)、実平面上の単位円上に点を持たせることができます:

n <- 50 # number of points you want on the unit circle
pts.circle <- t(sapply(1:n,function(r)c(cos(2*r*pi/n),sin(2*r*pi/n))))
plot(pts.circle, col='red', pch=19, xlab='x', ylab='y')

ここに画像の説明を入力

于 2016-10-27T08:08:22.907 に答える