首页 >后端开发 >C++ >如何在 2D 中围绕固定点旋转点?

如何在 2D 中围绕固定点旋转点?

Patricia Arquette
Patricia Arquette原创
2024-12-08 15:21:12685浏览

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