R中圆上等距n点的坐标?

R中圆上等距n点的坐标?,r,geometry,coordinates,evenly,R,Geometry,Coordinates,Evenly,我想得到R中圆上等距n点的坐标 : exp((2*pi*i)*(k/n)),其中0f(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

我想得到R中圆上等距n点的坐标

: exp((2*pi*i)*(k/n)),其中0
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)
eq_spatingYo也可以尝试这样做(避免复杂的运算),使单位圆上的点位于实平面上:

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

n我们可以使用复数来实现这一点,但您需要使用正确的语法。通常,复数可以写成
ai+b
(例如
3i+2
)。如果只有一个虚部,我们可以只写
ai
。所以,假想的一个就是
1i

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

如果出于任何原因,需要将复数转换为笛卡尔平面,可以使用
Re()
Im()
提取实部和虚部


f(0/4)=0+0i是原点,而不是在单位圆上。当我将f定义中的
exp(2*pi*I)*x
更改为
exp((2*pi*I)*x)
时,它起作用了。很抱歉,我在删除括号时出错。从功能上讲,塞巴斯蒂安c的答案是正确的,因为它包含复数坐标(例如(0,I))。另一方面,sandipan的答案是实用的,因为它隔离了复杂的坐标,并且表示(x,y)数字,没有i。由于还没有决定接受哪一个答案,我选择了桑迪潘的。顺便说一句,非常感谢塞巴斯蒂安,因为他认为我是.complex(-1)
更简单的方法是使用
1i
。不必到处乱搞
as.complex
sqrt(-1)
@dww我知道有这样的东西,但却忘了找,谢谢!我将
…Npoints+1][-1])
更改为
…Npoints+1][-(Npoints+1)]
以匹配数学解(0这真是太好了
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')
Npoints = 10
points = exp(pi * 1i * seq(0, 2, length.out = Npoints+1)[-1])
plot(points)
points.Cartesian = data.frame(x=Re(points), y=Im(points))