2011-05-23 74 views
1

我正在制作一个骨架动画编辑器。现在,每个骨骼都有一个起点和终点,当鼠标位于一个点之下时,随后的拖动将导致骨骼根据鼠标的位置旋转。为此,我调用atan2并将鼠标坐标转换为当地鼠标被按下的地方空间。虽然这个“有效”,但它确实是错误的。由骨形成的矢量不一定与鼠标点平行,它应该是。当用鼠标拖动时使用atan2来旋转图像

我觉得有什么关于atan2我不明白。

if(boneUnderMouse) 
    { 
     boneUnderMouse->setAngle(startAngle + 
     (atan2((float)event.mouse.x - startX,event.mouse.y - startY))); 
    } 

感谢

回答

5

atan2有争论yx秩序。因此您需要

atan2((float)event.mouse.y - startY, (float)event.mouse.x - startX) 
+0

还有更多的东西,当起始角度大于或等于π时,它会沿相反的方向旋转。 – jmasterx 2011-05-23 18:31:56

+0

@Milo:这给出了终点和起点之间的角度。因此,如果您将此添加到'startAngle',您会看到这样的效果。尝试直接设置角度(即没有'startAngle +'部分)。 – Howard 2011-05-23 18:34:59

+0

问题是我设置的角度是相对于其父项。这就是为什么我只想添加角度变化 – jmasterx 2011-05-23 18:38:18