程序一利用不同颜色的曲线绘制图像函数.docx
《程序一利用不同颜色的曲线绘制图像函数.docx》由会员分享,可在线阅读,更多相关《程序一利用不同颜色的曲线绘制图像函数.docx(12页珍藏版)》请在冰豆网上搜索。
程序一利用不同颜色的曲线绘制图像函数
程序一:
利用不同颜色的曲线绘制图像函数
functionplot3c(x,y,z,color)
%封装了Matlab的plot3函数
%参数color中
%r代表红色,g代表绿色,b代表蓝色,c代表青绿色,m代表品红色
%y代表黄色,k代表黑色,w代表白色
%plot3语句为Matlab中绘制三维曲线的库函数
switch(color)
case0
plot3(x,y,z,'w-');
case1
plot3(x,y,z,'r-');
case2
plot3(x,y,z,'g-');
case3
plot3(x,y,z,'c-');
case4
plot3(x,y,z,'m-');
case5
plot3(x,y,z,'y-');
case6
plot3(x,y,z,'b-');
case7
plot3(x,y,z,'k-');
end
程序二:
绘制立方体,x,y,z表示立方体中心,Lx、Ly、Lz为立方体的长宽高,color代表颜色。
functionboxplot3(x,y,z,Lx,Ly,Lz,color)
x0=x-Lx/2;y0=y-Ly/2;z0=z-Lz/2;
x=[x0x0x0x0x0+Lxx0+Lxx0+Lxx0+Lx];
y=[y0y0y0+Lyy0+Lyy0y0y0+Lyy0+Ly];
z=[z0z0+Lzz0+Lzz0z0z0+Lzz0+Lzz0];
index=zeros(6,5);
index(1,:
)=[12341];
index(2,:
)=[56785];
index(3,:
)=[12651];
index(4,:
)=[43784];
index(5,:
)=[26732];
index(6,:
)=[15841];
fork=1:
6
plot3c(x(index(k,:
)),y(index(k,:
)),z(index(k,:
)),color)
holdon%后续图形曲线叠加到前面的图形窗口中显示
end
程序三:
绘制两个立方体(代表卫星)。
functionDrawSatellite(moveX,moveY,moveZ,color);
Length=500;
Width=500;
Height=500;
BoxPlot3(moveX,moveY,moveZ,Length,Width,Height,color);
BoxPlot3(moveX,moveY,moveZ,Length,Width*5,Height/10,color);
程序四绘制卫星轨道
functiondrawsatelliteorbit
a=26560;%卫星轨道的长半轴.
e=0.02;%e是椭圆的偏心率.
E=[0:
0.1:
2*pi];
x=a*(cos(E)-e);
y=a*sqrt((1-e^2))*sin(E);
z=0*E;
DtoR=2*pi/360;
A1=[32.892.8152.8212.6272.8332.8];%卫星星座数据.
fork=1:
6
A=A1(k)*DtoR;%升交点的经度
B=55*DtoR;%轨道的倾角
C=pi/100;%近地点幅角
%总共有6个卫星轨道平面
R3=[cos(A)-sin(A)0;
sin(A)cos(A)0;
001;];
R1=[100;
0cos(B)-sin(B);
0sin(B)cos(B);];
R2=[cos(C)-sin(C)0;
sin(C)cos(C)0;
001;];
L1=length(E);
R312=R1*R2*R3;
Ans=R312*[x;y;z;];%将卫星轨道坐标系转换到地球赤道坐标
x1=Ans(1,:
);
y1=Ans(2,:
);
z1=Ans(3,:
);
plot3c(x1,y1,z1,k);
boxplot3(0,0,0,200,200,200,7);
holdon;
axisequal;
axisoff;
end
程序五:
绘制地球
functiondrawearth(time)
%time是参数
%利用这个参数,可以绘制一个看起来是旋转的地球
r=6400;
time=0;
j1=[0:
pi/10:
2*pi];
w1=[-pi/2:
pi/10:
pi/2];
L1=length(w1);
L2=length(j1);
forn=1:
L1
z=ones(L2,1);
z=z*r*sin(w1(n));
temp=r*cos(w1(n));
x=temp*sin(j1);
y=temp*cos(j1);
plot3(x,y,z);
holdon;
grid;
end
%figure(3);
unit=ones(1,1);
z0=ones(1,1);
x0=ones(1,1);
y0=ones(1,1);
forn=1:
L2
%n=7;
form=1:
L1
temp=w1(m);
temp2=j1(n)+time*pi/12;
z=r*sin(temp);
x=r*cos(temp)*sin(temp2);
y=r*cos(temp)*cos(temp2);
z1=unit*z;
x1=unit*x;
y1=unit*y;
z0=[z0z1];
x0=[x0x1];
y0=[y0y1];
end
z0(:
1)=[];
x0(:
1)=[];
y0(:
1)=[];
plot3(x0,y0,z0);
axisequal;
axisoff;
holdon;
end
程序六:
模拟运动的卫星
clear;clc;closeall;
DtoR=2*pi/360;
jiaostep=360/24*DtoR;
j=0;
a=26560;%卫星轨道的长半轴.
e=0.02;%e是椭圆的偏心率.
E=[0:
0.1:
2*pi];
x=a*(cos(E)-e);
y=a*sqrt((1-e^2))*sin(E);
z=0*E;
drawearth(0);
holdon;
fortime=1:
12
axison;
A1=32.8;%卫星星座数据.
A=A1*DtoR;%升交点的经度
B=55*DtoR;%轨道的倾角
C=pi/100;%近地点幅角
R1=[cos(A)-sin(A)0;
sin(A)cos(A)0;
001;];
R2=[100;
0cos(B)-sin(B);
0sin(B)cos(B);];
R3=[cos(C)-sin(C)0;
sin(C)cos(C)0;
001;];
L1=length(E);
R312=R1*R2*R3;
Ans=R312*[x;y;z;];
x1=Ans(1,:
);
y1=Ans(2,:
);
z1=Ans(3,:
);
plot3c(x1,y1,z1,2);
holdon;
axisequal;
axison;
gridon;
ctable=10;
A=A1*DtoR;
B=55*DtoR;
C=ctable*DtoR+time*2*pi/24;%近地点幅角
x=a*(cos(C)-e);
y=a*sqrt((1-e^2))*sin(C);
z=0*C;
R1=[cos(A)-sin(A)0;
sin(A)cos(A)0;
001;];
R2=[100;
0cos(B)-sin(B);
0sin(B)cos(B);];
R3=[cos(C)-sin(C)0;
sin(C)cos(C)0;
001;];
L1=length(E);
R312=R1*R2*R3;
Ans=R312*[x;y;z;];
x1=Ans(1,:
);
y1=Ans(2,:
);
z1=Ans(3,:
);
drawsatellite(x1,y1,z1,6);
M(time)=getframe;
M(time+1)=getframe;
end
axison;
程序七:
模拟用户可见卫星
clear;clc;closeall;
a=26560;%卫星轨道的长半轴.
e=0.02;
temp=0;%便于把卫星的指标点顺序放到矩阵指标当中。
%e是椭圆的偏心率.
E=[0:
0.1:
2*pi];
x=a*(cos(E)-e);
y=a*sqrt((1-e^2))*sin(E);
z=0*E;
timenow=0;%单位是小时
globalSatellitePosition%定义全局变量
globalttum
SatellitePosition=ones(24,4);
figure
(1);
drawearth(0);%调用程序五
ttum=ones(24,4);
holdon;
DtoR=2*pi/360;
A1=[32.892.8152.8212.6272.8332.8];
Drawsatelliteorbit;%调用程序四
ctable=[1050160260;%平均近地角
80180220320;
10130250340;
50150170300;
100210310340;
120140240350;];
Wx=ones(1,1);Wy=ones(1,1);Wz=ones(1,1);
simple=1;
fork=1:
6
A=A1(k)*DtoR;%升交点经度
B=55*DtoR;%轨道倾角
form=1:
4
C=ctable(k,m)*DtoR+timenow*2*pi/24;%近地点幅角
x=a*(cos(C)-e);
y=a*sqrt((1-e^2))*sin(C);
z=0*C;
R3=[cos(A)-sin(A)0;
sin(A)cos(A)0;
001;];
R1=[100;
0cos(B)-sin(B);
0sin(B)cos(B);];
R2=[cos(C)-sin(C)0;
sin(C)cos(C)0;
001;];
L1=length(E);
R312=R1*R2*R3;
Ans=R312*[x;y;z;];
Wx=[WxAns(1,:
)];
Wy=[WyAns(2,:
)];
Wz=[WzAns(3,:
)];
x1=Ans(1,:
);
y1=Ans(2,:
);
z1=Ans(3,:
);
Drawsatellite2(x1,y1,z1,k,sinple);%调用程序三
temp=k*m;
SatellitePosition(temp,:
)=[x1y1z11];
holdon;
end
end
%用余弦定理计算地心到用户和用户到卫星证件的夹角
%如果两者证件的夹角小于90°,就认为改卫星是不可见的.
earthcenterpos=[000];
userposition=[640000];%假设一个用户的位置
fork=1:
24
temp=SatellitePosition(k,1:
3)-userposition;
Dist1=temp*temp';
temp=userposition-earthcenterpos;
Dist2=temp*temp';
temp=SatellitePosition(k,1:
3)-earthcenterpos;
Dist3=temp*temp';
jiajiao=acos((Dist1+Dist2-Dist3)/2/sqrt(Dist1)/sqrt(Dist2));
if(jiajiao<=pi/2)
SatellitePosition(k,4)=0;
end
end
figure
(2)
drawearth(0);%调用程序五
holdon;
drawsatelliteorbit;%调用程序四
fork=1:
24
if(SatellitePosition(k,4)==1)
TempX=SatellitePosition(k,1);
TempY=SatellitePosition(k,2);
TempZ=SatellitePosition(k,3);
drawsatellite2(tempX,tempY,tempZ,1,simple);
%调用程序三绘制出用户可见卫星
end
end
TempX=userposition
(1);
TempY=userposition
(2);
TempZ=userposition(3);
cube=50;
boxplot3(TempX,TempY,TempZ,cube,Cube,Cube,3*Cube,1);%标记出用户的位置
holdon;
SatellitePosition=[SatellitePosition;UserPosition0];
%用变量CalUserPos来记录迭代计算结果
CalUserPos=CalculateUserPosition(SatellitePosition);%调用程序九
[m,n]=size(CalUserPos);
for(k=1;m)
TempX=CalUserPos(k,1);
TempY=CalUserPos(k,2);
TempZ=CalUserPos(k,3);
Cube=50;
BoxPlot3(TempX,TempY,TempZ,Cube,Cube,3*Cube,3);
holdon;
end