2015-02-21 17 views
10

Come calcoli i gradi tra due punti sul bordo di un cerchio in Swift.angolo di calcolo tra due punti sul bordo del cerchio Swift SpriteKit

enter image description here

+0

Sai per certo che questo è un cerchio? Tipo, conosci il centro del cerchio? Poiché due punti non fanno un cerchio, poiché un numero infinito di cerchi diversi può essere descritto da due punti: è necessario un terzo, sul cerchio o sull'origine. – corsiKa

+0

conosco anche l'origine @corsiKa – PoKoBros

+0

Quindi puoi usare solo arctan (delta y/delta x). Non so cosa sia la chiave sprite veloce, quindi non sarei sicuro del formato del codice per quello. Modifica: la maggior parte dei linguaggi di programmazione che utilizzano trig utilizza i radianti, quindi l'output potrebbe essere in radianti. Se c'è una funzione per convertirla in gradi, basta usare quella; altrimenti, usa la formula per convertirla in gradi che è rads * 180/pi – Muhatashim

risposta

21

punti dato p1, p2 su un cerchio con il centro center, si dovrebbe calcolare i vettori di differenza prima:

let v1 = CGVector(dx: p1.x - center.x, dy: p1.y - center.y) 
let v2 = CGVector(dx: p2.x - center.x, dy: p2.y - center.y) 

Poi

let angle = atan2(v2.dy, v2.dx) - atan2(v1.dy, v1.dx) 

è il (regia) angolo tra quei vettori in radianti e

var deg = angle * CGFloat(180.0/M_PI) 

l'angolo in gradi. Il valore calcolato può essere compreso tra -360 .. 360, in modo da potrebbe desiderare di normalizzare al range 0 < = deg < 360 con

if deg < 0 { deg += 360.0 } 
+0

questo codice funzionerà su un iPad? tutto ciò che accadrà è che il cerchio si allargherà un po '. – PoKoBros

+2

@PoKoBros: questo è solo matematica, funziona su qualsiasi dispositivo. Calcola solo un angolo, quindi cosa intendi per "il cerchio si allargherà un po '"? –

+0

Intendo solo che il raggio del cerchio raddoppierà ok un iPad – PoKoBros

Problemi correlati