2010-12-27 8 views
8

यह उदाहरण और जावा स्क्रिप्ट कोड link text
से जुड़ा हुआ अनुभाग पर अनुभाग को देखें।रैंब लाइन गणना - जावास्क्रिप्ट को php


एक प्रारंभ बिंदु को देखते हुए और एक दूरी लगातार असर θ साथ घ, इस गंतव्य बिंदु की गणना करेगा। यदि आप एक अंगूठी रेखा के साथ लगातार असर बनाए रखते हैं, तो आप धीरे-धीरे ध्रुवों में से एक की तरफ सर्पिल हो जाएंगे।

फॉर्मूला:

α = d/R (angular distance) 
    lat2 = lat1 + α.cos(θ) 
    Δφ = ln(tan(lat2/2+π/4)/tan(lat1/2+π/4)) [= the ‘stretched’ latitude difference] 
if E:W line q = cos(lat1)  
otherwise q = Δlat/Δφ 
    Δlon = α.sin(θ)/q 
    lon2 = (lon1+Δlon+π) % 2.π − π 
    where ln is natural log and % is modulo, Δlon is taking shortest route (<180°), and R is the earth’s radius 

जावास्क्रिप्ट:

lat2 = lat1 + d*Math.cos(brng); 
var dPhi = Math.log(Math.tan(lat2/2+Math.PI/4)/Math.tan(lat1/2+Math.PI/4)); 
var q = (!isNaN(dLat/dPhi)) ? dLat/dPhi : Math.cos(lat1); // E-W line gives dPhi=0 
var dLon = d*Math.sin(brng)/q; 
// check for some daft bugger going past the pole, normalise latitude if so 
if (Math.abs(lat2) > Math.PI/2) lat2 = lat2>0 ? Math.PI-lat2 : -(Math.PI-lat2); 
lon2 = (lon1+dLon+Math.PI)%(2*Math.PI) - Math.PI; 

मैं इसे php वाक्य रचना में परिवर्तित करने के कोशिश कर रहा हूँ, लेकिन मैं वांछित परिणाम नहीं मिल रहा है। मेरे अक्षांश भाग ठीक काम कर रहा है। मैंने अपना टेस्ट डेटा भी शामिल किया।


मेरी PHP कोड

// test data 
$R = 6371; 
$tlatitude = 50.7; 
$tlongitude = -105.214; 
$theading = 124; 
$d = 50; 

$projlat = $tlatitude + rad2deg(($d/$R)*COS(deg2rad($theading))); 

//Δφ = ln(tan(lat2/2+π/4)/tan(lat1/2+π/4)) 
$delta_phi = log(tan(deg2rad($projlat/2) + pi()/4)/(tan(deg2rad($tlatitude/2) + pi()/4))); 

//q = Δlat/Δφ 
$delta_lat = deg2rad($projlat - $tlatitude); 

$q = $delta_lat/$delta_phi; 


//Δlon = α.sin(θ)/q 
$delta_long = rad2deg($d/$R*sin(deg2rad($theading))/$q); 

$projlong = $tlongitude + $delta_long; 

मैं संदर्भित पृष्ठ जवाब -104.63 होना चाहिए के अनुसार $projlong = -104.84

मिलता है।

अब मैं इसे पूर्व-पश्चिम और ध्रुव संभावनाओं पर ध्यान देने के लिए काम करने की कोशिश कर रहा हूं।

+1

अपने सटीक PHP कोड में चिपकाना और एक पंक्ति 'इको राउंड ($ projlong, 2) जोड़ना; 'मुझे आउटपुट' -104.63' देता है। क्या आपको निश्चित रूप से '-104.84' का आउटपुट मिलता है? – thirtydot

+0

हाँ जो मैं प्राप्त कर रहा था .... हालांकि मैंने आपके नेतृत्व का पालन किया और "मेरा अपना" कोड एक नए नंगे एचटीएमएल/PHP पेज में चिपकाया और सही जवाब मिला .... मेरे मूल पृष्ठ को देखकर मैंने पाया कि मेरे पास था पीआई() के बजाय इस्तेमाल किया गया पीआई और यह परिणाम को प्रभावित करता है .... मुझे लगता है कि मैं अपनी पूंछ का पीछा कर रहा था। – brian

+7

यदि आपको त्रुटि मिली है, तो इसे एक उत्तर के रूप में लिखें और इसे स्वीकार के रूप में सेट करें ताकि प्रश्न खुला न रहे। –

उत्तर

0

जावास्क्रिप्ट इस मजाक http://ru2.php.net/manual/en/function.doubleval.php

मैं एक बार Luhn एल्गोरिथ्म के साथ कुछ IBAN जाँच करने की जरूरत पर नज़र php की तुलना में अधिक सटीक है। मेरा जावास्क्रिप्ट कोड अच्छी तरह से काम किया। लेकिन मेरा PHP विफल रहा, इसलिए कुछ शोध के बाद, मुझे मजाक मिला और स्ट्रिंग और नंबर पर आधारित मूल संचालन (एड, सब, गणना, विभाजन, मॉड्यूलो) को रिकोड करना पड़ा।

शायद आपको इसकी अपेक्षा की सटीकता प्राप्त करने के लिए भी इसे फिर से रिकोड करना चाहिए। हमें उच्च परिशुद्धता गणना के लिए PHP का उपयोग नहीं करना चाहिए।

1

मुझे दूरी की गणना करते समय कुछ समस्याएं थीं, जहां मेरी त्रुटियां थोड़ी देर बाद थोड़ी देर तक बढ़ेगी। मैंने पाया कि अगर मैंने अपने कोड में (डबल) डाली है तो परिशुद्धता बढ़ी है। मैंने यह देखने के लिए PHP में सी-कोड में नहीं देखा है कि यह क्या हुआ। कोड के मेरे बीसी संस्करण के इस स्क्रैप के बाद मैं कर सकता था।

यदि आपको अतिरिक्त परिशुद्धता की आवश्यकता है तो कृपया PHP में बीसी-फ़ंक्शंस देखें। http://php.net/manual/en/book.bc.php

साथ ही, कृपया याद रखें कि आपके द्वारा कंप्यूटर में गणना करने का आदेश आपके परिशुद्धता को प्रभावित करेगा।यही कारण है, गणना bellow

$d/$R*sin(deg2rad($theading))/$q 

रूप

$d*sin(deg2rad($theading))/$q/$R 

ही परिणाम से नहीं चल पाएगी और यह भी एक तिहाई परिणाम

$d*sin(deg2rad($theading))/($q*$R) 

इस सीमित परिशुद्धता के साथ क्या करना है दे सकते हैं कंप्यूटर में शून्य (0) के करीब संख्याओं के लिए।

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