在二維空間中圍繞另一個點旋轉一個點
本文解決了計算一個點圍繞另一個點在二維空間中旋轉的挑戰方面。該任務是在開發紙牌遊戲時出現的,其中紙牌呈扇形展開。 Allegro API 的 al_draw_rotated_bitmap 函數有助於輕鬆展開卡片,但它會遮蔽下方的卡片,從而阻礙滑鼠互動。為了解決這個問題,提出了多邊形碰撞測試,這需要旋轉卡片的四個點。
解決方案在於利用執行以下操作的旋轉函數:
這個函數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中文網其他相關文章!