相关疑难解决方法(0)

在球体上均匀分散n个点

我试图在球体上分散n个点,使得每个点在其周围具有"相同"区域.基本上,我试图通过评估n个点并假设每个区域元素是相同的(并且等于4pi r ^ 2/n)来在球体上集成函数.

我的问题与问题非常相关,但我似乎无法同意"接受"答案中提供的代码按预期工作(参见附图,通过选择R = 1000,nx = ny = 40生成).显然,我的观点更加集中在两极并且非常集中在赤道上.

有什么建议?

编辑:作为参考,我确实找到了一些生成网格的软件,使得每个点周围都有相等的"区域"(向下滚动以查看球体上的均匀区域分布),但是不是实现它们的代码,而是使用较少的 -耗时的方法:我简单地迭代方位角和极角([0,2pi]和[0,pi])并计算每个补片的''无穷小''区域(da = r ^ 2 sin theta dtheta dphi).这基本上是我在整个领域进行整合所需要的,我只是希望统一区域分布不会那么难实现.

algorithm math geometry integrate

18
推荐指数
2
解决办法
2万
查看次数

如何在更高维度的超球面上均匀分布点?

我对在尺寸为3或更高的球面上均匀分布N个点感兴趣。

更加具体:

  • 给定多个点N和多个维D(其中D> 1,N> 1)
  • 每个点到原点的距离必须为1
  • 两点之间的最小距离应尽可能大
  • 每个点到它最近的邻居的距离不必对于每个点都相同(实际上,除非点的数量形成柏拉图式实体的顶点,或者如果N <= D,则不可能相同。 )。

我对以下内容不感兴趣:

  • 在超球面上创建均匀的随机分布,因为我希望任意两点之间的最小距离尽可能大而不是随机分布。
  • 粒子排斥模拟类型的方法,因为它们难以实现并且需要花费很长的时间才能运行较大的N(理想情况下,该方法应该是确定性的,并且以O(n)为单位)。

满足这些条件的一种方法称为斐波那契晶格,但我只能在2d和3d中找到该方法的代码实现。

斐波纳契晶格(也称为斐波纳契螺旋)背后的方法是生成绕球体表面成螺旋形的一维线,以使该线所覆盖的表面积每转大致相同。然后,您可以丢掉均匀分布在螺旋上的N个点,它们将大致均匀地分布在球体的表面上。

此答案中,有一个针对3个维度的python实现,可生成以下内容:

在此处输入图片说明

我想知道斐波那契螺旋是否可以扩展到大于3的尺寸,并在数学堆栈交换中发布了一个问题。令我惊讶的是,我收到了两个令人惊讶的答案,据我所知(因为我不完全理解所显示的数学)表明确实有可能将该方法扩展到N维。

不幸的是,我对所显示的数学知识还不够了解,无法将任何一个答案都转换成(伪)代码。我是一位经验丰富的计算机程序员,但是我的数学背景仅此而已。

我将复制我认为是以下答案之一最重要的部分(不幸的是,SO不支持mathjax,因此我必须复制为图像)

在此处输入图片说明

我遇到的上述困难:

  • 如何解析用于?n的反函数?
  • 给出的示例是d = 3的。如何为任意d生成公式?

在座的任何人都可以理解所涉及的数学知识,从而能够朝着链接斐波那契晶格问题的任一答案的伪代码实现取得进展?我知道完整的实施可能很困难,因此我对部分实施感到满意,该实施可以使我足够自己完成其余的工作。

为简化起见,我已经编写了一个函数,该函数将N个维度的球面坐标转换为笛卡尔坐标,因此该实现可以输出任意一个,因为我可以轻松进行转换。

另外,我看到一个答案为每个附加维使用下一个质数。我可以轻松地编写一个输出每个连续素数的函数,因此可以假定已经实现了。

如果未能在N个维度上实现斐波那契晶格,我很乐意接受满足上述约束的另一种方法。

math geometry pseudocode

18
推荐指数
2
解决办法
464
查看次数

数学上产生球形六边形网格

我正在尝试创建一个类似于此的形状,具有12个五边形的六边形,任意大小.

https://i.stack.imgur.com/F35J0.png

(图片来源)

唯一的问题是,我完全不知道生成它需要什么样的代码!

目标是能够在3D空间中获取一个点并将其转换为网格上的位置坐标,反之亦然,并获取网格位置并获取绘制网格的相关顶点.

我甚至不知道如何为此存储网格位置.3个五边形之间的每个"三部分"是否都有自己的2D坐标?

我很可能会使用C#,但我更感兴趣的是使用哪种算法以及它们如何工作的解释,而不是只给我一段代码的人.

algorithm geometry tiling hexagonal-tiles computational-geometry

9
推荐指数
3
解决办法
5692
查看次数

使用Fibonacci格子在球体上均匀排列点

我试图在单位球体的表面上或多或少均匀地排列点.

我被告知虽然这个问题很难解决,但Fibonacci Lattices提供了一个非常好的解决方案.

我已经尝试了几天来关注链接文档中提供的非常简单的方法,但我根本无法让它看起来正确.

我正在使用javascript,我有一个对象数组e,每个对象都公开一个latlon参数.这是我用来排列球体上的点的函数:(现在假设点的数量总是奇数)

function arrangeEntries(e)
{
    var p = e.length;
    var N = (p - 1) / 2;

    for (var i = -N; i <= N; i++)
    {
        e[i + N].lat = Math.asin((2 * i) / (2 * N + 1));
        e[i + N].lon = mod(i, 1.618034) * 3.883222;
    }
}
Run Code Online (Sandbox Code Playgroud)

function mod(a, b)
{
    return a - Math.floor(a / b) * b;
}
Run Code Online (Sandbox Code Playgroud)

不同于文档中,我latlon …

javascript algorithm fibonacci html5-canvas

7
推荐指数
1
解决办法
1343
查看次数

球体上密度最高的位置

我在球体的表面上有很多点.如何计算具有最大点密度的球体的面积/点?我需要这么快完成.如果这是一个正方形,例如我想我可以创建一个网格然后让点投票哪个部分的网格是最好的.我已经尝试将点变换为球面坐标,然后做一个网格,这两个都不能很好地工作,因为北极周围的点在球体上很近但在变换后很远.

谢谢

algorithm math geometry computational-geometry

5
推荐指数
2
解决办法
3924
查看次数

将圆柱体变成球体而不会在杆上捏住

我正在研究用六边形网格制作的行星.不需要杆 - 使这更容易一些.有没有更好的方法将圆柱体变成具有均匀六边形/三角形的球体?

这是所需的步骤:

  1. 生成二维六边形平面(ok)
  2. 将飞机变成一个气缸(好)
  3. 将气缸变成球体/地圈(有点作品)

对于第2步,我只是使用Sin和Cos将顶点移动到圆形.对于第3步,现在我只是使用:vertices[i] = vertices[i].normalized * radius;

图像可视化当前的问题.

请注意,电极是故意切断的.红色部分显示六边形网格的样子.我必须保持它们的大小和方向大致相同,因为它们用于游戏和视觉元素.每个十六进制都有一个邻居列表,基本上就像一个图形.

math 3d geometry

3
推荐指数
1
解决办法
2088
查看次数