输出没有在if语句matlab中出现

时间:2015-04-24 07:51:00

标签: matlab if-statement

我想在工作表中获得angle2的输出。但是,angle2保持为零。什么地方出了错?输出没有在&if; if语句中生成'下面。

angle = atan2(r - cy, c - cx); %Calculate the angle from centroid cx,cy
angle1 = angle * 360 / (2*pi); %Convert my angle in degree
angle2 = zeros(size(angle1)); %Set angle2 as zeros value with size 320X1 
    if (angle1 < 0) 
    angle2 = angle1 + 360; %Adding any negative angle values to 360 so i get the values from 1-360 degree
    end

2 个答案:

答案 0 :(得分:1)

angle1是一个向量吗?如果语句没有矢量化,那么除非所有角度都小于0,否则不会输入if语句。矢量化的方法是,

angle = atan2(r - cy, c - cx); %Calculate the angle from centroid cx,cy
angle1 = angle * 360 / (2*pi); %Convert my angle in degree
angle2 = min(angle1,0);
angle2(angle2<0) = angle2(angle2<0)+360;
% angle2 = mod(angle2,360); % or use modolus, see later section.

但是,如果问题不是这样,但你想在向量angle1中将所有负角度转换为正角度,那么它也是可能的。

angle = atan2(r - cy, c - cx); %Calculate the angle from centroid cx,cy
angle1 = angle * 360 / (2*pi); %Convert my angle in degree
angle1(angle1<0) = angle1(angle1<0) + 360;

这样可以避免使用angle1中的值替换angle2中的值。一个未发布的操作,但正如我所想的那样,如果这就是你所追求的,那么就必须在你的代码中的某个地方。

您还可以使用modolus作为第二个示例来获取等效输出。我不确定这种操作是否更好,但它至少是可能的(而且在我看来非常漂亮)。

angle = atan2(r - cy, c - cx); %Calculate the angle from centroid cx,cy
angle1 = angle * 360 / (2*pi); %Convert my angle in degree
angle1 = mod(angle1,360);

答案 1 :(得分:0)

在角度1不为负的情况下,你的角度2保持为零。检查this matlab page以查看atan2和四元数之间的依赖关系。现在,如果你想使用angle2而不考虑angle1,你需要修改你的代码以使angle1为正或者只是接管值:

angle = atan2(r - cy, c - cx);   % Calculate the angle from centroid cx,cy
angle1 = angle * 360 / (2*pi);   % Convert my angle in degree
angle2 = zeros(size(angle1));    % Set angle2 as zeros value with size 320X1 

if (angle1 < 0) 
    angle2 = angle1 + 360; %Adding any negative angle values to 360 so i get the values from 1-360 degree
else
    angle2 = angle1;  % I think this is what you want
end