2012-11-05 121 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