将点映射到斐波那契晶格上的最近点

Posted

技术标签:

【中文标题】将点映射到斐波那契晶格上的最近点【英文标题】:Map point to closest point on fibonacci lattice 【发布时间】:2016-03-22 01:16:32 【问题描述】:

我使用以下代码为单位球体生成fibonacci lattice, see page 4。我认为代码工作正常。接下来,我有一个点列表(由以弧度表示的纬度和经度指定,就像生成的斐波那契格点一样)。对于每个点,我想找到斐波那契格子上最近点的索引。 IE。我有latitudelongitude 并想得到i。我该怎么做?

我特别不想遍历晶格中的所有点并找到距离最小的点,因为在实践中我生成的不仅仅是50点而且我不'如果O(m) 是可能的,则不希望运行时为O(n*m)

FWIW,说到距离,我指的是haversine distance。

#!/usr/bin/env python2

import math
import sys

n = 50
phi = (math.sqrt(5.0) + 1.0) / 2.0
phi_inv = phi - 1.0
ga = 2.0 * phi_inv * math.pi

for i in xrange(-n, n + 1):
    longitude = ga * i
    longitude = (longitude % phi) - phi if longitude < 0 else longitude % phi
    latitude = math.asin(2.0 * float(i) / (2.0 * n + 1.0))
    print("-th point: ".format(i + n + 1))
    print("\tLongitude is ".format(longitude))
    print("\tLatitude is ".format(latitude))

// Given latitude and longitude of point A, determine index i of point which is closest to A
// ???

【问题讨论】:

【参考方案1】:

您可能正在寻找的是空间索引:https://en.wikipedia.org/wiki/Spatial_database#Spatial_index。由于您只关心最近邻搜索,因此您可能希望使用相对简单的方法,例如 http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.KDTree.html

请注意,空间索引通常考虑平面上的点而不是球体。为了适应您的情况,您可能希望将球体分成几个可以用矩形近似的区域。然后,您可以根据矩形近似找到几个最近的邻居,并计算它们的实际半正弦距离以识别真正的最近邻居。

【讨论】:

以上是关于将点映射到斐波那契晶格上的最近点的主要内容,如果未能解决你的问题,请参考以下文章

斐波那契数列的实现算法

用安卓实现斐波那契数和最近点对问题

斐波那契数列

08《算法入门教程》递归算法之斐波那契数列

介绍下斐波那契数列。

斐波那契数列 在实际问题上的变种