我正在玩复杂地图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))
谢谢!
答案 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")