Rotating a point about another point (2D)(围绕另一个点旋转一个点 (2D))
问题描述
我正在尝试制作一种纸牌散开的纸牌游戏.现在使用具有功能的 Allegro API 来显示它:
I'm trying to make a card game where the cards fan out. Right now to display it Im using the Allegro API which has a function:
al_draw_rotated_bitmap(OBJECT_TO_ROTATE,CENTER_X,CENTER_Y,X
,Y,DEGREES_TO_ROTATE_IN_RADIANS);
所以有了这个,我可以轻松地制作我的粉丝效果.问题是知道哪张卡在鼠标下面.为此,我想到了进行多边形碰撞测试.我只是不确定如何旋转卡片上的 4 个点来组成多边形.我基本上需要做和Allegro一样的操作.
so with this I can make my fan effect easily. The problem is then knowing which card is under the mouse. To do this I thought of doing a polygon collision test. I'm just not sure how to rotate the 4 points on the card to make up the polygon. I basically need to do the same operation as Allegro.
比如卡片的4点是:
card.x
card.y
card.x + card.width
card.y + card.height
我需要一个类似的功能:
I would need a function like:
POINT rotate_point(float cx,float cy,float angle,POINT p)
{
}
谢谢
推荐答案
先减去枢轴点(cx,cy)
,然后旋转,再添加点.
First subtract the pivot point (cx,cy)
, then rotate it, then add the point again.
未经测试:
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;
}
这篇关于围绕另一个点旋转一个点 (2D)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:围绕另一个点旋转一个点 (2D)


基础教程推荐
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 常量变量在标题中不起作用 2021-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 如何检查GTK+3.0中的小部件类型? 2022-11-30