2015-04-03 823 views
1

我運行下面的代碼,但得到X,Y,Z和C不能是複雜的錯誤,任何想法是什麼錯誤?Matlab,錯誤使用衝浪,X,Y,Z和C不能複雜

k=1; 
u = linspace(0,2*pi,72); 
v = [-3:.2:-1,1:.2:3]; 
[U,V] = meshgrid(u,v); 
r=sqrt((4*V.^-k)./(cos(U).^2+k*sin(U).^2)); 
X = r.*cos(U); 
Y = r.*sin(U); 
Z = V; 

這是我想要得到的圖像:你得到的是複雜的錯誤,因爲r是複數

function simple_math_functions_animation1 
clc, close all, clear all 

hf1=figure(1);hold on,grid on,axis equal, view([1 -1 1]) 
set(hf1,'Color','w');set(hf1,'Position',[300, 600, 500, 400]); 
xlabel('x');ylabel('y'),zlabel('z'); 

k=1; 
u = linspace(0,2*pi,72); 
v = [-3:.2:-1,1:.2:3]; 
[U,V] = meshgrid(u,v); 
r=sqrt((4*V.^-k)./(cos(U).^2+k*sin(U).^2)); 
X = r.*cos(U); 
Y = r.*sin(U); 
Z = V; 

surf(X,Y,Z,'EdgeColor',[0.5 1. 0.2],'FaceColor',[1 0.2 0.8],'FaceAlpha',0.6); 

XYZ=[reshape(X,1,prod(size(X))); 
    reshape(Y,1,prod(size(Y))); 
    reshape(Z,1,prod(size(Z))); 
    ones(1,prod(size(Z)))]; 
phi=[0 : pi/20 : 50*pi]; 
h=[]; axis([-20 20 -20 20 -20 20]); 

for beta=phi % animation loop ***************** 

    T=[cos(beta) -sin(beta) 0 0;  % rotation matrix 
     sin(beta) cos(beta) 0 0; 
     0   0  1 0; 
     0   0  0 1]; 

    XYZ1=T*XYZ; % coordinates changing 
    X1=reshape(XYZ1(1,:),size(X));Y1=reshape(XYZ1(2,:),size(Y));Z1=reshape(XYZ1(3,:),size(Z)); 
    pause(0.1);if ~isempty(h),delete(h);end 
    h=surf(X1,Y1,Z1,'EdgeColor',[0.5 1. 0.2],'FaceColor',[0.2 0.2 0.8],'FaceAlpha',0.6); 

end  % ****************************************** 

end 
+0

爲我工作。你確定你包含了所有的代碼嗎?您的示例中沒有名爲C的變量。 – jaket 2015-04-03 07:23:26

+0

http://pastebin.com/8pXjeKXw這裏是完整代碼 – adska 2015-04-03 07:43:48

+0

代碼中仍然沒有變量'C' ... – Ratbert 2015-04-03 08:06:12

回答

1

http://adasu.info/plates.png

完整的代碼。 r用於XY,所以當對這些輸入使用surf時,最終會出現該錯誤。這是有道理的,因爲你的V範圍有值,當你設置k=1這個表達式:

r=sqrt((4*V.^-k)./(cos(U).^2+k*sin(U).^2)); 

您有效地試圖利用價值的平方根V,其中一些是否定的,因此r是複雜的價值。如果你看看你上傳的實際圖片,你會錯過的V的力量。因此:

r=sqrt((4*V.^2-k)./(cos(U).^2+k*sin(U).^2)); 

當我這樣做,那麼嘗試運行你的代碼,我得到這個:

enter image description here

+0

http://adasu.info/plates.png這裏是圖片我想要的結果 – adska 2015-04-03 08:33:01

+0

看看圖像和你編碼的內容之間的'r'表達式。你在'V'的電源中缺少'2'。我已經更新了我的答案。看一看。 – rayryeng 2015-04-03 08:41:15

+0

很好,現在工作,謝謝。 – adska 2015-04-03 08:52:35

相關問題