2015-05-07 30 views
0

我知道功能sph2cart,但我覺得我必須錯誤地使用它。在微積分課本,我看到了這以下的球形公式:我需要幫助在MATLAB中以直角座標繪製球面方程

ρ = 1 + 1/5*sin(6θ)*sin(5Φ) 

產生的東西,看起來像這樣:

Bumpy Sphere

我想重現這在圖形圖像,所以我寫的下面的代碼

[q,t] = meshgrid(linspace(0,pi,100),linspace(0,2*pi,100)); 
rho = 1+1/5*sin(6*t)*sin(5*q); 
[x,y,z] = sph2cart(t,q,rho); 
surf(x,y,z) 
axis square, axis equal 

而且我得到了下圖:

Not quite so bumpy as spiky

爲什麼會發生這種情況?爲什麼我沒有得到我的鈣教科書顯示的顛簸球體?

回答

2

有兩個問題:

  1. 你需要*,而不是*你的罪(6 * T)和sin(5 * Q)之間,因爲你想每個元素相乘不矩陣乘法。

  2. 你想●要從0-PI和T運行從0-2PI

此代碼生成你正在尋找的結果運行。

[q,t] = meshgrid(linspace(0,2*pi,100),linspace(0,pi,100)); 
rho = 1+(1/5*sin(6*t).*sin(5*q)); 
[x,y,z] = sph2cart(t,q,rho); 
surf(x,y,z) 
axis square, axis equal 

enter image description here

+0

不知道爲什麼?你的代碼「預放大」了100倍的半徑軸基本常數值(一個100而不是1),與變量部分相比,組成球面座標系統中的「sperical surface」{Radius,Theta,Phi} ---它似乎並不僅僅因爲事故Dave而發生:o)[+1]這樣的評論。可以嘗試添加一個用於這種預放大值的UI滑塊(使「常量」成爲用戶可修改的變量),以便在實時GUI中查看實時效果。 – user3666197

+1

你說得很對:-)在進一步的考慮中,我意識到OP代碼中的錯誤是計算的rho值超出範圍,我注意到了矩陣乘法。更新我的回答以反映這一點。 –