不使用球体函数的Matlab球体图

时间:2016-06-27 18:24:45

标签: matlab

我试图在不使用球体函数的情况下在Matlab中绘制球体。这是我的代码:

r = 2;
[ x,y ] = meshgrid(-4:0.1:4);
z = sqrt(r^2-x.^2-y.^2);
mesh(real(z));
hold on 
mesh(real(-z));

上面的代码确实生成了方程r ^ 2 = x ^ 2 + y ^ 2 + z ^ 2的球体。唯一的问题是有一个切割球体的水平面。

我的问题是如何绘制一个不显示水平面的球体?

我没有使用Sphere函数的原因是因为我想绘制一个曲面方程。如果我使用Sphere函数,那么Matlab假设我的表面将是一个球体。

3 个答案:

答案 0 :(得分:1)

您应该考虑切换到极坐标。 MATLAB可以绘制拓扑等效于矩形网格的曲面:

N = 20;
thetavec = linspace(0,pi,N);
phivec = linspace(0,2*pi,2*N);
[th, ph] = meshgrid(thetavec,phivec);
R = ones(size(th)); % should be your R(theta,phi) surface in general

x = R.*sin(th).*cos(ph);
y = R.*sin(th).*sin(ph);
z = R.*cos(th);

figure;
surf(x,y,z);
axis vis3d

result

诀窍是在极坐标中你有一个矩形网格。

正如您在上面的公式中所看到的,在这个惯例中,theta是极角,phi是方位角,因为它在数学和物理学中很常见。您可以使用sph2cart进行从球形坐标到笛卡尔坐标的转换,但是您需要输入角度的方位角和高程,这些角度有不同的定义。

答案 1 :(得分:0)

当然,确实存在更好的情节......但如果你只是将z矩阵中的条目设置为nan,它就可以了:

temp = real(z);
temp(temp==0) = nan; 

或者您可以使用隐式3D绘图。在matlab文件交换中,您可以找到相应的函数(Matlab File Excahnge) 相应的脚本如下所示:

f = 'x^2 +y^2 +z^2 -4';
ezimplot3(f,[-5 5])

答案 2 :(得分:0)

我在这里是新的,但是我在不使用球面函数的情况下为matlab做了一些 虽然有肉 将球体分为两部分,并使用2个函数绘制正负一个

显示一个功能示例的

im是

f=@(x,y) sqrt(3 - (sqrt(3).*(x-4)).^2 -  (sqrt(3).*(y-2)).^2)-5
              ^                ^                              ^
radius of the sphere    position on x axis            position on z axis

完整代码

f=@(x,y) sqrt(3 - (sqrt(3).*(x-4)).^2 -  (sqrt(3).*(y-2)).^2)-5
fmesh(f,[-10 10 -10 10],'ShowContours','on')

hold

f1=@(x,y) -sqrt(3 -  (sqrt(3).*(x-4)).^2 -  (sqrt(3).*(y-2)).^2)-5
fmesh(f1,[-10 10 -10 10],'ShowContours','on')

hold off