我想在工作表中获得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
答案 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