大作业--月球绕地球旋转简版

在这里插入图片描述
matlab代码
close all;
clear;

oR=[cos(pi),-sin(pi),0;
sin(pi),cos(pi),0;
0,0,1];

stp=1;
nsp=20;
ox=-11;
oy=0;
oz=0;
%[u,v,w]=sphere;
x=0;

%[u,v,w] = sphere(20);

for i=0:1:nsp
%生成一个地球
R=3; %地球半径
[k,j,l] = sphere(200); %获得三维球面得坐标,生成三个n乘n得矩阵,n默认为20,三个矩阵分别是x,y,z单位球得坐标,然后是一列一列来的
k=reshape(k,1,[]); %B = reshape(A,m,n) 将矩阵A的元素返回到一个m×n的矩阵B。[]代表让他自己生成
j=reshape(j,1,[]); %这里相当于把矩阵展平,变成一向量
l=reshape(l,1,[]);
Tz=[cos(x),-sin(x),0; %地球自转速度
sin(x),cos(x),0;
0,0,1];
p=Tz*[k;j;l];

% k=k'*Tz(1,:);
% j=j'*Tz(2,:);
% l=i'*Tz(3,:);
plot3(p(1,:),p(2,:),p(3,:));  %分别取第一列第二列三列,也就是x,y,z
                              %plot3根据x,y,z绘制三维曲线,p(:,1)为取矩阵的第一列元素
                              %这里的xyz可以是三个数,或者三个相同维数的向量或者矩阵

% plot3(k,j,l);

%生成一个月亮  
  u=1;
  v=1;
  w=1;

% [u,w,v] = sphere(200);
%
% u=reshape(u,1,[]);
% w=reshape(w,1,[]);
% v=reshape(v,1,[]);
Tt=[6,0,0;
0,0,0;
0,0,0];
T=[cos(x),-sin(x),0; %每次转pi/10
sin(x),cos(x),0;
0,0,1];
Ty=[cos(pi/4),0,sin(pi/4);
0,1,0;
-sin(pi/4),0,cos(pi/4)];
Tx=[1,0,0;
0,cos(pi/6),-sin(pi/6);
0,sin(pi/6),cos(pi/6)];
op=TyTxTTt[u;v;w];

%plot3((op(1,:)+6),(op(2,:)+6),(op(3,:)+6));
%op=T*[u;v;w];

% [x,y,z] = sphere(20);
% surf=[x,y,z];

DrawFrame(oR, op,0);
x=x+pi/10;
oR1=[cos(pi+x),-sin(pi+x),0;
 sin(pi+x),cos(pi+x),0;
 0,0,1];
oR=Ty*Tx*oR1;

end

调用的一个函数
function DrawFrame(oR, op, fcla)

ToDeg=180/pi;
ToRad=pi/180;

%% 设置坐标轴端点
px=[2,0,0]’;
py=[0,2,0]’;
pz=[0,0,2]’;

px=oRpx+op;
py=oR
py+op;
pz=oR*pz+op;

%% 设置固定参考坐标轴端点
wx=[4,0,0]’;
wy=[0,4,0]’;
wz=[0,0,4]’;
wo=[0,0,0]’;

% %绘制固定参考坐标系
Connect3D(wo,wx,‘r’,0.5); hold on;
Connect3D(wo,wy,‘b’,0.5); hold on;
Connect3D(wo,wz,‘g’,0.5);hold on;
plot3(wo(1),wo(2),wo(3),‘rX’);
plot3(wo(1),wo(2),wo(3),‘rO’);

% %绘制局部坐标系
Connect3D(op,px,‘r’,2); hold on;
Connect3D(op,py,‘b’,2); hold on;
Connect3D(op,pz,‘g’,2);hold on;

view(145,33);
axis equal
axis([-10,10,-10,10,-10,10]);
xlabel(‘X’);
ylabel(‘Y’);
zlabel(‘Z’);
grid on;
pause(0.1);
drawnow;

if(fcla)
cla;
end

效果图
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值