相关疑难解决方法(0)

找到距离最远的两个点的算法

我正在寻找一种算法用于我正在制作的赛车游戏.地图/关卡/轨道是随机生成的,所以我需要找到两个位置,即开始和目标,它们利用了大部分地图.

  • 该算法是在二维空间内工作
  • 从每个点,只能遍历四个方向的下一个点; 上下左右
  • 点数既可以是阻止的也可以是非阻塞的,只能遍历非阻塞点

关于距离的计算,它不应该是缺乏更好词的"鸟道".如果它们之间存在墙(或其他阻挡区域),则A和B之间的路径应该更长.

我不确定从哪里开始,非常欢迎评论,并且建议的解决方案在伪代码中是首选.

编辑:对.在查看了gs的代码后,我又给了它一个镜头.我这次用C++写的,而不是python.但是,即使在阅读了Dijkstras算法,洪水填充Hosam Alys解决方案后,我也没有发现任何重要的区别.我的代码仍然有效,但没有你想要运行的那么快.完整的消息来源是牧场.唯一有趣的线(我猜)是第78-118行的Dijkstra变体.

但速度不是这里的主要问题.如果有人能够指出算法中的差异,我真的很感激帮助.

  • 在Hosam Alys算法中,他是从边界而不是每个节点扫描的唯一区别吗?
  • 在Dijkstras你跟踪和覆盖走的距离,但不是在洪水填充,但这就是它?

algorithm math distance path path-finding

29
推荐指数
4
解决办法
3万
查看次数

比质心更好的"中心点"

我正在使用多边形的质心在地图应用程序中附加标记.这对于凸多边形非常好,对于许多凹多边形非常有用.

然而,一些多边形(香蕉,甜甜圈)显然不会产生所需的结果:在这些情况下,质心在多边形区域之外.

有没有人知道更好的方法任何多边形区域(可能包含孔!)中找到合适的点来附加标记?

在此输入图像描述

algorithm geometry center computational-geometry centroid

9
推荐指数
2
解决办法
329
查看次数

计算数组中向量之间的最大距离

假设我们有一个包含n个向量的数组。我们要计算这些向量之间的最大欧几里得距离。最简单的方法是对数组进行迭代,然后为每个向量计算其与所有后续向量的距离,然后找到最大值。但是,该算法会增长(n-1)!关于数组的大小。

还有其他更有效的方法来解决此问题吗?

谢谢。

algorithm complexity-theory

6
推荐指数
1
解决办法
3229
查看次数

求 d 维空间中 n 个点集合的直径

我对求 128 维中两个点集的直径很感兴趣。第一个有 10000 点,第二个有 1000000 点。出于这个原因,我想做一些比需要 O(n\xc2\xb2) 的天真的方法更好的事情。该算法将能够处理任意数量的点和维度,但我目前对这两个特定的数据集非常感兴趣。

\n\n

我对获得速度而不是准确性非常感兴趣,因此,基于,我将通过计算每个坐标的最小值和最大值来找到点集的(近似)边界框,从而获得 O(n*d) 时间。然后,如果我找到这个盒子的直径,问题就解决了

\n\n

在 3d 情况下,我可以找到一侧的直径,因为我知道两条边,然后,我可以在垂直于这一侧的另一侧应用毕达哥拉斯定理。但是我对此不确定,并且可以肯定的是,我不知道如何将其推广到 d 维度。

\n\n
\n\n

可以在这里找到一个有趣的答案,但它似乎特定于 3 维,我想要一种针对 d 维的方法。

\n\n

有趣的论文:关于计算高维欧几里德空间中点集的直径。关联。然而,在这个阶段,实现该算法对我来说似乎太多了。

\n

algorithm computational-geometry

5
推荐指数
1
解决办法
2801
查看次数

如何在给定m个点的四维空间中有效地找到两个最远点(欧几里德距离)?

给定m个4维点,找出具有最大欧几里德距离的两个点的有效方法是什么?

目前,我只是使用蛮力方法并使用2个嵌套for循环(O(m ^ 2))检查每对距离,但这是非常糟糕的,因为它不能缩放.

algorithm euclidean-distance

5
推荐指数
1
解决办法
326
查看次数