我试图在球体上分散n个点,使得每个点在其周围具有"相同"区域.基本上,我试图通过评估n个点并假设每个区域元素是相同的(并且等于4pi r ^ 2/n)来在球体上集成函数.
我的问题与此问题非常相关,但我似乎无法同意"接受"答案中提供的代码按预期工作(参见附图,通过选择R = 1000,nx = ny = 40生成).显然,我的观点更加集中在两极并且非常集中在赤道上.
有什么建议?

编辑:作为参考,我确实找到了一些生成网格的软件,使得每个点周围都有相等的"区域"(向下滚动以查看球体上的均匀区域分布),但是不是实现它们的代码,而是使用较少的 -耗时的方法:我简单地迭代方位角和极角([0,2pi]和[0,pi])并计算每个补片的''无穷小''区域(da = r ^ 2 sin theta dtheta dphi).这基本上是我在整个领域进行整合所需要的,我只是希望统一区域分布不会那么难实现.
我对在尺寸为3或更高的球面上均匀分布N个点感兴趣。
更加具体:
我对以下内容不感兴趣:
满足这些条件的一种方法称为斐波那契晶格,但我只能在2d和3d中找到该方法的代码实现。
斐波纳契晶格(也称为斐波纳契螺旋)背后的方法是生成绕球体表面成螺旋形的一维线,以使该线所覆盖的表面积每转大致相同。然后,您可以丢掉均匀分布在螺旋上的N个点,它们将大致均匀地分布在球体的表面上。
在此答案中,有一个针对3个维度的python实现,可生成以下内容:
我想知道斐波那契螺旋是否可以扩展到大于3的尺寸,并在数学堆栈交换中发布了一个问题。令我惊讶的是,我收到了两个令人惊讶的答案,据我所知(因为我不完全理解所显示的数学)表明确实有可能将该方法扩展到N维。
不幸的是,我对所显示的数学知识还不够了解,无法将任何一个答案都转换成(伪)代码。我是一位经验丰富的计算机程序员,但是我的数学背景仅此而已。
我将复制我认为是以下答案之一最重要的部分(不幸的是,SO不支持mathjax,因此我必须复制为图像)
我遇到的上述困难:
在座的任何人都可以理解所涉及的数学知识,从而能够朝着链接斐波那契晶格问题的任一答案的伪代码实现取得进展?我知道完整的实施可能很困难,因此我对部分实施感到满意,该实施可以使我足够自己完成其余的工作。
为简化起见,我已经编写了一个函数,该函数将N个维度的球面坐标转换为笛卡尔坐标,因此该实现可以输出任意一个,因为我可以轻松进行转换。
另外,我看到一个答案为每个附加维使用下一个质数。我可以轻松地编写一个输出每个连续素数的函数,因此可以假定已经实现了。
如果未能在N个维度上实现斐波那契晶格,我很乐意接受满足上述约束的另一种方法。
我正在尝试创建一个类似于此的形状,具有12个五边形的六边形,任意大小.
(图片来源)
唯一的问题是,我完全不知道生成它需要什么样的代码!
目标是能够在3D空间中获取一个点并将其转换为网格上的位置坐标,反之亦然,并获取网格位置并获取绘制网格的相关顶点.
我甚至不知道如何为此存储网格位置.3个五边形之间的每个"三部分"是否都有自己的2D坐标?
我很可能会使用C#,但我更感兴趣的是使用哪种算法以及它们如何工作的解释,而不是只给我一段代码的人.
algorithm geometry tiling hexagonal-tiles computational-geometry
我试图在单位球体的表面上或多或少均匀地排列点.
我被告知虽然这个问题很难解决,但Fibonacci Lattices提供了一个非常好的解决方案.
我已经尝试了几天来关注链接文档中提供的非常简单的方法,但我根本无法让它看起来正确.
我正在使用javascript,我有一个对象数组e,每个对象都公开一个lat和lon参数.这是我用来排列球体上的点的函数:(现在假设点的数量总是奇数)
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)
不同于文档中,我lat和lon …
我在球体的表面上有很多点.如何计算具有最大点密度的球体的面积/点?我需要这么快完成.如果这是一个正方形,例如我想我可以创建一个网格然后让点投票哪个部分的网格是最好的.我已经尝试将点变换为球面坐标,然后做一个网格,这两个都不能很好地工作,因为北极周围的点在球体上很近但在变换后很远.
谢谢
我正在研究用六边形网格制作的行星.不需要杆 - 使这更容易一些.有没有更好的方法将圆柱体变成具有均匀六边形/三角形的球体?
这是所需的步骤:
对于第2步,我只是使用Sin和Cos将顶点移动到圆形.对于第3步,现在我只是使用:vertices[i] = vertices[i].normalized * radius;
图像可视化当前的问题.
请注意,电极是故意切断的.红色部分显示六边形网格的样子.我必须保持它们的大小和方向大致相同,因为它们用于游戏和视觉元素.每个十六进制都有一个邻居列表,基本上就像一个图形.
geometry ×5
algorithm ×4
math ×4
3d ×1
fibonacci ×1
html5-canvas ×1
integrate ×1
javascript ×1
pseudocode ×1
tiling ×1