我正在做一些sprite工具包中的代碼,並且想要根據開始位置計算一個精靈的位置並在給定方向和距離上移動它。例如,假設我使用的度數是0,意思是直線上升,我想將精靈從當前位置向45度(向上和向右)方向移動10個點。快速計算y方向上的新點x距離
三角函數不是我的力量,我一直在努力弄清楚如何應用它。沿45度方向移動看起來相當簡單,但我不確定如何計算方向,如110(向右和向右)或225(向左和向下)。
我第一次嘗試是這樣的:
public func offset(byDistance distance:CGFloat, inDirection degrees:CGFloat) {
let vertical = sin(degrees) * distance
let horizontal = sqrt(pow(distance, 2.0) + pow(vertical, 2.0))
self.position = self.position.applying(CGAffineTransform(translationX:horizontal, y:vertical))
}
但我不認爲這是工作的結果是這樣的:
Direction 45, distance 88.26 -> New location {75.10, 115.88}
Direction 135, distance 88.26 -> New location {7.79, 88.60}
Direction 225, distance 88.26 -> New location {-82.09, 120.53}
Direction 315, distance 88.26 -> New location {65.76, 110.06}
任何人都可以給我一些線索,在那裏我出錯了?
謝謝你的工作完美。 Trig始終是我在學校掙扎的事情,因爲我總是試圖瞭解它是如何工作的。我已經編寫了30多年了,它仍然迫使我嘗試去理解它。我仍然在數學閱讀互聯網網站,所以我會繼續堵塞:-) – drekka
我認爲我錯過的一件大事是功能以弧度工作。我看過的所有數學網站都以度爲單位。我還注意到,如果我使用OS X計算器,默認情況下會使用度數,如果在OS X的Spotlite搜索中輸入'sin(45)'或類似的值,則使用弧度。 – drekka
iOS和Mac OS觸發功能始終使用弧度。大多數描述trig函數的網站都使用度數,因爲它們更直觀。如果你明白一個圓的周長是2Π•半徑,並且你假設半徑是1單位,你可以想象一個螞蟻沿着圓的外側行走。如果它行走Π/ 2個單位,它將沿着該圓周的四分之一行進。一旦它走Π單位,它將在圓周的一半。當它走過2個單位時,它將完成一整圈。這就是弧度的工作原理。 –