2014-11-20 10 views
5

Muszę wybrać zakres od 0 do 359,9 stopni w bazie danych SQL.Najlepszy sposób obsługi zakresu 360 stopni

Mój wkład jest w formie kąta środka i zakresu. Na przykład środek = 100 zakres = 50 dałby mi zakres kąta> 75 kąt < 125. Jednak jeśli środek = 0, wówczas zakres byłby kątowy < 25 i kąt> 335.

Zatem mój obecny algorytm działa tak:

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

potem w moim zapytaniu

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

Takie podejście wydaje się być nieco zagmatwana. Czy istnieje lepsze podejście?

+2

użyć matematyki modulo. '(kąt + zakres)% 360'. reszta będzie prawidłowym kątem 0-> 360. –

+1

http://stackoverflow.com/questions/9138790/cant-use-modulus-on-doubles. W przypadku pływających i podwójnych użyć fmod. –

+0

Pomaga to w logice +360 -360. Naprawdę miałem nadzieję, że będę miał jakiś sposób na uniknięcie (minangle> maxangle) i zmienianie zi na logikę. – eng3

Odpowiedz

0

Zmień zakres kątów na 0-720. Zawsze zachowuj minimalną moc: < maxAngle.

jeśli (min> max) max + = 360;

minGłębokość = 50, maks. Siła = 200; => ok

minGłębokość = 200, maks. siła = 50; => min. siła = 200, maks. siła = 360 + 50 = 410; => ok

chociaż to zwiększa złożoność.

+0

Nie mogę zmienić zakresu kątów, to jest wejście, którego szukam. I tak, to zwiększa złożoność. Być może nie jest to mniej skomplikowany sposób. – eng3

Powiązane problemy