Main Content

球面座標から直交座標への変換および解析的なプロット

この例では、シンボリック式を球面座標から直交座標に変換し、数値データを明示的に生成せずに、変換された式を解析的にプロットする方法を示します。

球面座標系では、点 P の位置を 3 つの変数で特徴付けることができます。球面座標を記述するために使用される変数の規則は教科書によって異なります。これらの例では、次の規則を使用します。

  • 半径距離 ρ

  • 方位角 θ

  • 極角 ϕ

P の球面座標 (ρ,θ,ϕ) から直交座標 (x,y,z) への変換は次の式で与えられます。

x=ρsinϕcosθ,y=ρsinϕsinθ,z=ρcosϕ.

シンボリック式を球面座標から直交座標に変換すると、fplot3fsurfなどの Symbolic Math Toolbox™ グラフィックス関数を使用して式をプロットできます。

点とその投影のプロット

(ρ,θ,ϕ)=(1,1.2,0.75) にある点 P をプロットします。

球面座標を直交座標 (xP,yP,zP) に変換します。変換された座標には数値が含まれるため、plot3 を使用して点をプロットします。

rho = 1;
theta = 1.2;
phi = 0.75;
x_P = rho*sin(phi)*cos(theta);
y_P = rho*sin(phi)*sin(theta);
z_P = rho*cos(phi);
plot3(x_P,y_P,z_P,'ko','MarkerSize',10,'MarkerFaceColor','k')
hold on

プロットの各軸にラベルを付け、視線を変更し、等しいデータ単位を使用するように軸のスケーリングを設定します。

xlabel('x')
ylabel('y')
zlabel('z')
view([75 40])
axis equal;

次に、点 P の原点への直線投影をプロットします。球面座標において、この直線投影は (r,1.2,0.75) によってパラメーター化されます。r の範囲は 01 になります。この行のパラメーター表現をシンボリック式として指定し、fplot3 を使用してプロットします。

syms r
xr = r*sin(phi)*cos(theta);
yr = r*sin(phi)*sin(theta);
zr = r*cos(phi);
fplot3(xr,yr,zr,[0 rho],'k')

xy 平面への垂直線投影をプロットします。直交座標において、この直線投影は (xP,yP,z) によってパラメーター化されます。z の範囲は 0zP になります。

syms z
fplot3(sym(x_P),sym(y_P),z,[0 z_P],'k')

上端の水平線投影を z 軸にプロットします。直交座標において、この直線投影は (rsinϕcosθ,rsinϕsinθ,zP) によってパラメーター化されます。r の範囲は 01 になります。

fplot3(xr,yr,sym(z_P),[0 rho],'k--')

下端の水平線投影を z 軸にプロットします。直交座標において、この直線投影は (rsinϕcosθ,rsinϕsinθ,0) によってパラメーター化されます。r の範囲は 01 になります。

fplot3(xr,yr,sym(0),[0 rho],'k')

Figure contains an axes object. The axes object contains 5 objects of type line, parameterizedfunctionline.

次に、座標 z=0 での xy 平面に、方位角 θ の範囲を示す平面をプロットします。

syms s t
x_azimuthal = s*sin(phi)*cos(t);
y_azimuthal = s*sin(phi)*sin(t);
fsurf(x_azimuthal,y_azimuthal,0,[0 rho 0 theta],'FaceColor','b','EdgeColor','none')

極角 ϕ の範囲を示す平面をプロットします。

syms u v
x_polar = u*sin(v)*cos(theta);
y_polar = u*sin(v)*sin(theta);
z_polar = u*cos(v);
fsurf(x_polar,y_polar,z_polar,[0 rho 0 phi],'FaceColor','g','EdgeColor','none')
hold off

Figure contains an axes object. The axes object contains 7 objects of type line, parameterizedfunctionline, parameterizedfunctionsurface.

球体のプロット

半径 r=4 で球体をプロットします。

球面座標において、この球体は (4,θ,ϕ) によってパラメーター化されます。ϕ の範囲は 0πθ の範囲は 02π になります。表面のパラメーター表現をシンボリック式として指定して、球面座標を直交座標に変換します。次に、fsurf を使用して球体をプロットします。

syms phi theta
r = 4;
x = r*sin(phi)*cos(theta);
y = r*sin(phi)*sin(theta);
z = r*cos(phi);
fsurf(x,y,z,[0 pi 0 2*pi])
axis equal

Figure contains an axes object. The axes object contains an object of type parameterizedfunctionsurface.

半球のプロット

半径 r=4 で半球をプロットします。

球面座標において、この球体は (4,θ,ϕ) によってパラメーター化されます。ϕ の範囲は 0π/2θ の範囲は 02π になります。表面のパラメーター表現をシンボリック式として指定して、球面座標を直交座標に変換します。次に、fsurf を使用して半球をプロットします。

syms phi theta
r = 4;
x = r*sin(phi)*cos(theta);
y = r*sin(phi)*sin(theta);
z = r*cos(phi);
fsurf(x,y,z,[0 pi/2 0 2*pi])
axis equal

Figure contains an axes object. The axes object contains an object of type parameterizedfunctionsurface.

パラメーター化された表面のプロット

球面座標における半径距離が方位角と極角に関連する、パラメーター化された表面をプロットします。

表面は半径座標 ρ=2+sin(5ϕ+7θ) をもちます。ϕ の範囲は 0πθ の範囲は 02π になります。表面のパラメーター表現をシンボリック式として指定して、球面座標を直交座標に変換します。次に、fsurf を使用してパラメーター化された表面をプロットします。

syms phi theta
rho = 2 + sin(5*phi + 7*theta);
x = rho*sin(phi)*cos(theta);
y = rho*sin(phi)*sin(theta);
z = rho*cos(phi);
fsurf(x,y,z,[0 pi 0 2*pi])
view(45,50)

Figure contains an axes object. The axes object contains an object of type parameterizedfunctionsurface.