2 次元で別の点を中心に点を回転する
この記事では、2 次元で別の点を中心とした点の回転を計算するという課題に取り組みます。寸法。このタスクは、カードが扇状に展開されるカード ゲームの開発で発生します。 Allegro API の al_draw_rotated_bitmap 関数を使用すると、カードの展開が容易になりますが、下のカードが隠れてマウス操作が妨げられます。これに対処するために、カードの 4 つの点の回転を必要とするポリゴン衝突テストが提案されています。
解決策は、次の操作を実行する回転関数を利用することにあります:
この関数、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 サイトの他の関連記事を参照してください。