- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要均匀地采样三角形 ABC,我可以使用以下公式:
P = (1 - sqrt(r1)) * A + (sqrt(r1)*(1 - r2)) * B + (r2*sqrt(r1)) * C
其中 r1 和 r2 是 0 到 1 之间的随机数。采样越多越好。但是如果我想获得更好的分布,同时保持较低的样本数量怎么办?
例如,如果我有一个正方形,我可以将它隐式地划分为一个 N x N 网格,并在较小的网格正方形内生成一个随机样本。像这样:
float u = (x + rnd(seed)) / width;
float v = (y + rnd(seed)) / height;
最佳答案
好的,我有一些想法并相信使用准随机数可以提高三角形覆盖范围的“均匀性”,而无需分割为更小的三角形。 Quasirandom sampling如 Wiki 文章所示,使用 Sobol 序列可以提供更好的覆盖范围。
这是使用标准 RNG 的三角形中的 200 个点(无论它在 Python 中是什么)
这是从 Sobol 2D 序列中采样的 200 个点的图片
对我来说看起来好多了。要玩的 Python 代码
import os
import math
import random
import numpy as np
import matplotlib.pyplot as plt
import sobol_seq
def trisample(A, B, C, r1, r2):
s1 = math.sqrt(r1)
x = A[0] * (1.0 - s1) + B[0] * (1.0 - r2) * s1 + C[0] * r2 * s1
y = A[1] * (1.0 - s1) + B[1] * (1.0 - r2) * s1 + C[1] * r2 * s1
return (x, y)
if __name__ == "__main__":
N = 200
A = (0.0, 0.0)
B = (1.0, 0.0)
C = (0.5, 1.0)
seed = 1
xx = list()
yy = list()
random.seed(312345)
for k in range(0, N):
pts, seed = sobol_seq.i4_sobol(2, seed)
r1 = pts[0]
r2 = pts[1]
# uncomment if you want standard rng
#r1 = random.random()
#r2 = random.random()
pt = trisample(A, B, C, r1, r2)
xx.append(pt[0])
yy.append(pt[1])
plt.scatter(xx, yy)
plt.show()
sys.exit(0)
关于random - 通过将三角形分成更小的部分来对三角形进行均匀采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46261832/
我需要在半径R的圆内生成一个均匀随机点。 我意识到,通过在区间 [0 ... 2π) 中选择均匀随机的角度,并在区间 (0 ... R) 中选择均匀随机的半径,我最终会得到更多的点朝向中心,因为对于两
我想在一个正方形内生成 N 个点(均匀地)。我怎样才能做到这一点? 最佳答案 非常酷的问题,比我想象的要困难得多,但这就是想法。有关于 n 边形的论文,但我只会做正方形。因此,圆的均匀分布是一个常见问
考虑以下示例: import itertools import numpy as np a = np.arange(0,5) b = np.arange(0,3) c = np.arange(0,7)
SQL Server 将一组值分成 5 组,每组的 sum(count) 应该均匀分布。 表仅包含 2 列 rid 和 count。 create table t1(rid int, count in
我有以下简单的 HTML。 A B C 和 CSS: ul { width: 100%; display: flex; flex-direction:
我是一名优秀的程序员,十分优秀!