2017-02-27 135 views
0

我想獲得一個包含座標的Vector。我知道我的起點座標,角度和距離。到目前爲止,我已經嘗試過:從起始座標,角度和距離獲取一個點

Vector2 pos = new Vector2(beginningX, beginningY).add(distance, distance).rotate(angle); 

但它不起作用,因爲我期望它。當旋轉不是0時,座標變大,並且終點不在我期望的位置。我知道這肯定是一個簡單的問題,但我無法解決它。

編輯: 試着這樣做:

Vector2 pos = new Vector2(beginningX, beginningY).add(distance, 0).rotate(angle); 

(添加distancex只)仍然沒有成功。

+0

你確定你需要角度嗎?假設你有矢量(1,1),加(2,3)然後你得到(3,4)。這不是你要求的還是我誤解了你的問題?編輯:只需將距離添加到y座標就像添加一個垂直向量到現有的一個 – vikeri

回答

3

我說你這樣做是錯誤的:你需要旋轉距離向量,並把它添加到位置向量:

Vector2 pos = new Vector2(beginningX, beginningY).add(new Vector2(distance, 0).rotate(angle)); 

你可能想在矢量數學閱讀了,但基本上它相當於(如果我正確地理解你想要做什麼):

如果你旋轉一個矢量,你總是圍繞點0/0旋轉。因此,你需要創建覆蓋到你的距離在x軸從0/0的距離向量:

0---------------->d 

現在你旋轉,通過一些角度矢量:

 d 
    /
    /
    /
/
/
0 

然後您偏移向量通過你的出發點,即添加了兩個向量(爲簡單起見,我假設你的出發點是在y軸):

 d 
    /
    /
/
/
/ 
s 
| 
| 
| 
0 
+0

我想知道爲什麼我們不會在數學課上學習有用的東西。 –

+0

@LórántGerber只能猜測;) – Thomas

+0

向量是在數學課中講授的。你只需要採取正確的。 – duffymo

2

您需要旋轉僅距離向量,而不是開始的總和寧和距離。另外就是以任何順序(交換)一樣,所以你可以試試這個方法:

Vector2 pos = new Vector2(distance, 0).rotate(angle).add(beginningX, beginningY); 

優勢:該鏈接的調用不會爲起始位置,將立即成爲垃圾收集垃圾創建一個臨時Vector2。當代碼處理數百萬個向量時,節省空間和垃圾回收時間將非常重要。

0

這是簡單的矢量添加。我假設二維座標,與x軸逆時針測量角度:

x(new) = x(old) + distance*cos(angle) 
y(new) = y(old) + distance*sin(angle) 

確保您的角度以弧度,當你將它們插入三角函數。

相關問題