Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在不穿过障碍物的情况下检测从A点到B点的最短路径?_Javascript_Jquery_Path Finding - Fatal编程技术网

Javascript 如何在不穿过障碍物的情况下检测从A点到B点的最短路径?

Javascript 如何在不穿过障碍物的情况下检测从A点到B点的最短路径?,javascript,jquery,path-finding,Javascript,Jquery,Path Finding,我一直在尝试创建一个jQuery代码,它可以扫描id为map和.map的div,并找到从#a到#B的最短路径,同时尽量避免交叉/接触#blockings,但我不知道如何做后者 非常感谢您的帮助 插图: 这是我的代码: computeTrack('a'、'b'、'map'); 函数computeTrack(A、B、MAP){ var bag=[]; var=[]; 行李=距离(A,B); 障碍物=扫描(A、B、地图); 移动选项卡(A、B、地图、障碍物、行李); } 功能移动B(A、B、地图、

我一直在尝试创建一个jQuery代码,它可以扫描id为
map
.map
的div,并找到从
#a
#B
的最短路径,同时尽量避免交叉/接触
#blockings
,但我不知道如何做后者

非常感谢您的帮助

插图:

这是我的代码

computeTrack('a'、'b'、'map');
函数computeTrack(A、B、MAP){
var bag=[];
var=[];
行李=距离(A,B);
障碍物=扫描(A、B、地图);
移动选项卡(A、B、地图、障碍物、行李);
}
功能移动B(A、B、地图、障碍物、行李){
变种克隆;
$(A).附加(“”);
克隆='#克隆';
生成路径(克隆、A、B、地图、障碍物、包);
}
函数generatePath(克隆、A、B、地图、障碍物、袋子){//挑战就在这里
如果(行李[1]=“左上方”){
/*$(克隆).stop().animate({
顶部:$(B).offset().top,
左:$(B).offset()左
},数学圆(袋[0]*50),“线性”)*/
}否则如果(行李[1]=“右上方”){
控制台日志(包[1]);
}否则如果(行李[1]=“左下角”){
控制台日志(包[1]);
}否则如果(行李[1]=“右下角”){
控制台日志(包[1]);
}
}
函数冲突(obj1、obj2){
var x1=$(obj1).offset()左;
变量y1=$(obj1).offset().top;
变量h1=$(obj1).outerHeight(真);
var w1=$(obj1).外径(真);
var b1=y1+h1;
var r1=x1+w1;
var x2=$(obj2).offset()左;
变量y2=$(obj2).offset().top;
var h2=$(obj2).outerHeight(true);
var w2=$(obj2).outerWidth(true);
var b2=y2+h2;
var r2=x2+w2;
如果(b1b2 | r1r2)返回false;
返回true;
}
功能扫描(A、B、MAP){
var allObjects=[];
$(映射+'>*')。映射(函数(){
如果(“#”+$(this.attr('id'))!==A&(“#”+$(this.attr('id'))!==B){
allObjects.push((“#”+$(this.attr('id'));
}
});
返回所有对象;
}
函数getDistance(对象、目标){
var bag=[];
var消息=“”;
var距离=0;
var objectPos=$(object.offset();
var targetPos=$(target.offset();
如果(objectPos.top>targetPos.top){
消息+=‘底部’;
}else if(objectPos.top targetPos.left){
消息+=‘正确’;

}else if(objectPos.left有在网格和图形上查找最短路径的方法(,)

要使用这些,对于你的问题,你必须将空间离散成一个网格,并考虑障碍物的位置/形状和尺寸以及对象的形状/尺寸作为约束。然后你就有了一个图,可以使用任何最短路径图算法

另一种方法(特别是连续空间最短路径)是使用物理学来解决计算问题(例如,参见)

在这种方法中,我们建模(或假设)对象和障碍物被磁化(或具有一种潜在的相互作用),即目标点吸引对象,而障碍物排斥对象。然后,稳态平衡解提供了对象移动的最佳路径(在这种情况下,这也是最短的路径)

例如,如果没有任何障碍物,物体将沿直线向目标移动(吸引目标)。有障碍物时,将物体从该直线转向最佳路径,以到达目标,同时避开障碍物(类似于击退目标)

(这种方法倾向于生成更平滑(即分析性)的路线,这些路线不一定与所讨论的示例相匹配,尽管这不是必需的,人们确实可以模拟更多不连续的路线。)

参考这些方法:


  • 到目前为止相当简洁,加上许多参考文献,非常感谢您的帮助欢迎,希望它有用,您可以在参考文献中找到算法