在n维环面的表面上生成随机点

问题描述 投票:5回答:3

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

x = (c + a * cos(v)) * cos(u)
y = (c + a * cos(v)) * sin(u)
z = a * sin(v)

u,v∈[0,2 * pi]; c,a> 0。

我的问题是:如何将此公式扩展到n维。任何有关此事的帮助将不胜感激。

math random geometry evolutionary-algorithm
3个回答
1
投票

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

请注意,虽然上述内容可用于随机选择点,但不会统一选择它们。这可能是一个更难的问题,你肯定应该在Math SECross Validated (Statistics SE)上询问数学,以便在你担心实施之前获得数学。


0
投票

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


0
投票

仅仅均匀地生成uv不一定从圆环表面均匀地采样。还需要一个额外的步骤。

J.F.Williamson,“曲面上分布的点的随机选择”,Physics in Medicine&Biology 32(10),1987,描述了在参数表面上选择均匀随机点的一般方法。它是一种接受/拒绝方法,根据其伸展因子(梯度范数)接受或拒绝每个候选点。要将此方法用于参数曲面,必须了解表面的一些事项,即 -

  • x(u, v)y(u, v)z(u, v),它们是从二维坐标uv生成三维坐标的函数,
  • uv的范围,
  • g(point),表面上每个点的梯度(“伸展因子”)的范数,和
  • gmax,整个表面的g的最大值。

对于您在问题中给出的参数化的三维圆环,ggmax如下:

  • g(u, v) = a * (c + cos(v) * a)
  • gmax = a * (a + c)

在环面半径为c和管半径为a的三维环面上生成均匀随机点的算法如下(其中RNDEXCRANGE(x,y)返回[x,y)中的数字,RNDRANGE(x,y)返回[x,y]中的数字):

// 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

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

© www.soinside.com 2019 - 2024. All rights reserved.