旋转物体以朝向触摸点

3

我有一个对象,它具有x、y、width、height、旋转中心X和Y(originX,originY),并已成功计算出该中心点与触摸点之间的角度使用

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

这很好用。

现在我正在尝试通过简单地检查角度是否大于其当前角度,添加一些旋转,如果它更小,则删除一些旋转,将对象旋转到该触摸点。我知道这是错误的,因为当触摸点穿过0/360边界时,对象开始朝错误的方向旋转,即使这意味着进行非常大的旋转。

有什么优雅的解决方案可以让它以最短的距离旋转到触摸点?

(使用Java,具体来说是Libgdx)

谢谢


1
什么是“触点”?它是好的触点还是坏的触点? - Andrew Thompson
1
这只是鼠标/手指点击/触摸的点。这总是一个良好的触摸,而且该点与对象中心之间的角度都是正确的并已经过检查。 - LiamJPeters
好的 - 我已经玩够了。 ;) 希望你能得到一个好答案。 :) - Andrew Thompson
1个回答

3

我之前做过很多这样的计算(应用场景非常不同,但方法类似)。只需取差值,如果为负数,则加上2pi,如果大于2pi,则减去2pi。对于a-b和b-a分别执行此操作,取两者中较小的值即可。


我遇到的问题是跨越2 Pi线的会计处理。我想,如果我检查角度之间的差异是否小于Pi,那么这不会成为问题,并且只需朝最短的方向移动即可。但是当计算出的差异大于Pi时,可能会更加麻烦。 - LiamJPeters
谢谢你的回答,Chris。很有道理。 - LiamJPeters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接