编程语言
首页 > 编程语言> > java – 2D航路点寻路:WP的组合从curLocation到targetLocation

java – 2D航路点寻路:WP的组合从curLocation到targetLocation

作者:互联网

请花点时间了解我的情况.如果不可理解,请在评论中告诉我.

我有一个Waypoints的ArrayList.这些航点不是任何顺序.航点具有以下属性:
{int type,float z,float y,float x,float rotation}

这适用于三维世界,但由于我的寻路不应该关心高度(因此将世界视为二维世界),因此忽略y值.轮换对于这个问题并不重要.

>在这个二维世界中,x代表x轴,z代表y轴.
>如果x增加,则世界中的物体向东移动.如果x减小,则世界中的物体向西移动.
>如果z增加,则世界中的物体向北移动.如果z减小,则世界中的物体向南移动.

因此,这些“新”航路点可以简化为:waypoint = {float x,float y}.

现在,这些航点表示物体的X轴(x)和Y轴(z)位置.此外,还有一个当前位置:curLocation = {float x,float y}和目标位置:tarLocation = {float x,float y}.

这就是我想得到的:
在以下严格条件下从curLocation到tarLocation的所有航路点组合(也称为:路径或路线):

>每个航路点之间的距离不得大于(浮动)maxInbetweenDistance.这包括从curLocation到第一个航点的初始距离以及从最后一个航点到tarLocation的距离.如果没有这样的航点组合,则应返回null.
>当在距离通往目标航点的航点的maxInbetweenDistance内找到多个航路点时,应选择最近的航点(如果距离稍远一点的替代航路点将导致距离较远的新航路点,则会更好.也回来了).
>返回的航点组合(路径)的顺序应该是从最短路线(最小距离)到最长路线(最大距离)

最后,请考虑以下几点:

>这是我唯一需要进行AI /寻路操作的方法,这就是为什么我不希望使用完整的路径寻找或AI框架.我相信一个功能应该能够处理上述问题.
>如果返回所有可能的航点组合会导致过多的开销,那么如果可以指定最大组合数量(但仍然从最接近最远的顺序排序)也可以.例如. 5条最近的路径.

我怎么做到这一点?任何反馈都表示赞赏.

解决方法:

我认为你的解决方案是从Dijkstra’s Algorithm开始,先找到最短的路径.您可以将您的航点视为连接图,如果它们在xy平面中足够接近,则连接节点然后应用Dijkstra(在线有许多示例代码清单).

现在,您从头到尾拥有通过图表的最短路径,该路径将由图形的N个边缘组成.

接下来你需要创建N个新图形,每个图形与第一个图形一样,但是最短路径的一段不连接.在这些修改后的图表上找到从头到尾的最短路线.现在您有N 1条路线,您可以按长度排序.

重复此操作,直到找到满足您需求的足够路径,或者没有任何未排序的路径.

我没有找到这种技术的名称,但它被描述为对Dijkstra here的修改.

标签:2d,path-finding,java,artificial-intelligence,graph-algorithm
来源: https://codeday.me/bug/20191009/1876347.html