我遇到了以下问题:我正在跟踪在地图中移动的像素。它有一个位置和方向。如果它的方向是θ,我有以下角度来计算距离[theta-90 theta theta + 90 theta + 180],如图所示为theta = 0或theta = pi * n ......
我用两种方式计算它:
x=[x , y, theta];
res=size(map)
v1= 1:res(1);
v2= 1:res(2);
a_x=floor(x(1)+v1.*cos(x(3)*pi/180));
a_y=floor(x(2)+v2.*sin(x(3)*pi/180));
a=[a_x' a_y'];
首先使用二进制地图的边界
p=intersect(a,boundaries,'rows');
并使用二进制映射:
v=zeros(res(1),res(2));
a_x=a_x(a_x>=1 & a_x<=res(1));
a_y=a_y(a_y>=1 & a_y<=res(2));
a_x=a_x(1:min(length(a_y),length(a_x)));
a_y=a_y(1:min(length(a_y),length(a_x)));
v(sub2ind(size(v),a_x,a_y))=1;
p=find(v&map==1);
然后使用两种方法计算点和边界之间的最短距离......
x=repmat(x(1:2)',size(p,1),1);
d=min(sqrt((p(:,1)-x(:,1)).^2+(p(:,2)-x(:,2)).^2));
我正在为1920x1080的大图像进行此操作,但是我为很多具有不同方向(2000点)的点执行此操作并且速度很慢。我想知道是否有更快的计算方法。
谢谢!