Python 三角网格中的最近点

Python 三角网格中的最近点,python,computational-geometry,Python,Computational Geometry,我想写一个函数,返回最靠近某个点p的三角形网格(由底宽为w、平行于OX轴的等边三角形组成)的最近网格节点(作为一个点)。网格从s点开始。函数签名应如下所示: def snapToGrid(p,w,s): ... 例如 snapToGrid([0.49,0],0.5,[0.0])==[0.5,0] 有什么想法可以开始吗?编辑: 这个答案是在知道三角形网格将被动态计算之前,我暂时不考虑它,因为它可能会有帮助,但对动态点生成没有帮助 我相信,动态生成点的答案将取决于找到三角形的高度,然后认识

我想写一个函数,返回最靠近某个点p的三角形网格(由底宽为w、平行于OX轴的等边三角形组成)的最近网格节点(作为一个点)。网格从s点开始。函数签名应如下所示:

def snapToGrid(p,w,s):
    ...
例如 snapToGrid([0.49,0],0.5,[0.0])==[0.5,0]

有什么想法可以开始吗?

编辑: 这个答案是在知道三角形网格将被动态计算之前,我暂时不考虑它,因为它可能会有帮助,但对动态点生成没有帮助

我相信,动态生成点的答案将取决于找到三角形的高度,然后认识到节点只会以该三角形高度的倍数存在。
这应该照顾到您的
X
组件

查找三角形的宽度还将告诉您沿
Y
轴出现节点的倍数,但是,每隔一行三角形的节点点将位于三角形宽度的1/2处。
第一步是找到远离原点的行数,即原点

这反过来会让您知道是将
三角形宽度
用作
Y
坐标倍数,还是将
三角形宽度+1/2三角形宽度
用作
Y
乘数

使用这两个值,应该很容易找到离您的点最近的
n*高度
n*宽度
组合

很抱歉,如果在纸上绘制网格,您将看到三角形沿
X
轴形成节点行,列(对于
偶数行
)和半列(对于
奇数行


在查找最近点时,栅格的类型/形状通常无关紧要。从逻辑上讲,您最近的点将属于您的点所在的形状。所以为了简化事情,你需要做的就是找到离你最近的点,这是一个非常简单的问题

这似乎最容易通过使用a找到,其中分割点是网格的
X
Y
坐标。然后,简单的二进制搜索将显示与输入坐标最近的网格点

链接文章中有K-D树操作的伪代码


您还可以将字典映射到
X
坐标,每个值都包含一个对应于该
X
坐标的
y:name
对字典

这将允许您通过以下方式搜索节点:

coordinate_x[<xvale>][<yvalue>]

对此,除其他外, 关于Math-S.E.“J.M.不是数学家”

以下是答案的截图(2018年9月)


此外,在对原始问题的评论中,同一用户提到了另一个站点:此页面描述了一个更一般情况的解决方案。

您是否在(postgis!)数据库中有网格点,或者您是否希望实时计算它?您是否有计算网格的想法,或者我们应该从这个开始?虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@Chilledrat我根据你的建议提供了一个截图。你投我反对票了吗(不是我。答案的原始版本已标记为审核,审核系统会自动添加评论。)。
for x in coordinate_x.keys():
    if x-point_x < min:
        make x-point the closest