2014-11-20 13 views
5

Devo selezionare un intervallo da 0 a 359,9 gradi in un database SQL.Il modo migliore per gestire l'intervallo di 360 gradi

Il mio in put è in forma di un angolo centro e un intervallo. Ad esempio center = 100 range = 50 mi darebbe un intervallo di angolo> 75 angolo < 125. Tuttavia se center = 0, allora l'intervallo sarebbe l'angolo < 25 e l'angolo> 335.

Così il mio algoritmo attuale funziona così:

minangle = center-range/2 
maxangle = center+range/2 
if minangle<0, then minangle += 360 
if maxangle>0, then maxangle -=360 

Poi nella mia domanda

if minangle<maxangle, I query angle>minangle AND angle<maxangle 
if minangle>maxangle, I query angle>minangle OR angle<maxangle 

Questo approccio sembra essere un po 'contorto. C'è un approccio migliore?

+2

utilizzare modulo matematica. '(angolo + intervallo)% 360'. il resto sarà l'angolo 0-> 360 corretto. –

+1

http://stackoverflow.com/questions/9138790/cant-use-modulus-on-doubles. Per i galleggianti e i doppi usare fmod. –

+0

Questo aiuta con la logica +360 -360. Speravo davvero di avere un modo per evitare il (minangle> maxangle) e il passaggio da e verso o la logica – eng3

risposta

0

Modificare l'intervallo di angolo su 0-720. Tenere sempre minAngle < maxAngle.

if (min> max) max + = 360;

minAngle = 50, maxAngle = 200; => ok

minAngle = 200, maxAngle = 50; => minAngle = 200, maxAngle = 360 + 50 = 410; => ok

sebbene ciò accresca la complessità.

+0

Non riesco a modificare l'intervallo di angoli, questo è l'input che sto cercando. E sì, aumenta la complessità. Forse non c'è un modo meno complesso. – eng3

Problemi correlati