1 模型
1.1 NSGA2原理
2 部分代码
clear all;
clc;
close all;
set(0,'defaultfigurecolor','w')
global DEM safth hmax scfitness;
a=load('XYZmesh.mat');%读取数字高程信息DEM
DEM=a;
DEM.Z=DEM.Z-200;
safth=60;
figure(6);
mesh(DEM.X,DEM.Y,DEM.Z+50);
% view(250 ,60);
% axis([0 100 0 100])
axis([0 100 0 100 0 500])
colormap summer;
figure(7)
R=5;%半径
a=50;%原点x坐标
b=50;%原点y坐标
h=400;%圆柱高度
m=100;%分割线的条数
[x,y,z]=cylinder(R,m);%创建以(0,0)为圆心,高度为[0,1],半径为R的圆柱
x=x+a;%平移x轴
y=y+b;%平移y轴,改为(a,b)为底圆的圆心
z=h*z;%高度放大h倍
mesh(x,y,z,'FaceColor',[0 0 0])%重新绘图
hold on
view(250 ,60);
axis([0 100 0 100])
theta = linspace(0,2*pi,1000); %将一个圆周分为40份
X=a+R*cos(theta); %将cos值赋予x
Y=b+R*sin(theta); %将sin赋予Y
Z=ones(size(X))+h; %设置Z与X长度想等
fill3(X,Y,Z,[0,0,0]); %使用Fill3功能函数,填充XYZ所围成的区域,这个是顶盖
fill3(X,Y,Z-2,[0,0,0]); %底盖
hmax=max(max(DEM.Z));
hmin=min(min(DEM.Z));
JULI=zeros(1,5);
for num=1:5
figure(num);
mesh(DEM.X,DEM.Y,DEM.Z+50);
% axis([0 100 0 100 hmin hmax*2]);
colormap summer;
grid off;
xlabel('x/km');
ylabel('y/km');
zlabel('z/m');
hold on;
R=5;%半径
a=50;%原点x坐标
b=50;%原点y坐标
h=400;%圆柱高度
m=100;%分割线的条数
[x,y,z]=cylinder(R,m);%创建以(0,0)为圆心,高度为[0,1],半径为R的圆柱
x=x+a;%平移x轴
y=y+b;%平移y轴,改为(a,b)为底圆的圆心
z=h*z;%高度放大h倍
mesh(x,y,z,'FaceColor',[0 0 0])%重新绘图
view(250 ,60);
axis([0 100 0 100])
theta = linspace(0,2*pi,1000); %将一个圆周分为40份
X=a+R*cos(theta); %将cos值赋予x
Y=b+R*sin(theta); %将sin赋予Y
Z=ones(size(X))+h; %设置Z与X长度想等
fill3(X,Y,Z,[0,0,0]); %使用Fill3功能函数,填充XYZ所围成的区域,这个是顶盖
fill3(X,Y,Z-2,[0,0,0]); %底盖
demx=DEM.X;
demy=DEM.Y;
demz=DEM.Z+50;
%% 圆柱2
R=5;%半径
a=40;%原点x坐标
b=80;%原点y坐标
h=400;%圆柱高度
m=100;%分割线的条数
[x,y,z]=cylinder(R,m);%创建以(0,0)为圆心,高度为[0,1],半径为R的圆柱
x=x+a;%平移x轴
y=y+b;%平移y轴,改为(a,b)为底圆的圆心
z=h*z;%高度放大h倍
mesh(x,y,z,'FaceColor',[0 0 0])%重新绘图
theta = linspace(0,2*pi,1000); %将一个圆周分为40份
X=a+R*cos(theta); %将cos值赋予x
Y=b+R*sin(theta); %将sin赋予Y
Z=ones(size(X))+h; %设置Z与X长度想等
fill3(X,Y,Z,[0,0,0]); %使用Fill3功能函数,填充XYZ所围成的区域,这个是顶盖
fill3(X,Y,Z-2,[0,0,0]); %底盖
%% 圆柱3
R=5;%半径
a=80;%原点x坐标
b=40;%原点y坐标
h=400;%圆柱高度
m=100;%分割线的条数
[x,y,z]=cylinder(R,m);%创建以(0,0)为圆心,高度为[0,1],半径为R的圆柱
x=x+a;%平移x轴
y=y+b;%平移y轴,改为(a,b)为底圆的圆心
z=h*z;%高度放大h倍
mesh(x,y,z,'FaceColor',[0 0 0])%重新绘图
theta = linspace(0,2*pi,1000); %将一个圆周分为40份
X=a+R*cos(theta); %将cos值赋予x
Y=b+R*sin(theta); %将sin赋予Y
Z=ones(size(X))+h; %设置Z与X长度想等
fill3(X,Y,Z,[0,0,0]); %使用Fill3功能函数,填充XYZ所围成的区域,这个是顶盖
fill3(X,Y,Z-2,[0,0,0]); %底盖
startx(1)=round(20*rand(1));
starty(1)=round(20*rand(1));
startz(1)=2;
xx=1;
flag=1;
k=2;
while flag
if starty(k-1)>95||startx(k-1)>95
flag=0;
end
startx(k)=startx(k-1)+xx;
starty(k)=starty(k-1)+xx;
startz(k)=startz(k-1);
RR=sqrt((startx(k)-a)^2+(starty(k)-b)^2);
while RR<=R
starty(k)=starty(k)-1;
RR=sqrt((startx(k)-a)^2+(starty(k)-b)^2)
end
% startx(k)=startx(k)-xx;
% demz(startx(k),starty(k))
if demz(startx(k),starty(k))<10
startz(k)= demz(startx(k),starty(k))+2;
end
if startz(k)<demz(startx(k),starty(k))
startz(k)= demz(startx(k),starty(k))+50+5*rand(1);
else
startz(k)= demz(startx(k),starty(k))+50+5*rand(1);
end
k=k+1;
end
for i=2:length(startx)
JULI(num)=JULI(num)+sqrt( (startx(i)- startx(i-1))^2+(starty(i)- starty(i-1))^2+(startz(i)- startz(i-1))^2);
end
switch num
case 1
plot3(starty,startx,startz,'k-','LineWidth',4);hold on
text(starty(1),startx(1),startz(1),'起点','color','k','FontSize',13)
text(starty(end),startx(end),startz(end),'起点','color','k','FontSize',13)
case 2
plot3(starty,startx,startz,'b-','LineWidth',4);hold on
text(starty(1),startx(1),startz(1),'起点','color','k','FontSize',13)
text(starty(end),startx(end),startz(end),'起点','color','k','FontSize',13)
case 3
plot3(starty,startx,startz,'r-','LineWidth',4);hold on
text(starty(1),startx(1),startz(1),'起点','color','k','FontSize',13)
text(starty(end),startx(end),startz(end),'起点','color','k','FontSize',13)
case 4
plot3(starty,startx,startz,'c-','LineWidth',4);hold on
text(starty(1),startx(1),startz(1),'起点','color','k','FontSize',13)
text(starty(end),startx(end),startz(end),'起点','color','k','FontSize',13)
case 5
plot3(starty,startx,startz,'m-','LineWidth',4);hold on
text(starty(1),startx(1),startz(1),'起点','color','k','FontSize',13)
text(starty(end),startx(end),startz(end),'起点','color','k','FontSize',13)
end
end
3 仿真结果
4 参考文献
[1]谭励, 王浩宇, and 连晓峰. "一种基于改进NSGA-II的无人机路径规划方法.".
部分理论引用网络文献,若有侵权联系博主删除。
5 MATLAB代码与数据下载地址
见博客主页