在MATLAB上为我的项目实现这一点。
我有一个最多分为3个圆弧的圆圈。 所以每个弧的角度范围是[0,120),[120,240],[240,360]度。
现在我有一个代码,可以找出角度是否在给定任何θ的圆弧A,B,C中。
theta = mod(theta,360);
if theta >= 0 && theta < 120
Arc = A;
elseif theta >= 120 && theta < 240
Arc = B;
elseif theta >= 240 && theta < 360
Arc = C;
这很好用。以下是我正在努力争取的情况:
圆圈可以旋转角度phi。
因此,例如,如果圆圈顺时针旋转30度,我的角度范围将是 [30,150],[150,270],[270,390]
我应该怎么写if语句来处理这个案子? 我的θ输入范围从0到无穷大,所以我试图进行模数除法 [30,150],[150,270],[270,30]
但是现在我被困住了如何使它一般化,因此它可以适用于theta的任何输入 和phi输入范围从[0,360)
提前感谢您的建议。
答案 0 :(得分:2)
如果您知道圆圈的旋转角度(如您所说,phi = 30°
),则只需使用theta-phi
代替theta
。其余代码保持不变:
theta = mod(theta-phi,360);
if theta >= 0 && theta < 120
Arc = A;
elseif theta >= 120 && theta < 240
Arc = B;
elseif theta >= 240 && theta < 360
Arc = C;
或者,您可以将 phi
添加到所有角度:
theta = mod(theta,360);
ranges = mod([0 120; 120 240; 240 360])
if theta >= 0+phi && theta < 120+phi
Arc = A;
elseif theta >= 120+phi && theta < 240+phi
Arc = B;
elseif theta >= 240+phi && theta < 360+phi
Arc = C;
使用您认为最直观的内容;六次添加对单次添加的性能影响完全可以忽略不计。
编辑:忘了第二种方法,它太乱了。