2016-06-27 12 views
2

Sphere関数を使用せずにMatlabで球を描画しようとしています。これは私のコードです:Sphere関数を使用しないMatlab Sphereプロット

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関数を使用すると、Matlabは私のサーフェスが球体であるとみなします。

+0

sqrt ...を緩くし、適切にスケールする – bla

答えて

0

はまあ確かに、よりよいプロットがあった...しかし、あなただけのNaNにZ-マトリックス内のエントリを設定している場合には、動作します:

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

それとも、暗黙の3Dプロットで行くことができます。 MATLABファイル交換では、あなたが応じて機能を見つけることができます(Matlab File Excahnge)に対応するスクリプトは次のようになります。

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

あなたは極座標への切り替えを検討すべきです。トリックは極座標で、長方形のメッシュを持っているということです

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

:MATLABは、長方形のメッシュトポロジー的に等価である表面をプロットすることができます。

上記の数式からわかるように、この慣例では、thetaは極角であり、phiは数学と物理学でよく見られるように方位角です。 sph2cartを使用して、球面座標からデカルト座標への変換を行うことができますが、少し異なる定義を持つ角度に対して方位角と仰角を入力する必要があります。

関連する問題