2017-12-27 15 views
3

私はスプライトキットでいくつかのコードを実行しており、開始位置に基づいてスプライトの位置を計算し、それを所定の方向と距離に移動したいと考えています。たとえば、0を意味する直線を上にして度を使用していると仮定して、スプライトを現在の位置から45度(上と下)の10ポイントの方向に移動したいとします。新しい点x y方向の距離を計算する

三角法は私の強みではなく、私はそれをどのように適用するかを考え出すのに苦労してきました。 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} 

誰も私のようにいくつかの手がかりを与えることができる場所I間違った?ここで

答えて

3

は、いくつかの手がかりです:

  1. sin()は、度をラジアンない取るので、あなたは、変換する必要があります。
  2. 0が正しいので、調整する必要はありません。
  3. cos()を水平に使用します。

これは、あなたが必要なものに近いです:

public func offset(byDistance distance:CGFloat, inDirection degrees:CGFloat) { 
    let radians = (degrees - 90) * .pi/180 
    let vertical = sin(radians) * distance 
    let horizontal = cos(radians) * distance 
    self.position = self.position.applying(CGAffineTransform(translationX:horizontal, y:vertical)) 
} 
+0

ありがとうございました。 Trigはいつも私は学校で苦労していました。なぜなら、私はいつもそれがどのように働いているのか理解しようとすると問題があったからです。私は今30年以上コーディングしてきましたが、それでも私はそれを理解しようとしています。私はまだ数学上のインターネットサイトを読んでいるので、私は忘れてしまいます:-) – drekka

+0

私が逃した大きなものは、関数がラジアンで動作することでした。私が見ていたすべての数学のサイトは度で働いていました。私はOS X計算機を使用した場合、OS XのSpotlite検索で 'sin(45)'やそれに類するものを入力した場合と同じように、度数を使用することに注意しました。 – drekka

+0

iOSとMac OSのtrig関数は常にラジアンを使用します。 trig関数を記述するほとんどのサイトでは、より直感的なので、度数を使用します。円の円周が2π•半径であることを理解している場合、半径が1単位であると仮定すると、円の外側に沿って歩いているアリを考えることができます。それがΠ/ 2ユニットを歩くと、円の周りに1/4の距離移動します。 Πユニットを歩くと、円の途中にあります。それが2Πユニットを歩いたとき、完全な円を完成させるでしょう。それがラジアンの仕組みです。 –

1

あり2です(実際には3は、しかし、のは、第三無視しましょう)サインとコサインのような三角関数のための別の表記:度とラジアン。どちらも角度を表します。度数の範囲は0〜360で、ラジアンの範囲は0〜です。それらの間の変換

は簡単です:

degrees = 180 * radians/π 
radians = degrees/180 * π 

のiOSおよびMac OSは、その三角関数のためにラジアンを使用しています。

角度を使用して角度を追跡し、次にラジアンに変換してから、値をトリガー関数に渡すか、ラジアンを使用して変換することができます。

円の円周が2π • radiusであり、半径が1単位であるとすると、円の外側に沿って歩いているアリを考えるとラジアンを理解できます。円周(外側)に沿った全経路は、距離にあります。蟻がπ/2ユニットを歩くと、円の周りを1/4回移動します。 πユニットを歩くと、サークルの半分になります。それがユニットを歩いていると、完全な円が完成します。それがラジアンの仕組みです。

+0

男、SOフォントのpi記号は醜いです!小文字のpiは2 Tsのように見え、大文字のPIは逆さまのUのように見えます。どちらもほとんど認識できません。コードフォントの小文字のπは、半分のところに見える唯一のフォントです。 –