2012-11-05 120 views
3

我有一个X,Y,宽度,高度,X和Y旋转中心的对象(originX,originY),并成功计算了此中心点和触摸点之间的角度使用将对象朝向触摸点旋转

touchAngle = Math.toDegrees(Math.atan2(deltaY, deltaX)); 

这个效果很好。

我现在试图通过简单地检查角度是否大于其当前角度,添加一些旋转,如果它较小,然后删除一些旋转,尝试旋转对象到这个接触点。我知道这是错误的,因为当接触点越过0/360边界时,即使这意味着做了非常大的旋转,对象也开始以错误的方式旋转。

什么是一个优雅的解决方案,使其旋转到触摸点的最短距离?

(使用Java,特别是Libgdx)

感谢

+1

什么是*“触点”*?这是一个很好的触摸或一个不好的触摸? –

+1

这只是鼠标/手指被点击/触摸的地方。它总是一个良好的触摸,这个点和对象中心之间的角度都是正确的,并检查 – LiamJPeters

+0

好吧 - 我玩得很开心。 ;)希望你得到一个很好的答案。 :) –

回答

3

我做了一堆这些计算之前(非常不同的应用,寿)。只要采取差异,如果它是负面的添加2pi,然后如果它大于2pi减去2pi。为a-b然后为b-a做这件事。价值较低的将是要走的路。

+0

这是我遇到的问题与2 Pi线交叉的会计处理。我想如果我检查角度之间的差异是否小于Pi,它不会是一个问题,只是朝着最短的方向移动。但是,当计算出的差异大于Pi时,它可能会更麻烦 – LiamJPeters

+0

只是重新编辑我的回答 –

+0

干杯克里斯,我很欣赏答案。说得通 – LiamJPeters