首页 >后端开发 >C++ >如何在 2D 空间中围绕另一个点旋转一个点?

如何在 2D 空间中围绕另一个点旋转一个点?

Patricia Arquette
Patricia Arquette原创
2024-12-07 15:58:11902浏览

How Do You Rotate a Point Around Another Point in 2D Space?

在二维空间中围绕另一个点旋转一个点

本文解决了计算一个点围绕另一个点在二维空间中旋转的挑战方面。该任务是在开发纸牌游戏时出现的,其中纸牌呈扇形展开。 Allegro API 的 al_draw_rotated_bitmap 函数有助于轻松展开卡片,但它会遮挡下方的卡片,从而阻碍鼠标交互。为了解决这个问题,提出了多边形碰撞测试,这需要旋转卡片的四个点。

解决方案在于利用执行以下操作的旋转函数:

  1. 从点的坐标中减去枢轴点。
  2. 逆时针旋转点。
  3. 将枢轴点添加回

这个函数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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn