如何在R中生成椭圆内均匀分布点与矩形内点用于后续计算
R语言生成指定范围均匀分布点的实现方案
需求说明
- 生成15000个指定椭圆内的均匀分布点,椭圆满足:$\frac{(x-2)2}{32} + \frac{(y-1)2}{22} \leq 1$
- 生成10000个指定矩形内的均匀分布点,矩形满足:$1 \leq x \leq 4,\ 0 \leq y \leq 3$
实现逻辑
- 椭圆内点生成:直接对极坐标半径采样会出现中心密度偏高的问题,因此采用单位圆均匀采样+仿射变换的方案:先对单位圆做均匀采样(半径取
sqrt(runif(n))修正密度偏差),再按椭圆的半轴长度缩放、按中心坐标平移得到椭圆内均匀分布的点,采样效率100%无浪费 - 矩形内点生成:直接对x、y两个维度分别用
runif()生成对应区间的均匀随机数即可
完整可运行代码
# -------------------------- # 1. 生成椭圆内15000个均匀点 # -------------------------- n_ellipse <- 15000 # 椭圆参数配置 center_x <- 2 center_y <- 1 semi_axis_x <- 3 semi_axis_y <- 2 # 单位圆均匀采样 r <- sqrt(runif(n_ellipse)) theta <- runif(n_ellipse, min = 0, max = 2*pi) # 仿射变换到目标椭圆 x_ellipse <- center_x + semi_axis_x * r * cos(theta) y_ellipse <- center_y + semi_axis_y * r * sin(theta) ellipse_df <- data.frame(x = x_ellipse, y = y_ellipse) # 验证点有效性(可选) valid_rate <- mean(((x_ellipse - center_x)^2 / semi_axis_x^2 + (y_ellipse - center_y)^2 / semi_axis_y^2) <= 1) cat("椭圆有效点占比:", valid_rate * 100, "%\n") # -------------------------- # 2. 生成矩形内10000个均匀点 # -------------------------- n_rect <- 10000 # 矩形区间配置 x_min <- 1 x_max <- 4 y_min <- 0 y_max <- 3 x_rect <- runif(n_rect, min = x_min, max = x_max) y_rect <- runif(n_rect, min = y_min, max = y_max) rect_df <- data.frame(x = x_rect, y = y_rect)
输出说明
最终生成的ellipse_df和rect_df两个数据框分别存储椭圆、矩形内的点坐标,可直接用于后续计算。
内容的提问来源于stack exchange,提问作者Vorrven
相关产品推荐
相关产品推荐

