Math 在n维环面上生成随机点

Math 在n维环面上生成随机点,math,random,geometry,evolutionary-algorithm,Math,Random,Geometry,Evolutionary Algorithm,我想生成位于n维环面上的随机点。我找到了如何在曲面上生成点的公式: u、 五∈ [0,2*pi);c,a>0 我现在的问题是:如何将这个公式扩展到n维。如果您对此有任何帮助,我们将不胜感激。我想您可以递归地这样做。从向量空间的完整正交基开始,让当前位置作为原点。在每一步中,选择前两个坐标向量所跨越的平面中的一点TOR,即取w1=cos(t)*v1+sin(t)*v2.移动其他基向量,即w2=v3,w3=v4,…。也从当前位置朝w1方向迈出一步,前面选择半径r1。如果只剩下一个基向量,则当前点是最

我想生成位于n维环面上的随机点。我找到了如何在曲面上生成点的公式:

u、 五∈ [0,2*pi);c,a>0


我现在的问题是:如何将这个公式扩展到n维。如果您对此有任何帮助,我们将不胜感激。

我想您可以递归地这样做。从向量空间的完整正交基开始,让当前位置作为原点。在每一步中,选择前两个坐标向量所跨越的平面中的一点TOR,即取w1=cos(t)*v1+sin(t)*v2.移动其他基向量,即w2=v3,w3=v4,…。也从当前位置朝w1方向迈出一步,前面选择半径r1。如果只剩下一个基向量,则当前点是最外层递归调用的n维环面上的点


请注意,虽然上述方法可能用于随机选择点,但它不会统一选择点。这可能是一个更难的问题,在您担心实现之前,您肯定应该询问该方法的数学原理,或者也许是为了获得正确的数学原理。

n-torus(n是圆环表面的维数;因此面包圈或甜甜圈是2个圆环,而不是3个圆环)是n矩形的平滑映射。一种方法是在矩形上生成点,然后将它们映射到圆环上。除了解决如何将矩形映射到圆环上的问题之外(我现在还不知道),存在这样一个问题,即即使矩形上的点分布均匀,环面上的点分布也不均匀。但必须有一种方法来调整矩形上的分布,使其在环面上均匀。

仅均匀地生成
u
v
,不一定会导致从环面均匀地进行MPE。需要额外的步骤

J.F.Williamson,“曲面上分布点的随机选择”,《医学与生物学物理学》32(10),1987年,描述了在参数曲面上选择均匀随机点的一般方法。这是一种接受/拒绝方法,根据拉伸因子(梯度范数)接受或拒绝每个候选点。若要对参数曲面使用此方法,必须了解曲面的以下几点:-

  • x(u,v)
    y(u,v)
    z(u,v)
    ,它们是从二维坐标
    u
    v
    生成三维坐标的函数

  • u
    v
    的范围

  • g(点)
    ,曲面上每个点的梯度范数(“拉伸因子”),以及

  • gmax
    ,整个表面的最大值
    g

对于您在问题中给出的参数化三维环面,
g
gmax
如下所示:

  • g(u,v)=a*(c+cos(v)*a)
  • gmax=a*(a+c)
然后,在具有圆环半径
c
和管半径
a
的三维圆环表面上生成均匀随机点的算法如下所示(其中
rndextrange(x,y)
返回
[x,y]中的一个数字)
均匀随机,而
RNDRANGE(x,y)
返回
[x,y]中的一个数字
均匀随机):

如果您有n维环面生成公式,可以使用类似的方法在该环面上生成均匀的随机点(如果梯度范数等于或超过[0,
gmax
)中的随机数,则接受候选点,
gmax
是梯度的最大范数)

x = (c + a * cos(v)) * cos(u)
y = (c + a * cos(v)) * sin(u)
z = a * sin(v)
// Maximum stretch factor for torus
gmax = a * (a + c)
while true
 u = RNDEXCRANGE(0, pi * 2)
 v = RNDEXCRANGE(0, pi * 2)
 x = cos(u)*(c+cos(v)*a)
 y = sin(u)*(c+cos(v)*a)
 z = sin(v)*a
 // Norm of gradient (stretch factor)
 g = a*abs(c+cos(v)*a)
 if g >= RNDRANGE(0, gmax)
    // Accept the point
    return [x, y, z]
 end
end