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

Allegro を使用して 2D で別の点を中心に点を回転するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-09 17:26:20922ブラウズ

How to Rotate a Point Around Another Point in 2D Using Allegro?

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

コンピュータ グラフィックスでは、特定の点を中心にオブジェクトを回転するのが一般的な操作です。この場合、Allegro API を使用してカードの 4 隅の点を回転することを目的としています。これを実現するには、次のアプローチを検討してください。

回転点関数数

rotate_point という関数を実装して、目的の方法で回転操作を実行できます。次のパラメータを取ります:

  • cx および cy: ピボット ポイントの X および Y 座標
  • angleInRads: ラジアン単位の回転角度
  • p: ポイントなるrotated

実装:

rotate_point 関数は、最初に指定された点 p からピボット ポイントを減算します。これにより、点が座標系の原点に移動します。次に、回転角度のサインとコサインを使用して回転を実行します。最後に、回転した点を取得するためにピボット ポイントを再度追加します。

コード:

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 隅の点に適用することで、衝突検出に使用できる回転ポリゴンを作成できます。

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

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