我正在寻找一种算法用于我正在制作的赛车游戏.地图/关卡/轨道是随机生成的,所以我需要找到两个位置,即开始和目标,它们利用了大部分地图.
关于距离的计算,它不应该是缺乏更好词的"鸟道".如果它们之间存在墙(或其他阻挡区域),则A和B之间的路径应该更长.
我不确定从哪里开始,非常欢迎评论,并且建议的解决方案在伪代码中是首选.
编辑:对.在查看了gs的代码后,我又给了它一个镜头.我这次用C++写的,而不是python.但是,即使在阅读了Dijkstras算法,洪水填充和Hosam Alys解决方案后,我也没有发现任何重要的区别.我的代码仍然有效,但没有你想要运行的那么快.完整的消息来源是牧场.唯一有趣的线(我猜)是第78-118行的Dijkstra变体.
但速度不是这里的主要问题.如果有人能够指出算法中的差异,我真的很感激帮助.
我正在使用多边形的质心在地图应用程序中附加标记.这对于凸多边形非常好,对于许多凹多边形非常有用.
然而,一些多边形(香蕉,甜甜圈)显然不会产生所需的结果:在这些情况下,质心在多边形区域之外.
有没有人知道更好的方法在任何多边形区域(可能包含孔!)中找到合适的点来附加标记?
假设我们有一个包含n个向量的数组。我们要计算这些向量之间的最大欧几里得距离。最简单的方法是对数组进行迭代,然后为每个向量计算其与所有后续向量的距离,然后找到最大值。但是,该算法会增长(n-1)!关于数组的大小。
还有其他更有效的方法来解决此问题吗?
谢谢。
我对求 128 维中两个点集的直径很感兴趣。第一个有 10000 点,第二个有 1000000 点。出于这个原因,我想做一些比需要 O(n\xc2\xb2) 的天真的方法更好的事情。该算法将能够处理任意数量的点和维度,但我目前对这两个特定的数据集非常感兴趣。
\n\n我对获得速度而不是准确性非常感兴趣,因此,基于此,我将通过计算每个坐标的最小值和最大值来找到点集的(近似)边界框,从而获得 O(n*d) 时间。然后,如果我找到这个盒子的直径,问题就解决了。
\n\n在 3d 情况下,我可以找到一侧的直径,因为我知道两条边,然后,我可以在垂直于这一侧的另一侧应用毕达哥拉斯定理。但是我对此不确定,并且可以肯定的是,我不知道如何将其推广到 d 维度。
\n\n可以在这里找到一个有趣的答案,但它似乎特定于 3 维,我想要一种针对 d 维的方法。
\n\n有趣的论文:关于计算高维欧几里德空间中点集的直径。关联。然而,在这个阶段,实现该算法对我来说似乎太多了。
\n给定m个4维点,找出具有最大欧几里德距离的两个点的有效方法是什么?
目前,我只是使用蛮力方法并使用2个嵌套for循环(O(m ^ 2))检查每对距离,但这是非常糟糕的,因为它不能缩放.