2

私がそれを見つけるための知識を完全に欠いていることを除いて、間違いなくこの質問は以前に尋ねられました。

私は古典的なスネーク(別名ニブルズ)ゲームを書こうとしていますが、ロジックは非常に単純です。方向は、デルタ座標ペアで表されます。北は-1、0です。東は0、1です。南は1,0です。西は0、-1です。

数学のコースを受講してから10年が経ちました。そのため、これらのペアをNorth=0度の値に変換する方法が正確にはわかりません。東=45、南= 90; west = 135の場合、問題は非常に単純であり、クロック演算の場合になり、その後、デルタペアに変換されます。

また、これは学業の宿題ではなく、独学です

編集:以下で選択した回答のおかげで、実用的なプロトタイプを手に入れました。 http://ominian.com/examples/js/pinglib/snakes.html

4

3 に答える 3

2
  1. 本当に度を意味する場合は、45度ではなく90度の増分が必要です。

  2. 関数が必要ですatan2(多くの言語でさまざまな形式で存在します)。angle = 180/pi * atan2(dy,dx)--のようなものは、ラジアンで値を返す180/piためです。atan2これが行うことと必要なことの間には、多数の小さな不一致があります。dy下向きではなく上向きに増加し、0は北ではなく東になり、atan2通常は0から2piではなく-piと+piの間の値を返します。これらすべてを解くのは、読者の練習問題として残されています:-)。

  3. 説明した4つの特殊なケースのみが必要な場合は、醜くアドホックなことを行うことができます。たとえば、 S、Wはそのプロパティを共有し、E、Wはそのプロパティをangle = 180*(dy-dx>0)+90*(dx!=0)共有するため、このジョブを実行します。dy-dx>0dx!=0

  4. dx,dyどこでも値を操作し、角度を明示的に使用しない方がよい場合があります。たとえば、90度の回転はちょうど(dx,dy)=(-dy,dx)(または(dy,-dx)他の方向に)です。

于 2011-03-27T00:13:28.677 に答える
1

必要な関数はatan2()-2つの引数のアークタンジェントです。それは特にその目的のためにあります。もちろん、結果はラジアンで返されるため、度に変換する必要があります。従来の角度を基準にした結果が返されます。ここで、ゼロは+ X軸に沿っており、+ pi/2は+Y軸に沿っています。したがって、方位角に変換する必要があります。

于 2011-03-27T00:12:51.547 に答える
0

ほとんどの言語には、x、yデルタをラジアン単位の角度に直接変換するatan2関数があります。度に変換するのはあなた次第です。

于 2011-03-27T00:13:18.830 に答える