问题描述:
现有一组室内飞沫污染物的空间分布数据,由于飞沫个数很多,为了更加清晰准确的表示飞沫个数浓度(个/m³)的空间分布,将房间按0.4m×0.4m×0.4m划分成多个小立方体,并将这个小立方体内的飞沫的个数浓度叠加到小立方体的中心点上,以中心点的浓度代表这个小立方体的浓度,并以颜色深浅来表示飞沫个数浓度的大小。
希望得到的飞沫个数浓度分布图如下图一(图中*为病人嘴部的位置,*为嘴部投影到地面的位置,+为陪护和医护嘴部的位置,+为陪护和医护嘴部投影到地面的位置)(该图没有以颜色深浅来表示飞沫个数浓度的大小,我希望能以颜色来表示,这样会更清晰)
现有一个M文件,内容如下:
filename='3-15s-all-DPM.xlsx';
[NUM,TXT,RAW]=xlsread(filename,4);
x=NUM(:,1);
y=NUM(:,2)-3;
z=NUM(:,3);
c=NUM(:,4);
num=size(x,1);%数据个数
l=0.2;%正方体边长
ll=1/l;
x_max=3.5;%长
y_max=3;%高
z_max=8.5;%宽
xi=0:l:x_max;
yi=0:l:y_max;
zi=0:l:z_max;
sizex=size(xi,2);
sizey=size(yi,2);
sizez=size(zi,2);
Csum=zeros(sizex,sizey,sizez);
for i=1:num
x_pos=floor(x(i)/l)+1;
y_pos=floor(y(i)/l)+1;
z_pos=floor(z(i)/l)+1;
Csum(x_pos,y_pos,z_pos)=Csum(x_pos,y_pos,z_pos)+c(i);
end
result_len=sizex*sizey*sizez;
disp(['total:',num2str(result_len)]);
result_x=zeros(result_len,1);
result_y=zeros(result_len,1);
result_z=zeros(result_len,1);
result_c=zeros(result_len,1);
idx=1;
for i=1:sizex
for j=1:sizey
for k=1:sizez
if(Csum(i,j,k)>0)
result_x(idx)=i;
result_y(idx)=j;
result_z(idx)=k;
result_c(idx)=Csum(i,j,k);
idx=idx+1;
end
end
end
end
result_len=idx-1;
plot_c=result_c(1:result_len);
plot_x=result_x(1:result_len)*l-l/2;
plot_y=result_y(1:result_len)*l-l/2;
plot_z=result_z(1:result_len)*l-l/2;
figure,
scatter3(plot_z,plot_x,plot_y,15,plot_c);
xlabel('房间的长');
ylabel('房间的宽');
zlabel('房间的高');
%scatter3(plot_x,plot_y,plot_z,15,plot_c);
%scatter3(plot_x,plot_y,plot_z,plot_c);
% %
% figure,
% i=1;
% plot3(plot_x(i),plot_y(i),plot_z(i),'ko','MarkerSize',result_c_log(i)*4,'MarkerEdgeColor','r');
% hold on;
% for i=2:result_len
% plot3(plot_x(i),plot_y(i),plot_z(i),'ko','MarkerSize',result_c_log(i)*4,'MarkerEdgeColor','r');
% end
(filename见附件)
根据以上程序得到的图如图二所示:
图二与图一的差别较大,想要得到图一,应该怎么操作?
另外,对比现有的M文件程序,我想要的效果主要有两点不同:
1、由附件filename中可以看出,浓度单位是kg/m³(这个浓度是模拟软件模拟得到的,不需要自己计算),如果想要的是个数浓度(个/m³),应该如何修改程序?(注:附件中,每一行表示一个飞沫污染物,前三列是空间坐标数据X、Y、Z,计算个数浓度可能就要自己编程计算了)
2、该如何用颜色表示个数浓度的大小?
最后,附件中有四张sheet,每一张代表飞沫污染物的一种粒径,结果要求的是,每一张sheet(即每一种粒径)对应一张个数浓度空间分布图,并以颜色表示浓度大小
由于之前没有接触过MATLAB,导师突然给这个任务,我也摸不着头脑,希望能得到帮助,谢谢!