ユーザーがマウスをドラッグして円周上を移動する必要がある MFC アプリケーションがあります。このマウスドラッグの「回転」中に度数を取得する必要があり、それが時計回りか反時計回りかを知る必要があります。
最初に、回転方向を決定するために、現在のマウス位置と、ユーザーがクリックしてドラッグを開始したマウス位置との間の x 座標を比較していました。これは、ユーザーが 180 度以上回転するまでうまく機能します。
円の残りの半分をどのように扱うことができますか?
ユーザーがマウスをドラッグして円周上を移動する必要がある MFC アプリケーションがあります。このマウスドラッグの「回転」中に度数を取得する必要があり、それが時計回りか反時計回りかを知る必要があります。
最初に、回転方向を決定するために、現在のマウス位置と、ユーザーがクリックしてドラッグを開始したマウス位置との間の x 座標を比較していました。これは、ユーザーが 180 度以上回転するまでうまく機能します。
円の残りの半分をどのように扱うことができますか?
誰かが時間の経過とともに時計回りに移動しているか反時計回りに移動しているかを判断するには、少なくとも 3 つの順序付きポイントが必要です。2 つのポイントだけでは、(たとえば) 誰かが 90 度回転したのか -270 度回転したのかは明らかではありません。したがって、単に開始と終了の外積を取るだけではうまくいきません。
ドラッグ中にマウスをサンプリングして、必要な追加情報を取得してから、連続するポイントの各ペア間で増分の外積を取得してみてください。それはあなたが知りたいことを教えてくれます。ただし、180 度を超える回転が発生しないように十分な速度でサンプリングする必要があります。そうしないと、再びあいまいな状況に陥ります。
これらはあなたを助けるかもしれません。
http://en.wikipedia.org/wiki/Atan2
http://www.phy.syr.edu/courses/java-suite/crosspro.html
そして、これはジェスチャを認識する簡単な例です(フラッシュ内ですが、アイデアは重要な部分です)
交差積について読んでください。X ベクトルと Y ベクトルの間の外積 (始点からの差) を計算すると、常に確実に回転方向が得られます。