坐等大神matlab画出下面的图

问题描述:

坐等大神matlab画出下面的图

第一幅图球上的圆圈是等距螺旋线
第二幅图球上的方格是等距方形螺旋线
我要的是matlab代码
1个回答 分类:综合 2014-09-17

问题解答:

我来补答
clear
clc

R=10;%球半径
[xs,ys,zs]=sphere(20);
surf(R*xs,R*ys,R*zs)%画球
shading interp

%球上的某一点(经纬度)
a0=pi*7/12;%经度
b0=pi/6;%纬度
%------------------------------------------等距螺旋线------------------------------------------------
%等距螺旋线(与Z轴夹角--水平圆周角)
theta=(0:0.1:10)*pi;
phi=0.02*theta;

%北极处等距螺旋线(等弧长)的XYZ数据
x=R*sin(phi).*cos(theta);
y=R*sin(phi).*sin(theta);
z=R*cos(phi);
xyz=[x;y;z];

xyz([1,3],:)=[sin(b0),cos(b0);-cos(b0),sin(b0)]*xyz([1,3],:);%绕Y轴旋转
xyz([1,2],:)=[cos(a0),-sin(a0);sin(a0),cos(a0)]*xyz([1,2],:);%绕Z轴旋转

hold on
plot3(xyz(1,:),xyz(2,:),xyz(3,:),'w','LineWidth',2)
%------------------------------------------等距方形螺旋线------------------------------------------------
n=3;theta=pi/25;

%建立每个拐角点
S=reshape([1;1;-1;-1]*R*sin((1:n+1)*theta),1,[]);
S(end-2:end)=[];%最后一笔的方向
YS=[0,S];XS=[0,0,-S(1:end-1)];
%增加点,共线向量
t=linspace(0,1,50);
xyz=zeros(3,50);
for i=1:4*n+1
% %北极处等距方形螺旋线(等弧长)的XYZ数据    
xyz(1,:)=(1-t).*XS(i)+t.*XS(i+1);
xyz(2,:)=(1-t).*YS(i)+t.*YS(i+1);
xyz(3,:)=R^2-xyz(2,:).^2-xyz(1,:).^2;
xyz(3,xyz(3,:)<0)=nan;
xyz(3,:)=sqrt(xyz(3,:));

xyz([1,3],:)=[sin(b0),cos(b0);-cos(b0),sin(b0)]*xyz([1,3],:);%绕Y轴旋转
xyz([1,2],:)=[cos(a0),-sin(a0);sin(a0),cos(a0)]*xyz([1,2],:);%绕Z轴旋转
plot3(xyz(1,:),xyz(2,:),xyz(3,:),'k','LineWidth',2)
end

axis equal
xlabel('x');ylabel('y');zlabel('z')
view([1 3 2])
 
 
展开全文阅读
剩余:2000