Matlab生成不同粒径和形状的二维离散颗粒随机分布

在岩土力学、泥沙运行、多相流颗粒物输送问题,常采用基于无网格法的光滑粒子法(SPH)或离散元法,而这些方法常需要对所研究问题建立初始的颗粒随机分布,在此以一个简单的案例加以说明,仅作抛砖引玉:

案例基本情况:10*10区域,随机均布50*50=2500个粒子,坐标按随机产生,颗粒为4种类型,大小分为5种,然后用matlab编制小程序进行图形绘制。

主要程序如下:
clc;clear;close all;

Nx=50;
Ny=50;
N=Nx*Ny;  %点的数量
Lx=10;  %x方向长度
Ly=10;  %y方向长度
NGeo=4; %颗粒的形状种类数量
Nrad=5;   %颗粒的粒径种类数量
Nrank=3;  %颗粒的级配种类数量
rbanjing=50;  %颗粒基准半径大小

a=rand(N,1); %在0-1之间获取随机数,共N个数  
AAx0 = rand(Nx,Ny);  %生成Nx*Ny的均布散点坐标x
AAy0 = rand(Nx,Ny);  %生成Nx*Ny的均布散点坐标y

AAx1 = rand(Nx,Ny);  %生成Nx*Ny的均布散点坐标x
AAy1 = rand(Nx,Ny);  %生成Nx*Ny的均布散点坐标y

AAx2 = rand(Nx,Ny);  %生成Nx*Ny的均布散点坐标x
AAy2 = rand(Nx,Ny);  %生成Nx*Ny的均布散点坐标y

AAx =AAx0;  %生成Nx*Ny的均布散点坐标x
AAy =AAy0;  %生成Nx*Ny的均布散点坐标y

aLx=reshape(AAx,[N,1])*Lx; %获取x方向的粒子随机坐标
aLy=reshape(AAy,[N,1])*Ly; %获取y方向的粒子随机坐标

b1 = randi([1,NGeo],N,1); %获取颗粒形状种类分布
b2 = rbanjing*randi([1,Nrad],N,1); %获取颗粒粒径种类分布
b3 = randi([1,Nrank],N,1); %获取颗粒级配种类分布

b4=num2str(zeros(N,1));  %生成初始字符数组
Bb=num2str(zeros(NGeo,1)); 
kk1=0;
kk2=0;
kk3=0;
kk4=0;

for i=1:N
    
  if b1(i) == 1
      b4(i)='o';       %圆形
      kk1=kk1+1;
      aLx1(kk1)=aLx(i);
      aLy1(kk1)=aLy(i);
      b21(kk1)=b2(i);
      b41(kk1)=b4(i);
      Bb(1)='o';
  elseif b1(i) == 2
      b4(i)='d';       %菱形
      kk2=kk2+1;
      aLx2(kk2)=aLx(i);
      aLy2(kk2)=aLy(i);
      b22(kk2)=b2(i);
      b42(kk2)=b4(i);  
      Bb(2)='d';
  elseif b1(i) == 3
      b4(i)='s';       %方形
      kk3=kk3+1;
      aLx3(kk3)=aLx(i);
      aLy3(kk3)=aLy(i);
      b23(kk3)=b2(i);
      b43(kk3)=b4(i);      
      Bb(3)='s';
  elseif b1(i) == 4    
      b4(i)='h';       % 六角形
      kk4=kk4+1;
      aLx4(kk4)=aLx(i);
      aLy4(kk4)=aLy(i);
      b24(kk4)=b2(i);
      b44(kk4)=b4(i); 
      Bb(4)='h';
  end    
end
figure;
set(gcf,'outerposition',get(0,'screensize'));

for ii=1:NGeo  %根据粒子种类分别绘制散点图

    if ii==1
      scatter(aLx1',aLy1',b21',Bb(1)); hold on;
    elseif ii==2
      scatter(aLx2',aLy2',b22',Bb(2)); hold on;
    elseif ii==3
      scatter(aLx3',aLy3',b23',Bb(3)); hold on;
    elseif ii==4
      scatter(aLx4',aLy4',b24',Bb(4));
    end

end

  • 2
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值