2011-03-05 12 views
9

के बारे में प्रश्न मुझे अपने जावा कोड में हार्वेस दूरी को लागू करने की आवश्यकता है।जावा: रेडियंस, Math.cos, Math.sin, डबल और लंबे

मुझे जावास्क्रिप्ट में यह स्निपेट मिला, और मुझे इसे जावा में परिवर्तित करने की आवश्यकता है।

  1. मैं जावा में रेडियंस के अक्षांश और देशांतर को कैसे परिवर्तित कर सकता हूं?
  2. Math.sin जावा में एक डबल चाहता है। क्या मुझे पहले से परिवर्तित मूल्य को रेडियंस में पास करना चाहिए या नहीं?
  3. Math.sin और Math.cos लंबे समय तक लौटते हैं। क्या मुझे एक लंबे समय तक घोषित करना चाहिए और इसे Math.sqrt पर पास करना चाहिए या इसे डबल में परिवर्तित करना चाहिए?

धन्यवाद

dLat = (lat2-lat1).toRad(); 
dLon = (lng2-lng1).toRad(); 
a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
    Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
    Math.sin(dLon/2) * Math.sin(dLon/2); 
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
d = R * c; 
return d; 

उत्तर

5
  1. आप डिग्री में मूल्य है, तो सिर्फ degrees * Math.PI/180 है। या टिप्पणी में कोबर्ड द्वारा सुझाए गए बेहतर उपयोग फ़ंक्शन (इसके बारे में पता नहीं था)।
  2. हां, आप इसमें कोई डबल वैल्यू पास कर सकते हैं। (उस मामले के लिए, कोई भी संख्या।)
  3. नहीं, दोनों कार्य double पैरामीटर लेते हैं। the docs देखें।
+5

के लिए (1), 'Math.toRadians (डिग्री) का उपयोग करते हुए' पढ़ने के लिए आसान होगा। – coobird

+0

@coobird धन्यवाद, अपडेट किया गया। –

7

सबसे पहले, आपको जावाडोक पढ़ना चाहिए। sin(double) पैरामीटर में double लेता है जो प्रलेखन में कहा गया रेडियंस में कोण है। आपको लिंक किए गए पृष्ठ पर भी मिल जाएगा जो sqrt डबल भी लेता है।

फिर, आपको पता होना चाहिए कि जावा स्वचालित रूप से विनाशकारी रूपांतरण कर सकता है। तो यदि कोई विधि एक डबल लेती है और आपके पास लंबा समय होता है, तो यह कोई समस्या नहीं होगी, क्योंकि रूपांतरण में कोई नुकसान नहीं होता है -> डबल। रिवर्स झूठा है, इसलिए जावा ने संकलन को मना कर दिया।

रेडियंस रूपांतरण के लिए, आपको गणित वर्ग में toRadians विधि मिल जाएगी।

+2

रूपांतरण में एक नुकसान हो सकता है-> डबल। उदाहरण के लिए, यदि लंबा मान 2^53 (या नीचे -2^53) से ऊपर एक विषम संख्या है, तो इसे दोहरे मान के रूप में बिल्कुल प्रदर्शित नहीं किया जा सकता है। किसी कारण से, जेएलएस इन रूपांतरण घाटे को अनदेखा करने का विकल्प चुनता है, हालांकि, इस रूपांतरण को एक व्यापक रूपांतरण के रूप में मानता है। (Int-> float और long-> float के लिए एक ही समस्या - यहां सीमा 2^24 है।) –

+0

टिप्पणी के लिए धन्यवाद, मुझे इसके बारे में पता नहीं था। – krtek

+0

पैट्रिक कुछ भी के लिए प्रलेखन कभी नहीं पढ़ता है, इसके बजाय वह यहां SO पर पूछता है। –

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