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

来源:互联网 发布:千兆网络用什么网线 编辑:程序博客网 时间:2024/06/06 05:04

在获得场景中人群运动轨迹之后,往往会将场景进行网格化,网格化的目的有两个,一个是为了合并路径,另一个是为了强化学习挑选目标点。这里只记录使用matlab程序将得到的路径网格化。具体程序如下:

clear;%读路径for f=1:1:1szBuffer = 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;endfclose(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;endhold 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;endfclose(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;endnextline = 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   endfclose(f2);szBuffer = sprintf('./jepg_emotion/%02d.jpeg',frame);print(gcf,'-djpeg',szBuffer);end

得到的效果如下图所示:


原创粉丝点击