圍繞二維固定點旋轉點
為了在紙牌遊戲中創建逼真的紙牌扇動效果,有必要變換卡點的坐標以與旋轉角度對齊。 Allegro API 提供了方便的旋轉位圖函數,但了解底層數學運算對於碰撞偵測至關重要。
旋轉變換演算法
旋轉點 ( x, y) 關於固定點 (cx, cy) 的角度θ,遵循這些步驟:
減去樞軸點:從要旋轉的點的座標中減去樞軸點的x 和y 座標:
dx = x - cx dy = y - cy
應用旋轉矩陣:應用旋轉矩陣將點旋轉角度θ:
x_new = dx * cos(θ) - dy * sin(θ) y_new = dx * sin(θ) + dy * cos(θ)
加入樞軸點: 增加樞軸點的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中文網其他相關文章!