1

40枚の回転画像を含む画像があります。

画像インデックスは0から始まります。実際には0-39です。

これが0-39を度に変換するコードです

int image_direction = 0; //Can be 0-39
int facing_degrees = (int)(360.0 * (-(image_direction- 10.0))/40.0);
while(facing_degrees < 0)
    facing_degrees += 360;
while (facing_degrees > 360)
    facing_degrees -= 360;

そうですね、360度を超える度だけでなく、負の度も与えることができます。そのため、2つのwhileループがあります。

ここで、このプロセスを逆にして、90度を指定して0に戻したいと言います。

私は次のようなことを考えていました

 if(degrees == 90 || degrees >= 80 && degrees <= 99)
    image_direction = 0;
 elseif(degrees == 100 || degrees >= 91 && degrees <= 109)
    image_direction = 39;
//etc.......

ええと、私は数学が苦手です、まあ、私はこの種のものを忘れていました。

ifステートメントの巨大なケースを回避するために、image_directionから度を与える関数を逆にして、単純な方程式で逆方向に実行するにはどうすればよいのでしょうか。

ここにいくつかの結果があります 回転結果

Image Index = 0 Image Degree = 90
Image Index = 1 Image Degree = 81
Image Index = 2 Image Degree = 72
Image Index = 3 Image Degree = 63
Image Index = 4 Image Degree = 54
Image Index = 5 Image Degree = 45
Image Index = 6 Image Degree = 36
Image Index = 7 Image Degree = 27
Image Index = 8 Image Degree = 18
Image Index = 9 Image Degree = 9
Image Index = 10 Image Degree = 0
Image Index = 11 Image Degree = 351
Image Index = 12 Image Degree = 342
Image Index = 13 Image Degree = 333
Image Index = 14 Image Degree = 324
Image Index = 15 Image Degree = 315
Image Index = 16 Image Degree = 306
Image Index = 17 Image Degree = 297
Image Index = 18 Image Degree = 288
Image Index = 19 Image Degree = 279
Image Index = 20 Image Degree = 270
Image Index = 21 Image Degree = 261
Image Index = 22 Image Degree = 252
Image Index = 23 Image Degree = 243
Image Index = 24 Image Degree = 234
Image Index = 25 Image Degree = 225
Image Index = 26 Image Degree = 216
Image Index = 27 Image Degree = 207
Image Index = 28 Image Degree = 198
Image Index = 29 Image Degree = 189
Image Index = 30 Image Degree = 180
Image Index = 31 Image Degree = 171
Image Index = 32 Image Degree = 162
Image Index = 33 Image Degree = 153
Image Index = 34 Image Degree = 144
Image Index = 35 Image Degree = 135
Image Index = 36 Image Degree = 126
Image Index = 37 Image Degree = 117
Image Index = 38 Image Degree = 108
Image Index = 39 Image Degree = 99
Image Index = 0 Image Degree = 90
Image Index = 1 Image Degree = 81
Image Index = 2 Image Degree = 72
Image Index = 3 Image Degree = 63
Image Index = 4 Image Degree = 54
Image Index = 5 Image Degree = 45
Image Index = 6 Image Degree = 36
Image Index = 7 Image Degree = 27
Image Index = 8 Image Degree = 18
4

2 に答える 2

1

うーん、少し調整して「パーセンテージ式」に似たものを使用してみませんか。

image_direction = (int)(((float)(degrees-90) / 360) * 40) % 40;
if (image_direction < 0)
    image_direction += 40; // for negative integers

式を分解します。度を360で割り、40を掛けて、指定された度が与えられた正しい画像を取得します。次に、モジュロ演算子を使用して、度が+360または<-360の場合、image_directionを0〜39の範囲に保ちます。負の値だった場合、image_directionは負の値になるため、それに40を追加するとimage_directionが修正されます。

お役に立てれば。

編集:申し訳ありませんが、90度の部分を見逃しているようです==画像インデックス0、ここに追加するのは簡単です。実際の度数から90を引くだけです(上記で編集したコード)

于 2012-01-26T10:33:32.640 に答える
1

入力から出力へのマッピングから、これらをExcelに貼り付けて、度を計算する式は次のようになりました。

RawDegrees = 90 - (index * 9)

次に、これを0 ... 360にクリップします(whileループを使用してラップアラウンドします)。最終的な度の出力が得られます。これを逆にする式は、インデックスを主題にするために上記を再配置することによって見つけられます

    RawDegrees-90 =-(インデックス* 9)--- 1
    RawDegrees / 9.0-10 = -index --- 2

    したがって
    インデックス=10-度/9.0

これにより、次のマッピングが得られます

    発見されたインデックス
    90 0
    81 1
    72 2
    63 3
    54 4
    45 5
    36 6
    27 7
    18 8
    9 9
    010
    351-29
    342 -28
    333 -27
    324 -26
    315 -25
    306 -24
    297 -23
    288 -22
    279 -21
    270 -20
    261-19
    252 -18
    243 -17
    234 -16
    225 -15
    216 -14
    207 -13
    198 -12
    189 -11
    180 -10
    171 -9
    162 -8
    153 -7
    144 -6
    135 -5
    126 -4
    117 -3
    108 -2
    99 -1
    90 0
    81 1
    72 2
    63 3
    54 4
    45 5
    36 6
    27 7
    18 8

あなたがする必要があるのは、0..39への答えをクリップするためにラップアラウンドを実行することです。

index = index < 0 ? index + 40 : index;

正しい出力を取得します。

ちなみに、度コードへのインデックスは、同じ出力を取得するために次のように因数分解される場合があります(入力0..39で有効)

int facing_degrees = (int)(90.0 - (image_direction * 9.0));    
facing_degrees = facing_degrees < 0 ? facing_degrees + 360 : facing_degrees;
于 2012-01-26T10:47:50.667 に答える