2013-10-28 125 views
1

我必須使用三個變量x,y和z繪製曲面,這些是三個關節角q1,q2和q3的函數。但我不知道如何繪製這個。在matlab中繪製曲面

for q1=-170:5:170 
    for q2=-65:5:140 
     for q3=-180:5:70 
      c1 = cosd (q1); 
      c2 = cosd (q2); 
      c3 = cosd (q3); 
      s1 = sind (q1); 
      s2 = sind (q2); 
      s3 = sind (q3); 
      x =(320*c1)-(975*c1*s2)-(200*c1*c2*s3)-(200*c1*c3*s2); 
      y =(320*s1)-(975*s1*s2)-(200*c2*s1*s3)-(200*c3*s1*s2); 
      z = (975*c2)+(200*c2*c3)-(200*s2*s3)+680; 
     end 
    end 
end 

回答

2

有幾點你需要考慮。

  1. for循環是沒有必要的
  2. 您係數可向量必須具有相同的長度
  3. 您需要使用的elementwise,乘法運算.*

編輯:其實我誤解了你首先問題,現在應該是正確的。

所以代碼如下:

q1x = -170:5:170; 
q2x = -65:5:140; 
q3x = -180:5:70; 

[x1, x2, x3] = meshgrid(q1x',q2x',q3x'); 
Q = [x1(:),x2(:),x3(:)]; 

q1 = Q(:,1); 
q2 = Q(:,2); 
q3 = Q(:,3); 

c1 = cosd (q1); 
c2 = cosd (q2); 
c3 = cosd (q3); 
s1 = sind (q1); 
s2 = sind (q2); 
s3 = sind (q3); 
x = (320.*c1) - (975.*c1.*s2) - (200.*c1.*c2.*s3) - (200.*c1.*c3.*s2); 
y = (320.*s1) - (975.*s1.*s2) - (200.*c2.*s1.*s3) - (200.*c3.*s1.*s2); 
z = (975.*c2) + (200.*c2.*c3) - (200.*s2.*s3)  + 680; 

即數據的相當大的量。 - x,y,z都是您表面的單點。

現在我真的不知道你的「表面」應該是什麼樣子。請澄清你想獲得什麼。


scatter3會給你這個可愛的蘑菇:

scatter3(x,y,z,5,z) 
colormap(jet) 
view(45,10) 

mushroom

取得來自散射數據真實表面是有點棘手,但你可以做一些研究,「表面從分散數據「或東西...

+0

很好的答案。也許更好的使用'linspace'? –

+0

@Akshay我誤解了你的問題,並糾正了我的答案。但我仍然不知道你實際想要繪製什麼。 – thewaywewalk