首頁 > 後端開發 > C++ > 如何在 2D 空間中圍繞另一個點旋轉一個點?

如何在 2D 空間中圍繞另一個點旋轉一個點?

Patricia Arquette
發布: 2024-12-07 15:58:11
原創
900 人瀏覽過

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

在二維空間中圍繞另一個點旋轉一個點

本文解決了計算一個點圍繞另一個點在二維空間中旋轉的挑戰方面。該任務是在開發紙牌遊戲時出現的,其中紙牌呈扇形展開。 Allegro API 的 al_draw_rotated_bitmap 函數有助於輕鬆展開卡片,但它會遮蔽下方的卡片,從而阻礙滑鼠互動。為了解決這個問題,提出了多邊形碰撞測試,這需要旋轉卡片的四個點。

解決方案在於利用執行以下操作的旋轉函數:

  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;
}
登入後複製

透過實現這個函數,可以旋轉卡片的四個點來決定哪張卡片位於滑鼠下方,可在紙牌遊戲中實現有效的滑鼠互動。

以上是如何在 2D 空間中圍繞另一個點旋轉一個點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板