找出任何 3d 表面上两点之间的距离

Find the distance between two points on any 3d surface

我正在 Unity3d 中制作游戏,我需要一种寻路算法,可以在 3d 表面上将敌人引导至玩家。问题是 3d 表面可以是任何形状,所以它可以是 3d 球体、立方体、环面和更多形状。

我尝试使用 A*,但对于该公式,我需要两点之间的距离,并且由于对象是弯曲的,所以我无法轻易得到它。我发现如果它是球体,您可以使用 Haversine 公式,但这不适用于环面或随机 3d 形状。

除了每种对象,我都想要这种结果: https://www.youtube.com/watch?v=hvunNq7yVcU

是否有 way/algorithm 可用于获得该结果。我知道有一种叫做导航网格的东西,但我需要自己编程。我也找不到导航网格如何解决这个难题。我将使用对象的三角形作为节点。

所以我的问题归结为:

有谁知道适用于任何 3d 表面的寻路算法?

提前致谢。

我认为你的问题是你没有使用 graph, I would suggest that you look into a tutorial on how to create a graph, for the language you are using if you can, (this may also help 这里他们使用边来连接他们的节点,如果你有一个以上的重量,这是需要的)。如果你确实制作了一个图表,你将需要一个节点 class。每个节点必须包含指向它所连接的任何节点的指针和某种 ID。在您的情况下,这可能就是您所需要的,但如果您还有一条边 class (节点之间的连接器)将用于连接节点,则也可以为每个移动分配一个权重。如果你确实有一条边 class,你的节点将有指向边而不是其他节点的指针,并且每条边都有一个权重和一个指向 1 或 2 个节点的指针(取决于它是否是有向路径)。您还可以制作一个图 class 来包含所有节点和边。

总结: 创建一个节点 class 并确定是否需要边 class (如果所有内容的权重都为 1,则可以不用它)。使用节点 class 创建一个图表来表示您的地图,每个图块都是一个节点,带有指向连接图块的指针。使用 A* 或 dijkstra 算法搜索您的图形以找到最短路径。

注意:您会发现的大多数示例都是针对二维图的,您的没有什么不同,只是您的没有边界,您只需要将节点连接到它们的相邻图块即可。