Генерация точек круга - PullRequest
0 голосов
/ 09 мая 2018

Я просто играю с изображением кругов под сложной картой 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 голосов
/ 09 мая 2018

Параметризация по углу:

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

Дает координаты x-y для n равномерно расположенных точек на окружности радиуса r. Если close_loop = TRUE, первая точка повторяется в конце. Требуется около 0,2 секунды, чтобы заработать 1 ММ очков на моем ноутбуке.

И есть plot.formula функция, которая доставит это в экземпляр:

plot( y ~ x, data = xy<- circle_xy(100,1), type="l")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...