程序一利用不同颜色的曲线绘制图像函数.docx

上传人:b****7 文档编号:10775192 上传时间:2023-02-22 格式:DOCX 页数:12 大小:16.74KB
下载 相关 举报
程序一利用不同颜色的曲线绘制图像函数.docx_第1页
第1页 / 共12页
程序一利用不同颜色的曲线绘制图像函数.docx_第2页
第2页 / 共12页
程序一利用不同颜色的曲线绘制图像函数.docx_第3页
第3页 / 共12页
程序一利用不同颜色的曲线绘制图像函数.docx_第4页
第4页 / 共12页
程序一利用不同颜色的曲线绘制图像函数.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

程序一利用不同颜色的曲线绘制图像函数.docx

《程序一利用不同颜色的曲线绘制图像函数.docx》由会员分享,可在线阅读,更多相关《程序一利用不同颜色的曲线绘制图像函数.docx(12页珍藏版)》请在冰豆网上搜索。

程序一利用不同颜色的曲线绘制图像函数.docx

程序一利用不同颜色的曲线绘制图像函数

程序一:

利用不同颜色的曲线绘制图像函数

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

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1