在椭圆内均匀分布n个点

时间:2019-06-26 23:25:35

标签: math geometry uniform-distribution

如何在给定n及其短轴长度(可以假定长轴为x轴且大小为1)的椭圆内均匀分布n个点?或者,如果那不可能,那么如何选择n个点,以使任意两个点之间的最小距离最大化?

现在,我对运行昂贵的电子排斥模拟器感到不安(希望有一个更好的解决方案,例如this question中的向日葵函数,以便将n个点分布在一个圆中)。 n最有可能在10到100点之间,但是如果它对所有n都有效,那将是很好的。

2 个答案:

答案 0 :(得分:1)

相当简单的方法:

使D距离近似为D=Sqrt(Pi*b/N )的初始值,其中b是短轴长度。

生成像元大小为D的点的三角形网格(带有等边三角形,以提供最密集的堆积)。计数给定椭圆内的点的数量。

如果它小于N,则将距离D减小,将其增大-将D增大。重复直到恰好有N个点在内部。

依赖性CountInside <=> D是固定起点的单调,因此您可以使用二进制搜索更快地获得结果。

在边界附近可能会有2-4个对称点的复杂情况-当它们同时出入或进入内部时。如果遇到这种情况,请稍微移动起点。

答案 1 :(得分:1)

如果椭圆以(0,0)为中心,如果a=1是长半径,b是短半径,并且主轴是水平的,则椭圆的方程为{{ 1}},其中x' A x = 1是矩阵

A

现在,这是一种使用公式 / \ | 1 0 | | 0 1/b² | \ / 在椭圆内部进行均匀采样的方法。取x' A x = r的上三角Cholesky因子,说A。在这里,U就是

U

在以 / \ | 1 0 | | 0 1/b | \ / 为中心且半径为y的圆上均匀地随机选择一个点(0,0)。然后r是在椭圆中均匀随机选取的点。

此方法不仅在二维情况下(用“超球面”替换“圆”),还可以在任意维度上使用。

因此,对于我们目前的情况,这里是伪代码,假设x = U^{-1}y统一生成0到1之间的数字。

random()

这是一个R代码,用于生成R = sqrt(random()) theta = random() * 2 * pi x1 = R * cos(theta) x2 = b * R * sin(theta) 点:

n

enter image description here