簡體   English   中英

R中圓圈上等距n點的坐標?

[英]Coordinates of equally distanced n points on a circle in R?

我想得到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)。 使用sqrt(-1)來模擬我不起作用; 錯誤:

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

我們可以使用復數來實現這一點,但是您需要使用正確的語法。 通常,復數可以寫為ai + b (例如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))
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)

在此輸入圖像描述

你也可以嘗試這個(並避免復雜的算術)在真實平面上的單位圓上有點:

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')

在此輸入圖像描述

暫無
暫無

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

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