怎么用matlab画一个球心坐标为(6000,2000,0),半径为14000的半球,求大佬给个代码

怎么用matlab画一个球心坐标为(6000,2000,0),半径为14000的半球,求大佬给个代码,第1张

x=-10000:22000;

y=-14000:18000;

z=sqrt(14000^2-(x-6000)^2-(y-2000)^2);

mesh(x,y,z)

这个是画整个球。至于你要画哪部分半球,再对x,y或者z取值范围进行约束即可

我下面百分号后都是说明文字,这是在matlab里说明文字的标准写法。

clear

%

清除所有workspace中的变量。

[x,y]

=

meshgrid

([-1:05:1]);

%

这是在打网点,自变量x和y的取值范围都是从-1到1,每个点的间距是005,间距越细密图形越精确;matlab画图都是通过把区间离散化为格点的方法画图的,计算每一个格点的函数值然后把每个点及其对应的函数值描上就是在画图。这里由于是二元函数,自变量所在是一个区域,所以最后格点就组成了一个网。

Z=sqrt(1-X^2-Y^2)+eps;

%

这就是在计算球面方程每一个点的函数数值了,+eps就是加matlab认为的非常非常小的一个数,这么做是只是为了让图形不至于出现可能的小坑,不加也无所谓;X右下方的表示是在进行点对点运算,因为在这里,X和Y都是矩阵,如果不加点,matlab就会把X^2进行矩阵运算,但我们这里不是要这么做,我们只是在求每一点的函数值,也就是把每一个x格点平方就可以了,所以必须加点,让matlab知道我们是想这么算。

Z((X^2+Y^2)>1)=0;

%

这个含义很明显啊,(X^2+Y^2)>1显然没法开根号,要是不让z=0,matlab就会给你算出虚数,说不定也给画在图上,你想看到吗?所以就让所有这样的点数值为零。

mesh(X,Y,abs(Z))

%

就是在画三维图

title('球面x^2+y^2+z^2=1');

axis([-1

2

-1

1

0

1]);

这些都是在设置画出来的图形。title是在加标题,axis是在标坐标轴上的点。

这里每一行的matlab命令后都有分号,加分号是为了不让这一行计算的结果显示在命令窗口里,导致窗口显示的东西过多。不加分号就自动输出了结果。如果我们需要看到什么结果,就不加分号就完了。

%画球

[alpha,beta]=meshgrid(0:2pi/25:2pi);

r=3;

center=[4 5 6];

x=rsin(beta)cos(alpha)+center(1);

y=rsin(beta)sin(alpha)+center(2);

z=rcos(beta)+center(3);

surf(x,y,z)

xlabel('x');ylabel('y');zlabel('z');

hold on

%画投影

surf(x,y,zeros(size(z)));%xy上的投影

surf(x,zeros(size(y)),z,zeros(26,26));

%计算旋转后的球心,画出旋转后的球

%绕y轴旋转,只是球心变了,相当于以(0,y,0)为球心,y为原来球心的y坐标,sqrt(x^2+y^2)

%为半径旋转相应的角度,因此绕y轴旋转45°后的球心位置是

deg0=acos(center(3)/sqrt(center(1)^2+center(3)^2));%原来球心与yz平面的夹角

deg1=deg0+pi/4;%旋转45°后与yz的夹角

center1(1)=sqrt(center(1)^2+center(3)^2)sin(deg1);

center1(2)=center(2);

center1(3)=sqrt(center(1)^2+center(3)^2)cos(deg1);

x1=rsin(beta)cos(alpha)+center1(1);

y1=rsin(beta)sin(alpha)+center1(2);

z1=rcos(beta)+center1(3);

surf(x1,y1,z1)

%原点到球心的连线

plot3([0 center(1)],[0 center(2)],[0 center(3)]);

plot3([0 center1(1)],[0 center1(2)],[0 center1(3)]);

%球心绕y轴旋转的轨迹

ry=sqrt(center(1)^2+center(3)^2);

ralpha=0:02:2pi;

xx=rysin(ralpha);

yy=ones(size(ralpha))center(2);

zz=rycos(ralpha);

plot3(xx,yy,zz,'-')

不同视角的图形

%画球

r=1;

theta=linspace(0,pi);

phi=linspace(0,2pi);

[tt,pp]=meshgrid(theta,phi);

x=rsin(tt)cos(pp);

y=rsin(tt)sin(pp);

z=rcos(tt);

%上面三句可以改成简单的一句:

%[x,y,z] = sph2cart(pp,pi/2-tt,r);

%其中的变换是matlab的球坐标定义与寻常不同造成的,可以看matlab的帮助

subplot(1,2,1)

mesh(x,y,z)

shading flat

axis square

%%%%%%%%%%%%%%%%%%%%%画柱

subplot(1,2,2)

[X,Y,Z] = cylinder(r,200);

%cylinder的具体用法可见matlab帮助,输入doc cylinder查看帮助

surf(X,Y,Z)

axis square

试试下面的:

[ x1 y1 z1 ] = sphere();

mesh( x1 15, y1 15, z1 15 );

alpha( 03 ); % 透明

axis equal;

hold on;

[ cx, cy, cz ] = cylinder( 02 );

mesh( cx, cy, ( cz - 05 ) 3 );

theta=0:pi/12:2pi;

phy=0:pi/24:pi;

[theta,phy]=meshgrid(theta,phy);

r=2;

x=rsin(phy)cos(theta);

y=rsin(phy)sin(theta);

z=rcos(phy);

surf(x,y)

以上就是关于怎么用matlab画一个球心坐标为(6000,2000,0),半径为14000的半球,求大佬给个代码全部的内容,包括:怎么用matlab画一个球心坐标为(6000,2000,0),半径为14000的半球,求大佬给个代码、matlab 绘制球面方程、matlab问题,语句不用太多,较简单,我是新手,求教。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10119892.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存