gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:35:00 26 4
gpt4 key购买 nike

我正在尝试制作一个纸牌游戏,让纸牌呈扇形散开。现在要显示它我使用具有功能的 Allegro API:

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)
{
}

谢谢

最佳答案

先减去轴心点(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;
}

关于c++ - 围绕另一个点旋转一个点 (2D),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2259476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com