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

2D で固定点を中心に点を回転するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-08 15:21:12648ブラウズ

How Do I Rotate a Point Around a Fixed Point in 2D?

2D で固定点を中心に点を回転する

カード ゲームでリアルなカード煽り効果を作成するには、次のことが必要です回転角度に合わせてカード ポイントの座標を変換します。 Allegro API は、ビットマップを回転するための便利な関数を提供しますが、衝突検出の目的には、基礎となる数学的演算を理解することが重要です。

回転変換アルゴリズム

点を回転するには ( x, y) 固定点 (cx, cy) を中心として角度 θ だけ回転すると、次のようになります。手順:

  1. ピボット ポイントを減算します: 回転する点の座標からピボット ポイントの x 座標と y 座標を減算します:

    dx = x - cx
    dy = y - cy
  2. 回転を適用行列: 回転行列を適用して角度 θ だけポイントを回転します:

    x_new = dx * cos(θ) - dy * sin(θ)
    y_new = dx * sin(θ) + dy * cos(θ)
  3. ピボット ポイントを追加します: x 座標と y 座標を追加しますピボット ポイントを変換されたものに戻します座標:

    x = x_new + cx
    y = y_new + cy

実装

このアルゴリズムを使用して、回転を実行する C のような関数を次に示します:

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;
}

この機能を使用して、カードのポイントを回転して衝突検出を実行できるようになりましたマウスクリックイベント用。

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

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