首頁 > 後端開發 > C++ > 如何在 2D 中圍繞固定點旋轉點?

如何在 2D 中圍繞固定點旋轉點?

Patricia Arquette
發布: 2024-12-08 15:21:12
原創
658 人瀏覽過

How Do I Rotate a Point Around a Fixed Point in 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中文網其他相關文章!

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