欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何在MONO 3D寻找最短路路径

程序员文章站 2024-01-29 08:50:40
...

前段时间有个客户说他们想在我们的3D的机房中找从A点到B点的最短路径,然而在2D中确实有很多成熟的寻路算法,其中A*是最为常见的,而这个Demo也是用的A*算法,以下计算的是从左上角到右下角的最短路径:
如何在MONO 3D寻找最短路路径
            
    
    博客分类: MONO DesignTWaver 3D TWaver 3DTWaverMONO Design 
具体的实现方式是,先将地板进行了分割,分成一个数组,然后再计算该点上是否有3D的对象,若是有,就置成该点不能通过的标记,否则就表示该点可以通过(如果你分割的越细那么算的就越精确,但是算的当然也就慢一些,关键看你的要求),以下是分割地板的代码:

1 var size = {x: 100, y: 100}; // 100*100
2 var topLeft = {x: 228, y: 53};
3 var width = 524;
4 var height = 400;
5 var dw = width / size.x;
6 var dh = height / size.y;
7 var start;
8 var end;
9 var graph;
10 function to2d() {
11     var nodes = [];
12     for (var i = 0; i < size.x; i++) {
13         var nodeRow = [];
14         var x = topLeft.x + dw * i
15         for (var j = 0; j < size.y; j++) {
16             var y = topLeft.y + dh * j;
17             if (isHasObj(x, y)) { //判断该点上是否有物体
18                 nodeRow.push(0);
19             else {
20                 nodeRow.push(1);
21             }
22         }
23         nodes.push(nodeRow);
24     }
25     graph = new Graph(nodes, {
26         closest: null,
27         diagonal: false
28     });
29  
30     //这里是找一条从(0,0)到(79,80)的路径。
31     start = graph.grid[0][0];
32     drawPath(7980);
33 }