ホームページ >バックエンド開発 >C++ >2D 空間で別の点を中心に点を回転するにはどうすればよいですか?

2D 空間で別の点を中心に点を回転するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-07 15:58:11902ブラウズ

How Do You Rotate a Point Around Another Point in 2D Space?

2 次元で別の点を中心に点を回転する

この記事では、2 次元で別の点を中心とした点の回転を計算するという課題に取り組みます。寸法。このタスクは、カードが扇状に展開されるカード ゲームの開発で発生します。 Allegro API の al_draw_rotated_bitmap 関数を使用すると、カードの展開が容易になりますが、下のカードが隠れてマウス操作が妨げられます。これに対処するために、カードの 4 つの点の回転を必要とするポリゴン衝突テストが提案されています。

解決策は、次の操作を実行する回転関数を利用することにあります:

  1. ポイントの座標からピボット ポイントを減算します。
  2. ポイントを回転します。
  3. ピボット ポイントをポイントの座標に追加します。

この関数、rotate_point は次のように実装されます。

POINT rotate_point(float cx, float cy, float angleInRads, POINT p)
{
  float s = sin(angleInRads);
  float c = cos(angleInRads);

  // translate point back to origin:
  p.x -= cx;
  p.y -= cy;

  // rotate point
  float xnew = p.x * c - p.y * s;
  float ynew = p.x * s + p.y * c;

  // translate point back:
  p.x = xnew + cx;
  p.y = ynew + cy;

  return p;
}

この関数を実装することにより、 、カードの 4 つの点を回転させてどのカードがマウスの下にあるかを決定できるため、カード内で効果的なマウス操作が可能になります。ゲーム。

以上が2D 空間で別の点を中心に点を回転するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。