2011-08-02 46 views
1

我想找到一個方法將旋轉一個對象,使其面對一個指定的點,但我得到的數字沒有多大意義,我不認爲我明白數學方法返回什麼。查找要旋轉的度數?

這裏是我的代碼:

public void rotate(double x, double y) { 
    rotateRight(Math.toDegrees(Math.atan2((x - getX()), (y - getY())))); 
} 

x和y指定點和信息getX()和的getY()是對象當前點,所以我試圖找到對象有多少度右轉面向指定點。

任何人都可以推薦一個可靠的方法來做到這一點?

+0

你需要知道它現在面對什麼樣的方式,知道它需要轉多少。因此,您需要三件事情(對象座標,所需座標和對象當前方向) – Paulpro

+1

如果「getX()和getY()是對象的當前點」,那麼您知道對象在哪裏,但不知道它面對的是哪個方向。 –

+0

因此,如果我確實知道對象也面臨着哪種方式,那麼我該如何解決? –

回答

1

您需要一個matrix transformation才能正確完成。

+0

花了我一段時間才弄清楚,但這正是我需要的,謝謝。 –

0

Math.atan2()返回的角度是絕對的。爲了將其轉化爲相對旋轉,您首先需要知道當前角度是多少,然後您需要減去這兩個角度。

1

你的命名有點混亂,所以我在這裏做一些假設。你的「對象」位於原點(0,0),getX()和getY()返回對象當前面對的點,並且你希望對象面對一個新點。

從這裏它是簡單的觸發和算術。第一件事情就是要弄清楚當前的角度:

current_angle=atan(getX()/getY()) 

您的新角將

new_angle=atan(newX/newY) 

,你需要旋轉,通過自然的角度,

rotation_angle=new_angle - current_angle 
+1

我不太確定。你的「當前角度」計算是有缺陷的:你假設「this」背離原點,因爲getX和getY只告訴你當前的*位置*,而不是你正在面對的地方。您計算的「當前角度」是從原點到getX,getY的線,這與問題無關。 – Bohemian

+0

@Bohemian - 我的假設是,問題的措辭是不正確的,getX/getY實際上是這個位置在這個位置的起點。因此,在提問者調用rotate(x,y)之後,隨後對getX()的調用將返回該旋轉調用中的x。就我所見,這是問題答案唯一的唯一途徑。 –

1

這取決於你正在使用什麼單位。就個人而言,弧度,我在我的片段中有這個功能。

public static double getAngleBetween(double x1, double y1, double x2, double y2) 
{ 
     return(Math.atan2(y1-y2, x1-x2)); 
} 

這導致任意兩個抽象點之間的角度(以弧度爲單位)。