Это потому, что ваши точки неравномерно распределены по кругу.
Для генерации одинаковых точек по кругу (в более общем смысле, сферы) вы можете использовать пакет uniformly
:
library(uniformly)
npoints <- 2500
z <- runif_in_sphere(npoints, d = 2, r = 1)
rad.dist <- function(m, x.center = 0, y.center = 0) {
sqrt((m[, 1] - x.center) ^ 2 + (m[, 2] - y.center) ^ 2)
}
z.radial <- rad.dist(z)
# Bind radial distance column to coordinates
z <- cbind(z[, 1], z[, 2], z.radial)
# Rename columns for convenience
colnames(z) <- c("x", "y", "rd")
# Subset based on radial distance
outer.ring <- subset(z, z[, 3] >= 0.75)
# plot
par(pty = "s")
plot(outer.ring, pch = 20, cex = 0.20,
col = rgb(red = 0, green = 0, blue = 0, alpha = 0.5),
xlim = c(-1,1), ylim = c(-1,1))
Если ваша цель - получить единообразные точки в затрубном пространстве, вы можете напрямую сгенерировать их с помощью uniformly
:
z <- runif_in_annulus(1000, c(0,0), 0.75, 1)
plot(z, pch = 20, cex = 0.20,
col = rgb(red = 0, green = 0, blue = 0, alpha = 0.5),
xlim = c(-1,1), ylim = c(-1,1))