2

在 MATLAB 上为我的项目实现这个。

我有一个分成 3 条弧线的圆。所以每条圆弧的角度范围是 [0,120), [120,240), [240,360) 度。

现在我有一个代码,可以在给定任何 theta 的情况下查找角度是否位于弧 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 语句来处理这种情况?我的 theta 输入范围可以从 0 到无穷大,所以我尝试进行模除以得到 [30,150)、[150,270)、[270,30)

但现在我被困在如何使其泛化,以便它可以适用于范围为 [0,360) 的任何 theta 和 phi 输入的输入

提前感谢您的建议。

4

1 回答 1

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;

使用您认为最直观的任何内容;六个添加与单个添加的性能影响完全可以忽略不计。

编辑:忘记第二种方法,它太乱了。

于 2012-10-16T05:42:49.380 回答