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

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

Patricia Arquette
Patricia Arquette原創
2024-12-08 15:21:12676瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn