实验室进度记录之网格化场景合并路径

在获得场景中人群运动轨迹之后,往往会将场景进行网格化,网格化的目的有两个,一个是为了合并路径,另一个是为了强化学习挑选目标点。这里只记录使用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




得到的效果如下图所示:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值