इस सप्ताहांत में मैं एक एल्गोरिदम को एक साथ जोड़कर कुछ मिनट बिताता हूं जो एक शीर्षक (डिग्री में) लेता है और कार्डिनल दिशा के लिए एक स्ट्रिंग लौटाता है (मैं इसे एंड्रॉइड कंपास एप्लिकेशन I में उपयोग कर रहा हूं। एम का उपयोग कर)। क्या मैं के साथ समाप्त हो गया यह था:जावा में कार्डिनल दिशा एल्गोरिदम
private String headingToString(Float heading)
{
String strHeading = "?";
Hashtable<String, Float> cardinal = new Hashtable<String, Float>();
cardinal.put("North_1", new Float(0));
cardinal.put("Northeast", new Float(45));
cardinal.put("East", new Float(90));
cardinal.put("Southeast", new Float(135));
cardinal.put("South", new Float(180));
cardinal.put("Southwest", new Float(225));
cardinal.put("West", new Float(270));
cardinal.put("Northwest", new Float(315));
cardinal.put("North_2", new Float(360));
for (String key: cardinal.keySet())
{
Float value = cardinal.get(key);
if (Math.abs(heading - value) < 30)
{
strHeading = key;
if (key.contains("North_"))
{
strHeading = "North";
}
break;
}
}
return strHeading;
}
मेरा प्रश्न है, इस ऐसा करने का सबसे अच्छा तरीका है? यह कई बार पहले किया जाना चाहिए हालांकि मैंने अभी तक वेब पर उदाहरणों की खोज नहीं की है। क्या किसी अन्य लोगों ने यह कोशिश की है और एक स्वच्छ समाधान मिला है? Reverand के थिलो की, SHINJIN की और Chrstoffer की प्रतिक्रियाओं के लिए
संपादित करें:
समाधान
public static String headingToString2(double x)
{
String directions[] = {"N", "NE", "E", "SE", "S", "SW", "W", "NW", "N"};
return directions[ (int)Math.round(( ((double)x % 360)/45)) ];
}
+1:
यहाँ एक समाधान 22.5 डिग्री अंतराल, आप हवा दिशाओं के लिए देख सकते हैं इस तरह के रूप का उपयोग करता है है। बहुत अच्छा। इसे एक कदम आगे लेते हुए, फ़ंक्शन में एक और छोटा रूपांतरण जोड़ें और वह केवल स्ट्रिंग्स की सरणी में एक अनुक्रमणिका प्राप्त कर सकता है: 'स्ट्रिंग [] दिशानिर्देश = {"एन", "एनई", "ई" ...} ' – Thilo
यदि आप गुणा को 45 से छोड़ देते हैं, तो आप हैश मैप के बजाय एक साधारण सरणी का उपयोग कर सकते हैं। – shinjin
आपको उस सरणी में एक अतिरिक्त "एन" की आवश्यकता है। शीर्षलेख 337.5 और ऊपर 8 तक होगा। –