Recursive pathfinding Index exceeds matrix dimensions

6 Ansichten (letzte 30 Tage)
Peter Jensen
Peter Jensen am 20 Apr. 2016
Bearbeitet: Peter Jensen am 20 Apr. 2016
The function is supposed to return a path for a mouse to go, which is one of the four corners of the maze. I am trying with recursive. B is a 2 dimensonal metrix, probe is [x y] vector and prevProbe start out as [0 0] This is an error messege I recive on both err1, err2, err3 and err4. identifier: 'MATLAB:badsubscript' message: 'Index exceeds matrix dimensions.' cause: {} stack: [724x1 struct]
function [ route done ] = PathFinder( B, probe, prevProbe )
%PATHFINDER Summary of this function goes here
% Detailed explanation goes here
done = false;
route = [];
e1 = [1 1];
e2 = [size(B,1) 1];
e3 = [1 size(B,2)];
e4 = [size(B,1) size(B,2)];
% = 1 (right), 2 (left), 3 (up), 4 (down)
if isequal(probe, e1) | isequal(probe, e2) | isequal(probe, e3) | isequal(probe, e4)
done = true
return;
route
end
try
if B(probe(1),probe(2)+1) == 0
[route, done] = PathFinder(B, [probe(1) probe(2)+1], probe);
if done
temp = [route getDir(probe, prevProbe)];
route = temp(1);
done = temp(2);
return;
end
end
catch err
err
end
try
if B(probe(1)+1,probe(2)) == 0
[route, done] = PathFinder(B, [probe(1)+1 probe(2)], probe);
if done
temp = [route getDir(probe, prevProbe)];
route = temp(1);
done = temp(2);
return;
end
end
catch err
err
end
try
if B(probe(1),probe(2)-1) == 0
[route, done]= PathFinder(B, [probe(1) probe(2)-1], probe);
if done
temp = [route getDir(probe, prevProbe)];
route = temp(1);
done = temp(2);
return;
end
end
catch err
err
end
try
if B(probe(1)-1,probe(2)) == 0
[route, done] = PathFinder(B, [probe(1)-1 probe(2)], probe);
if done
temp = [route getDir(probe, prevProbe)];
route = temp(1);
done = temp(2);
return;
end
end
catch err
err
end
end
% = 1 (right), 2 (left), 3 (up), 4 (down)
function [dir] = getDir(probe, prevProbe)
temp = probe - prevProbe;
if isequal(temp,[1 0]);
dir = 1;
return;
elseif isequal(temp,[0 1]);
dir = 3;
return;
elseif isequal(temp,[-1 0]);
dir = 2;
return;
elseif isequal(temp,[0 -1]);
dir = 4;
return;
end
end

Antworten (0)

Kategorien

Mehr zu Data Types finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by