当前位置: 首页 > 面试题库 >

在球体上平均分配n点

梁丘璞瑜
2023-03-14
问题内容

我需要一种算法,该算法可以使我在球体上的位置保持N个点(可能少于20个),并将其模糊地散布开来。不需要“完美”,但是我只需要它,所以它们都不会聚在一起。

  • 这个问题]提供了很好的代码,但是我找不到使这种统一的方法,因为这似乎是100%随机的。
  • 推荐的这篇博客文章有两种方法可以输入球体上的点数,但是Saff和Kuijlaars算法恰好是我可以转录的伪代码,而我发现的代码示例包含“ node [k]”,而我无法看到解释并破坏了这种可能性。第二个博客示例是“黄金分割螺旋”,它给了我奇怪的,成堆的结果,但没有明确的方法来定义恒定半径。
  • 这种算法从这个问题好像它可能工作,但我不能拼凑那是什么网页上成伪代码或任何东西。

我遇到的其他几个问题线程涉及随机均匀分布,这增加了我不关心的复杂程度。我很抱歉这是一个愚蠢的问题,但我想表明我确实看上去很努力,但仍然表现不佳。

因此,我要寻找的是简单的伪代码,以在单位球体上均匀分布N个点,该点以球坐标或笛卡尔坐标返回。如果它甚至可以进行一些随机分布,那就更好了(想想围绕一颗恒星的行星,适当散开,但还有回旋余地)。


问题答案:

在此html" target="_blank">示例中,代码
node[k]只是第k个节点。您正在生成一个数组N个点,它node[k]是第k个(从0到N-1)。如果这一切使您感到困惑,则希望您现在就可以使用它。

(换句话说,k是大小为N的数组,该数组在代码片段开始之前定义,并且包含点列表)。

或者 ,在此处(并使用Python)建立另一个答案:

> cat ll.py
from math import asin
nx = 4; ny = 5
for x in range(nx):
    lon = 360 * ((x+0.5) / nx)
    for y in range(ny):                                                         
        midpt = (y+0.5) / ny                                                    
        lat = 180 * asin(2*((y+0.5)/ny-0.5))                                    
        print lon,lat                                                           
> python2.7 ll.py                                                      
45.0 -166.91313924                                                              
45.0 -74.0730322921                                                             
45.0 0.0                                                                        
45.0 74.0730322921                                                              
45.0 166.91313924                                                               
135.0 -166.91313924                                                             
135.0 -74.0730322921                                                            
135.0 0.0                                                                       
135.0 74.0730322921                                                             
135.0 166.91313924                                                              
225.0 -166.91313924                                                             
225.0 -74.0730322921                                                            
225.0 0.0                                                                       
225.0 74.0730322921                                                             
225.0 166.91313924
315.0 -166.91313924
315.0 -74.0730322921
315.0 0.0
315.0 74.0730322921
315.0 166.91313924

如果进行绘制,您会发现两极附近的垂直间距较大,因此每个点都位于大约相同的总空间 区域 中(在两极附近,“水平”空间较小,因此“垂直”空间更大) )。

这与所有点到邻居的距离都差不多(这是我认为您的链接所要讨论的)不同,但它可能足以满足您的需求,并且在制作统一的经纬度网格时有所改进。



 类似资料:
  • 本文向大家介绍Python实现将n个点均匀地分布在球面上的方法,包括了Python实现将n个点均匀地分布在球面上的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现将n个点均匀地分布在球面上的方法。分享给大家供大家参考。具体分析如下: 最近工作上遇到一个需求,将10000左右个点均匀地分布在一个球面上。所谓的均匀,即相邻的两个点之间的距离尽量一致。 我的算法是用基于正多面

  • 我正在一个由15台机器组成的裸机集群上制作Flink流媒体应用程序的原型。我使用的是90个任务槽(15x6)的纱线模式。 该应用程序从单个Kafka主题读取数据。Kafka主题有15个分区,所以我也将源操作符的并行性设置为15。然而,我发现Flink在某些情况下会将2-4个消费者任务实例分配给同一个taskmanager。这会导致某些节点受到网络限制(Kafka主题是提供大量数据,而机器只有1G

  • 问题内容: 我有一个这样的数据框: 如下所示,数据集不一定每天都有观察值: 我想添加一个新列,该列显示至少n天中每个用户过去n天(在这种情况下,n = 2)的平均值,否则它将有价值。例如,在John上得到一个,因为他没有和的数据。因此结果将是这样的: 在阅读了论坛中的几篇文章之后,我似乎应该结合使用和自定义,但是我还不太清楚该怎么做。 问题答案: 我认为您可以使用第一个convert列 ,然后通过

  • 然后我需要一个得到平均高点的函数。下面是我做的: 但当我测试它时,我得到的回答不是平均值。我做错了什么?有人能提供线索吗?

  • 我创建了一个完整的球体外瓷砖,当它们位于视野内时,可以单独处理它们。 为此,我将一个等矩形全景图分成几个二次图像,将它们映射到这些瓷砖上。但不知何故,纹理会在每个瓷砖中最高和最低的线段行上移动。 一些导入的sqare图像的示例: 原始测试图像: 我怎样才能把纹理正确地映射到瓷砖上?创建图块的代码如下: 我对three.js很陌生,所以这可能是一个非常简单的问题。 希望有人能帮忙?

  • 有了这个功能,我可以在Android系统的OpenGL ES 1.0中创建一个球体: 我现在的问题是,我想在球体上使用这个纹理,但是只创建了一个黑色的球(当然,因为右上角是黑色的)。我使用这个纹理坐标是因为我想使用整个纹理: 要正确使用纹理,我需要做什么?