检查鼠标是否在旋转的精灵上? C ++

时间:2009-10-10 18:44:47

标签: c++ math

我正在用c ++制作游戏。这是一个纸牌游戏。我已经制作了13张牌,它们围绕着一个点旋转,以便制作你的牌。我需要一种方法来确定用户点击的卡片。我的卡片基本上是围绕卡片中心的一个点旋转的矩形。我想到可能得到鼠标点并围绕我的中心点旋转它,但我不知道如何围绕一个点旋转一个点。感谢。

4 个答案:

答案 0 :(得分:1)

旋转p

诀窍是通过翻译减少围绕点旋转以旋转原点。

  1. 从a减去p(移至原点)
  2. Rotate by angle
  3. 将p添加到结果点(再次移动)
  4. 旋转(x,y)原点的公式:

    alt text

答案 1 :(得分:0)

如果( x 0 y 0 )是中心点且( x < / em> m y m )是鼠标的位置,您可以通过以下方式计算鼠标相对于中心点的角度将( x 0 y 0 )转换为原点(0,0),然后转换为极坐标

  1. 翻译成原点:

    x ', y ')=( x m - x 0 y m - y 0

  2. 从矩形转换为极坐标( x y )→( r θ) :

    r = sqrt( x ' 2 + y ' 2
    θ = tan -1 y '/ x ')

  3. 角度θ应足以告诉您选择了哪张卡。

答案 2 :(得分:0)

你已经有了几种可能性。这是一个相当不同的一个,它更多地依赖于编程而不是三角形。

这个想法是在后面的缓冲区中以独特的,纯色的颜色绘制每张卡片。检查与鼠标单击匹配的点的颜色,并且您有卡。曾经有一段时间这是非常不切实际的 - 但是使用现代图形硬件,这可能非常具有竞争力。

答案 3 :(得分:0)

您可以检查该点是多边形的一部分。 Here你可以找到相当快的实现。