2014-11-20 15 views
5

को संभालने का सबसे अच्छा तरीका मुझे SQL डेटाबेस में 0 से 35 9.9 डिग्री से एक श्रेणी का चयन करने की आवश्यकता है।360 डिग्री रेंज

मेरा इनट एक केंद्र कोण और एक सीमा के रूप में है। उदाहरण के लिए केंद्र = 100 रेंज = 50 मुझे कोण की एक श्रृंखला> 75 कोण < 125 देगा। हालांकि अगर केंद्र = 0, तो सीमा < 25 और कोण> 335 कोण होगी।

इस प्रकार मेरे वर्तमान एल्गोरिथ्म इस तरह काम करता है:

minangle = center-range/2 
maxangle = center+range/2 
if minangle<0, then minangle += 360 
if maxangle>0, then maxangle -=360 
अपनी क्वेरी में

फिर

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

यह दृष्टिकोण थोड़ा जटिल हो रहा है। क्या कोई बेहतर दृष्टिकोण है?

+2

मॉड्यूलो गणित का उपयोग करें। '(कोण + रेंज)% 360'। शेष उचित 0-> 360 कोण होगा। –

+1

http://stackoverflow.com/questions/9138790/cant-use-modulus-on-doubles। फ्लोट्स और युगल के लिए एफएमओडी का उपयोग करें। –

+0

जो +360 -360 तर्क के साथ मदद करता है। मैं वास्तव में (minangle> maxangle) से बचने और – eng3

उत्तर

0

कोण सीमा 0-720 में बदलें। हमेशा minAngle < maxAngle रखें।

यदि (न्यूनतम> अधिकतम) अधिकतम + = 360;

minAngle = 50, maxAngle = 200; => ठीक

minAngle = 200, maxAngle = 50; => minAngle = 200, maxAngle = 360 + 50 = 410; => ठीक

हालांकि यह आपकी जटिलता को बढ़ाता है।

+0

से बदलने और तर्क बदलने के लिए कुछ रास्ता तय करने की उम्मीद कर रहा था, मैं कोण रेंज को नहीं बदल सकता, जो इनपुट मैं ढूंढ रहा हूं। और हाँ, यह जटिलता में वृद्धि करता है। शायद एक कम जटिल तरीका नहीं है। – eng3

संबंधित मुद्दे