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

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

Patricia Arquette
发布: 2024-12-08 15:21:12
原创
648 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板