在获得场景中人群运动轨迹之后,往往会将场景进行网格化,网格化的目的有两个,一个是为了合并路径,另一个是为了强化学习挑选目标点。这里只记录使用matlab程序将得到的路径网格化。具体程序如下:
clear;
%读路径
for f=1:1:1
szBuffer = sprintf('3door.txt');
f1=fopen(szBuffer);
cla;
i=1;
frame=1;y=1;
while 1
nextline = fgetl(f1); %读第一行
if ~isstr(nextline), break, end %读到最后跳出
% disp(nextline);%这行可以不要
if mod(i,161)==0
frame=frame+1;
i=1;
end
a = sscanf(nextline, '%f %f');
%disp(a);
datax(frame,i)=round(a(1));
datay(frame,i)=round(a(2));
if(mod(datax(frame,i),10)>=5)
gridx(frame,i)=datax(frame,i)-mod(datax(frame,i),10)+10;
else gridx(frame,i) = datax(frame,i)-mod(datax(frame,i),10);
end
if(mod(datay(frame,i),10)>=5)
gridy(frame,i)=datay(frame,i)-mod(datay(frame,i),10)+10;
else gridy(frame,i) = datay(frame,i)-mod(datay(frame,i),10);
end
i=i+1;
end
fclose(f1);
hasexit = zeros(302);
for num = 1:1:160
%不去重
x=gridx(:,num);
y=gridy(:,num);
i=1;
for i=1:1:length(x)-2
a=dist(x(i),y(i),x(i+1),y(i+1));
b=dist(x(i+1),y(i+1),x(i+2),y(i+2));
c=dist(x(i),y(i),x(i+2),y(i+2));
if(a*a+b*b==c*c&&x(i)==x(i+1)||y(i)==y(i+1)&&rand(1)>0.7)
x(i+1)=x(i);
y(i+1)=y(i);
end
end
plot(x,y,'r-');
hold on;
end
hold on;
%第二组
% szBuffer = sprintf('3door2.txt');
% f1=fopen(szBuffer);
% i=1;
% frame=1;y=1;
% while 1
% nextline = fgetl(f1); %读第一行
% if ~isstr(nextline), break, end %读到最后跳出
% % disp(nextline);%这行可以不要
% if mod(i,161)==0
% frame=frame+1;
% i=1;
% end
% a = sscanf(nextline, '%f %f');
% %disp(a);
% datax(frame,i)=round(a(1));
% datay(frame,i)=round(a(2));
% if(mod(datax(frame,i),10)>=5)
% gridx(frame,i)=datax(frame,i)-mod(datax(frame,i),10)+10;
% else gridx(frame,i) = datax(frame,i)-mod(datax(frame,i),10);
% end
% if(mod(datay(frame,i),10)>=5)
% gridy(frame,i)=datay(frame,i)-mod(datay(frame,i),10)+10;
% else gridy(frame,i) = datay(frame,i)-mod(datay(frame,i),10);
% end
% i=i+1;
% end
% fclose(f1);
% hasexit = zeros(302);
% for num = 1:1:160
% %不去重
% x=gridx(:,num);
% y=gridy(:,num);
% i=1;
%
% for i=1:1:length(x)-2
% a=dist(x(i),y(i),x(i+1),y(i+1));
% b=dist(x(i+1),y(i+1),x(i+2),y(i+2));
% c=dist(x(i),y(i),x(i+2),y(i+2));
% if(a*a+b*b==c*c&&x(i)==x(i+1)||y(i)==y(i+1)&&rand(1)>0.7)
% x(i+1)=x(i);
% y(i+1)=y(i);
% end
% end
% if(rand(1)>0.5)
% plot(x,y,'r-');
% end
% hold on;
% end
%第三组
szBuffer = sprintf('3door3.txt');
f1=fopen(szBuffer);
i=1;
frame=1;y=1;
while 1
nextline = fgetl(f1); %读第一行
if ~isstr(nextline), break, end %读到最后跳出
% disp(nextline);%这行可以不要
if mod(i,201)==0
frame=frame+1;
i=1;
end
a = sscanf(nextline, '%f %f');
%disp(a);
datax(frame,i)=round(a(1));
datay(frame,i)=round(a(2));
if(mod(datax(frame,i),10)>=5)
gridx(frame,i)=datax(frame,i)-mod(datax(frame,i),10)+10;
else gridx(frame,i) = datax(frame,i)-mod(datax(frame,i),10);
end
if(mod(datay(frame,i),10)>=5)
gridy(frame,i)=datay(frame,i)-mod(datay(frame,i),10)+10;
else gridy(frame,i) = datay(frame,i)-mod(datay(frame,i),10);
end
i=i+1;
end
fclose(f1);
hasexit = zeros(302);
for num = 1:1:160
%不去重
x=gridx(:,num);
y=gridy(:,num);
i=1;
for i=1:1:length(x)-2
a=dist(x(i),y(i),x(i+1),y(i+1));
b=dist(x(i+1),y(i+1),x(i+2),y(i+2));
c=dist(x(i),y(i),x(i+2),y(i+2));
if(a*a+b*b==c*c&&x(i)==x(i+1)||y(i)==y(i+1)&&rand(1)>0.7)
x(i+1)=x(i);
y(i+1)=y(i);
end
end
plot(x,y,'r-');
hold on;
end
%for wall---------------
LEFT = -10.0;
RIGHT = 310.0;
TOP = 210.0;
BOTTOM = -10.0;
%-------------------------
%障碍物文件
inBuffer = sprintf('obstacle/3door.txt');
%打开障碍物文件
f2=fopen(inBuffer);
i=1;
nextline = fgetl(f2)%读第一行
if ~isstr(nextline), break, end %读到最后跳出
disp(nextline);%这行可以不要
a = sscanf(nextline, '%d');%读取数据,根据你自己的需要改
for num=1:1:a
nextline = fgetl(f2); %读第一行
if ~isstr(nextline), break, end %读到最后跳出
b = sscanf(nextline, '%f %f');
data_obj(i) = b(1);
data_obj(i+1) = b(2);
i = i+2;
end
nextline = fgetl(f2); %读第一行
a = sscanf(nextline, '%d');%读取数据,根据你自己的需要改。障碍物个数
for num=1:1:a %
nextline = fgetl(f2); %读第一行
if ~isstr(nextline), break, end %读到最后跳出
vertnum = sscanf(nextline, '%d ');%障碍物顶点个数
%读取顶点坐标,并画出障碍物
for i=2:1:vertnum(1)+1
b(1) = vertnum(i)+1;
t = i+1;
if t> vertnum(1)+1
t = 2;
end
b(2) = vertnum(t)+1;
plot([data_obj(2*b(1)-1) data_obj(2*b(2)-1)],[data_obj(2*b(1)) data_obj(2*b(2))],'Color','k','LineWidth',2);
set(gcf,'Position',[500 200 500 500])
set(gca,'Position',[.13 .17 .80 .74]);
axis([LEFT RIGHT BOTTOM TOP]);
hold on;
end
end
fclose(f2);
szBuffer = sprintf('./jepg_emotion/%02d.jpeg',frame);
print(gcf,'-djpeg',szBuffer);
end
得到的效果如下图所示: