生成圆的点

时间:2018-05-08 22:00:17

标签: r

我正在玩复杂地图exp(z)下的圆圈图像。

我无法找到内置R函数来生成给定半径圆上的点,所以我自己写了一个(用数字方式积分运动方程):

# Integration points:
N <- 10000
e <- 0.001
dt <- seq(0, e*(N-1), by=e)

Rp = pi         # radius of point circle
Rv = pi          # radius of vector circle

# Initial conditions:
px <- c(Rp)
py <- c(0)

vx <- c(0)
vy <- c(Rv)

Rp <- c()
Rv <- c()

ax <- c()
ay <- c()


for (i in(2:N)) {

Rp[i-1] <- sqrt(px[i-1]^2 + py[i-1]^2)
Rv[i-1] <- sqrt(vx[i-1]^2 + vy[i-1]^2)

ax[i-1] <- -(Rv[i-1]^2/Rp[i-1]^2)*px[i-1]  # acceleration toowards
ay[i-1] <- -(Rv[i-1]^2/Rp[i-1]^2)*py[i-1]  # center of circle

px[i] <- px[i-1] + e*vx[i-1] # dp_x = epsilon * v_x
py[i] <- py[i-1] + e*vy[i-1] # dp_y = epsilon * v_y

vx[i] <- vx[i-1] + e*ax[i-1]   # dv_x = epsilon * a_x
vy[i] <- vy[i-1] + e*ay[i-1]   # dv_y = epslon * a_y
}

complex(real=px,imaginary=py)

这似乎是为了获得一个圆圈而做的很多工作,而且程序很慢。是否有内置R功能为我做这个?

par(mfrow=c(1,2))
plot(cbind(px,py))
plot(exp(zs))

谢谢!

1 个答案:

答案 0 :(得分:2)

角度参数化:

circle_xy = function(n, r, close_loop = FALSE) {
  theta = seq(0, 2 * pi, length.out = n + 1)
  if(!close_loop) theta = theta[-(n + 1)]
  cbind(x = r * cos(theta), y = r * sin(theta))
}

为半径为n的圆上的r均匀间隔点提供x-y坐标。如果close_loop = TRUE,则在结束时重复第一点。在我的笔记本电脑上花费大约0.2秒生成1MM点。

还有plot.formula函数可以将其用于实例化:

plot( y ~ x, data = xy<- circle_xy(100,1), type="l")