pos=cell(1,100);
for i=1:100
pos{i}=[rand(1,1)*5,rand(1,1)*5,rand(1,1)*5];
end
dolpos=[rand(1,1)*5,rand(1,1)*5,rand(1,1)*5];
directdol=pos{1}-dolpos;
for i=2:100
if norm(pos{i}-dolpos)<norm(directdol)
directdol=pos{i}-dolpos;
end
end
x=zeros(1,100);
y=zeros(1,100);
z=zeros(1,100);
v=0.1;
direct1=cell(1,100);
direct2=cell(1,100);
direct3=cell(1,100);
direct4=cell(1,100);
direct5=cell(1,100);
direct6=cell(1,100);
direct7=cell(1,100);
direct8=cell(1,100);
cons=ones(1,100);
for (i=1:100)
direct1{i}=[rand(1,1)*5,rand(1,1)*5,rand(1,1)*5]-pos{i};
direct2{i}=zeros(1,3);
direct3{i}=zeros(1,3);
direct4{i}=zeros(1,3);
direct7{i}=zeros(1,3);
direct8{i}=zeros(1,3);
end
for t=1:2000
dolpos=dolpos+directdol/norm(directdol)*1.1*v/10;
for i=1:100
m=0;
n=0;
k=0;
l=[0,0,0];
direct5{i}=zeros(1,3);
direct6{i}=zeros(1,3);
for j=1:100
if j==i
continue
else
direct7{i}=(direct7{i}+pos{j}-pos{i})./j;
direct8{i}=(direct8{i}+direct1{j})./j;
if (norm(pos{i}-pos{j})<=5)&&(norm(pos{i}-pos{j})>=0.1)
m=m+1;
k=k+norm(direct1{j});
l=l+direct1{j};
direct2{i}=(direct2{i}+(pos{j}-pos{i}))./m;
direct3{i}=(direct3{i}+direct1{j})./m;
cons(i)=norm(l)/k;
elseif norm(pos{i}-pos{j})<0.1;
n=n+1;
direct4{i}=(direct2{i}+(pos{i}-pos{j}))./n;
end
end
end
if norm(pos{i}-dolpos)<=1%dangerous area
direct5{i}=pos{i}-dolpos;
direct6{i}=(-1)*directdol;
direct1{i}=direct5{i}+direct6{i};
pos{i}=pos{i}+(0.5*(direct5{i}+direct6{i}))*v;
if norm(pos{i}-dolpos)<=0.1
pos{i}=[-111,-11,-11];
directdol=[rand(1,1)*10,rand(1,1)*10,rand(1,1)*10];
end
for r=1:30
if norm(pos{r}-dolpos)<norm(directdol)
directdol=pos{r}-dolpos;
end
end
else
if (pos{i}(1)>=5)||(pos{i}(2)>=5)||(pos{i}(1)<=0)||(pos{i}(2)<=0)||(pos{i}(3)>=5)||(pos{i}(3)<=0)
direct1{i}=direct1{i}*(-1);
pos{i}=pos{i}+direct1{i}/norm(direct1{i})*v;
else
if norm(pos{i}-dolpos)<=2.5%feeling area
direct5{i}=pos{i}-dolpos;
direct6{i}=(-1)*directdol;
direct1{i}=0.1*direct2{i}+0.1*direct3{i}+0.1*direct4{i}+0.25*direct5{i}+0.25*direct6{i}+0.1*direct7{i}+0.1*direct8{i};
pos{i}=pos{i}+direct1{i}/norm(direct1{i})*v;
else
direct1{i}=0.1*direct1{i}+0.1*direct2{i}+0.1*direct3{i}+0.1*direct4{i}+0.3*direct7{i}+0.3*direct8{i};
pos{i}=pos{i}+direct1{i}/norm(direct1{i})*v*exp(5*(cons(i)-1));
end
end
end
end
if (dolpos(1)>=5||dolpos(2)>=5||dolpos(1)<=0||dolpos(2)<=0||dolpos(3)>=5||dolpos(3)<=0)
directdol=(-1)*directdol;
end
dolpos=dolpos+directdol/norm(directdol)*1.1*v/10;
for i=1:100
x(i)=pos{i}(1);
y(i)=pos{i}(2);
z(i)=pos{i}(3);
end
plot3(x,y,z,'^',dolpos(1),dolpos(2),dolpos(3),'*')
axis([0 5 0 5 0 5],'square','manual');
grid on;
pause(0.1);
end
没有合适的资源?快使用搜索试试~ 我知道了~
Boid集群运动(无捕食者、有捕食者俩种代码)Matlab
共2个文件
m:2个
2星 需积分: 45 65 下载量 130 浏览量
2018-04-16
18:38:36
上传
评论 11
收藏 2KB ZIP 举报
温馨提示
改良的Boid集群运动模型,可以运行能够跑出来,仅供参考。
资源推荐
资源详情
资源评论
收起资源包目录
Boid模型代码.zip (2个子文件)
Boid模型代码
Untitled.m 2KB
Untitled2.m 4KB
共 2 条
- 1
资源评论
- 钦锐锋2020-12-01运行不稳定,整体构思还可以,值得借鉴
- anhuipanyun2020-05-29不好,不推荐
qq_41994599
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功