2013-05-29 87 views
0

我有一个非常奇怪的问题,我需要交上一篇matlab文章。 我写了一个旋转3d矢量的函数。我称之为旋转。“未定义的函数或变量”u“。” MATLAB文章

rotate得到一个向量v,一个角度theta,角度alpha和一个标量r。 该函数将旋转增加矢量用Z轴旋转theta创建的角度,旋转它围绕Z轴(增加X轴创建的角度)alpha,然后用r延长。

例如:

v=(0,0,1) 
theta= pi/2 
alpha=0 
r=1 
rotate(v,theta,alpha,r) will return (0,1,0). 

我的问题是,每当我调用函数的旋转,我得到一个错误说: ???未定义的函数或变量“u”。

错误==>旋转在51 x = u(1);

而在我写的整个代码中,没有称为“u”的函数或变量。

这是我的代码。基本上,我将向量转换为球形坐标,然后添加theta和alpha。我认为它不应该工作?

function [output] = rotate(v,theta,alpha,r) 
if(isnumeric(v)) 
    [i,j]=size(v); 
    if(i>j) 
     for i=1:3 
      sum = sum+pow(v(i,1),2); 
     end 
     sum=sqrt(sum); 
     output(1,1)=sum*r; 
     output(2,1)=acos(v(3,1)/sum)+theta; 
     output(3,1)=atan(v(2,1)/v(1,1))+alpha; 
     if((output(2,1)>pi)||(output(2,1)<-1*pi)) 
      prompt={'Invalid values for second cordinate, more than pi or less than -pi'}; 
      return 
     end 
     if((output(3,1)>2*pi)||(output(3,1)<-2*pi)) 
      prompt={'Invalid values for third cordinate, more than 2 pi or less than -2pi'}; 
      return 
     end 
     r=output(1,1); 
     angle1=output(2,1); 
     angle2=output(3,1); 
     output(1,1)=r*sin(angle1)*cos(angle2); 
     output(2,1)=r*sin(angle1)*sin(angle2); 
     output(3,1)=r*cos(angle1); 
    else 
     for j=1:3 
     sum=sum+pow(v(1,j),2); 
     end 
     sum=sqrt(sum); 
     output(1,1)=sum*r; 
     output(1,2)=acos(v(1,3)/sum)+theta; 
     output(1,3)=atan(v(1,2/v(1,1))+alpha; 
     if((output(1,2)>pi)||(output(1,2)<-1*pi)) 
      prompt={'Invalid values for second cordinate, more than pi or less than -pi'}; 
      return; 
     end 
     if((output(1,3)>2*pi)||(output(1,3)<-2*pi)) 
      prompt={'Invalid values for third cordinate, more than 2 pi or less than -2pi'}; 
      return 
     end; 
     r=output(1,1); 
     angle1=output(1,2); 
     angle2=output(1,3); 
     output(1,1)=r*sin(angle1)*cos(angle2); 
     output(1,2)=r*sin(angle1)*cos(angle2); 
     output(1,3)=r*cos(angle1); 
    end 
else 
    prompt={'not numeric'}; 
    return 
end 
end 

回答

1

您不在正确的目录中,或者您的路径设置不正确。您正在运行内置的rotate函数,该函数与您给出的参数有关。

如果您输入edit rotate.m,您会注意到该功能不是您的。

正确设置您的路径,和/或重命名您的功能。

相关问题