एक अक्षांश / देशांतर से दूसरे कम्पास दिशा निर्धारित करते हैं

वोट
0

किसी को भी एक और (छद्म कोड) के लिए एक अक्षांश / देशांतर से दिशा निर्धारित करने के लिए एक एल्गोरिथ्म है:

CalculateHeading( lat1, lon1, lat2, long2 ) returns string heading

कहाँ शीर्षक है जैसे एनडब्ल्यू, दप, ई, आदि

मूल रूप से, मैं एक नक्शे पर दो अंक है और मैं दिशा ध्यान में रखते हुए एक सामान्य विचार है कि 50 मील की दूरी पूर्व और एक मील उत्तर पूर्व और बस नहीं पूर्वोत्तर है प्राप्त करना चाहते हैं।

09/07/2010 को 05:44
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
2

आप अपने ट्रिग कार्यों याद है? यानी SOHCAHTOA:

  • एसओएच : सिन (θ) = सामने कर्ण के ऊपर
  • CAH : क्योंकि (θ) = कर्ण से अधिक निकटस्थ
  • TOA : (θ) = निकटस्थ से अधिक के सामने टैन

छद्म कोड में:

function getDir(lat1, long1, lat2, long2) {
    margin = π/90; // 2 degree tolerance for cardinal directions
    o = lat1 - lat2;
    a = long1 - long2;
    angle = atan2(o,a);

    if (angle > -margin && angle < margin):
            return "E";
    elseif (angle > π/2 - margin && angle < π/2 + margin):
            return "N";
    elseif (angle > π - margin && angle < -π + margin):
            return "W";
    elseif (angle > -π/2 - margin && angle < -π/2 + margin):
            return "S";
    }
    if (angle > 0 && angle < π/2) {
        return "NE";
    } elseif (angle > π/2 && angle < π) {
        return "NW";
    } elseif (angle > -π/2 && angle < 0) {
        return "SE";
    } else {
        return "SW";
    }
}

संपादित करें 1: के रूप में पीट और डीन ने कहा, इस खाते में पृथ्वी की वक्रता नहीं लेता है। भूमध्य रेखा से दूर अंक के लिए और अधिक सटीक गणना के लिए, आप का उपयोग करना होगा गोलाकार त्रिकोण सूत्रों के रूप में डीन के जवाब में इस्तेमाल किया,।

संपादित करें 2: एक और सुधार; के रूप में पीट बताया गया है, arctan()सही कोण, -1 के रूप में / देना नहीं है -1 और 1/1 ही कर रहे हैं (जैसा कि -1/1 और 1 / -1 हैं)। arctan2(y, x)है की एक दो तर्क भिन्नता arctan()है कि इस के लिए क्षतिपूर्ति करने के लिए डिज़ाइन किया गया है। arctan()की एक सीमा (-π, π], के लिए सकारात्मक है y >= 0और के लिए नकारात्मक y < 0

09/07/2010 को 05:51
का स्रोत उपयोगकर्ता

वोट
0

एक अंकीय कोण में बदलें और पाठ को देखने के लिए परिणाम का उपयोग करें। उदाहरण के लिए, -22.5 .. + 22.5 = एन + 22.5..67.5 = NE, 67.5..112.5 = ई, आदि बेशक, कि आप केवल उ, उपू, ई का उपयोग कर रहे संभालने है, एसई, द, दप , प, उप - अगर आप (उदाहरण के लिए) तय वर्ष, प्रत्येक पाठ स्ट्रिंग स्पष्ट रूप से एक छोटी श्रेणी का प्रतिनिधित्व करता है "32 कम्पास के अंक" के साथ जाने के लिए।

09/07/2010 को 05:51
का स्रोत उपयोगकर्ता

वोट
16

इस साइट में बुनियादी एल्गोरिथ्म है:

// in javascript, not hard to translate...
var y = Math.sin(dLon) * Math.cos(lat2);
var x = Math.cos(lat1)*Math.sin(lat2) -
        Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
var brng = Math.atan2(y, x).toDeg();

अपडेट: algorith पूरा के लिए यहाँ देखें मानचित्रण गणित और जावास्क्रिप्ट

यही कारण है कि आप एक नंबर दे देंगे 0 और 360 के बीच तो यह एक साधारण देखने के लिए केवल बात है:

var bearings = ["NE", "E", "SE", "S", "SW", "W", "NW", "N"];

var index = brng - 22.5;
if (index < 0)
    index += 360;
index = parseInt(index / 45);

return(bearings[index]);

यह ध्यान रखें कि आपके असर वास्तव में के रूप में आप पृथ्वी के चारों ओर ले जाने के लिए बदल जाता है महत्वपूर्ण है। एल्गोरिथ्म ऊपर आप से पता चलता प्रारंभिक असर है, लेकिन आप एक लंबी दूरी यात्रा कर रहे हैं, अपने असर अगर आप केवल यात्रा कर रहे कुछ ही दूरी पर [<कुछ सौ किलोमीटर] तो यह शायद जीता जब आप गंतव्य तक पहुंचने में काफी अलग होने के लिए ( 'टी एक चिंता का विषय हो सकता है करने के लिए पर्याप्त बदल)।

09/07/2010 को 05:56
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more