2

これを私のプロジェクトの 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)] を取得しようとしました。

しかし、[0,360) からの範囲のシータおよびファイ入力の任意の入力に対して機能できるように、それを一般化する方法に行き詰まっています。

アドバイスをよろしくお願いします。

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;

最も直感的なものを使用してください。単一の追加に対する 6 つの追加のパフォーマンスへの影響は、まったく無視できます。

編集: 2 番目の方法は忘れてください。面倒すぎます。

于 2012-10-16T05:42:49.380 に答える