围绕另一个点旋转一个点(2D)

发布于 2021-01-31 15:52:11

我正在尝试制作纸牌散开的纸牌游戏。现在使用具有功能的Allegro API来显示Im:

al_draw_rotated_bitmap(OBJECT_TO_ROTATE,CENTER_X,CENTER_Y,X
        ,Y,DEGREES_TO_ROTATE_IN_RADIANS);

因此,我可以轻松制作我的粉丝特效。然后问题是知道鼠标在哪个卡下面。为此,我想到了进行多边形碰撞测试。我只是不确定如何旋转卡上的4个点以构成多边形。我基本上需要执行与Allegro相同的操作。

例如,卡的4点是:

card.x

card.y

card.x + card.width

card.y + card.height

我需要一个像这样的函数:

POINT rotate_point(float cx,float cy,float angle,POINT p)
{
}

谢谢

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    首先减去枢轴点(cx,cy),然后旋转它,然后再次添加该点。

    未经测试:

    POINT rotate_point(float cx,float cy,float angle,POINT p)
    {
      float s = sin(angle);
      float c = cos(angle);
    
      // 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;
    }
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看