2011-04-15 19 views
29

मैं निम्नलिखित जानकारी मिल गया है:3 डी एक क्षेत्र पर निर्देशांक अक्षांश और देशांतर

मूल (0,0,0) और त्रिज्या आर साथ एक क्षेत्र मौजूद है एक किरण-क्षेत्र चौराहे मैं करने के बाद 3 डी स्पेस में एक बिंदु (एक्सवाईजेड) को जानें जो गोलाकार पर है (3 डी स्पेस में सटीक स्थिति जहां रेखा गोलाकार छेद को छिड़कती है)।

मेरे कार्यक्रम के लिए मैं क्षेत्र पर XYZ बिंदु के अक्षांश और देशांतर की गणना करना चाहता हूं, लेकिन मैं इसे (या Google) आसानी से ऐसा करने का तरीका नहीं सोच सकता।

तो संक्षेप में, समारोह है कि मैं लिखने के लिए कोशिश कर रहा हूँ यह है:

public static LatLon FromVector3(Vector3 position, float sphereRadius) 
{ 
    return Latitude and Longitude 
} 

किसी को भी ऐसा करने के तरीके पता है? एक संदर्भ के रूप में इस विकी एसवीजी फ़ाइल उपयोगी हो सकता है:

Geographic coordinates इसके अलावा, मैं इस वापस अक्षांश और XYZ के लिए देशांतर से कन्वर्ट करने के लिए मिल गया है, वह भी उपयोगी हो सकता है: http://swardsonstudios.com/?p=65

अद्यतन:

के लिए धन्यवाद बिल्कुल उपयोगी जवाब है, तो अंत में मैं इस कोड के साथ चला गया: पी:

public static LatLon FromVector3(Vector3 position, float sphereRadius) 
    { 
     float lat = (float)Math.Acos(position.Y/sphereRadius); //theta 
     float lon = (float)Math.Atan(position.X/position.Z); //phi 
     return new LatLon(lat, lon); 
    } 

अब मैं जिनमें से जवाब मुझे सबसे ज्यादा स्वीकार करने के लिए मदद की सोचने के लिए मिल गया है।

+0

क्या निर्देशांक आप उपयोग कर रहे ?? एक्स, वाई, जे –

+0

की तुलना में गोलाकार ध्रुवीय निर्देशांक का उपयोग करें, मैंने जो एक्सवाईजेड निर्देशांक का उल्लेख किया है, वे सिर्फ सादा 3 डी निर्देशांक हैं और गोलाकार निर्देशांक से कोई संबंध नहीं है: http://ecommprojects.com/seo/Ahmed-Zewails-4d-Telescope/xyz -coordinates.png –

+1

मैंने पाया कि स्किनकिट का उपयोग करके सही हस्ताक्षर करने के लिए अक्षांश/लंबा होने के लिए, मुझे इसकी आवश्यकता है: फ्लोट अक्षांश = - ((फ्लोट) acosf (result.localCoordinates.y/sphereRadius) - M_PI_2); // theta फ्लोट रेखांश = एमएफआई - ((फ्लोट) atan2f (result.localCoordinates.z, result.localCoordinates.x)); // // फाई यदि (रेखांश> एमएफआई) { देशांतर = देशांतर - (2।0 * एमएफआई); } – PKCLsoft

उत्तर

25

मुझे लगता है कि एक्स, वाई, जेड (3 डी-समन्वय प्रणाली) से गोलाकार ध्रुवीय निर्देशांक ढूंढना मुश्किल नहीं होना चाहिए।

  1. r सतह पर होने पर हमेशा स्थिर रहता है।

    enter image description here

  2. (90 - θ) अपने अक्षांश (नकारात्मक अर्थ है कि यह तल पर है) के रूप में यह शीर्ष से मापा जाता है।

    enter image description here

  3. φ अपने देशांतर है। (लेकिन काफी देशांतर प्रणाली बारे में निश्चित नहीं)

    enter image description here

इसके अलावा wikipedia से इस चित्र की जाँच करें।

enter image description here

+0

वाह, अच्छी तरह से लेआउट किए गए उत्तर के लिए धन्यवाद, मैं अभी इसका परीक्षण करूंगा। और अगर सब कुछ काम करता है तो मैं इसे थोड़ा सा स्वीकार करूंगा :)। –

+1

मुझे इन सूत्रों के साथ बहुत अजीब परिणाम मिल रहे हैं, इसलिए मुझे डर है कि यह समाधान प्रतीत नहीं होता है। –

+1

एनवीएम, आप सही हैं। मैंने आपकी तस्वीर को नहीं देखा, आप ज़ेड = अप का उपयोग करते हैं, मैंने वाई = अप का उपयोग किया। इसके अलावा आपने लेट और लॉन को बदल दिया। –

0
r=sqrt(x^2+y^2+z^2) 
phi = arccos(sqrt(x^2+y^2)/r)*sign(y) 
lambda = arccos(x/sqrt(x^2+y^2)) 
latitude = 180/pi * phi 
longitude = 180/pi * lambda 

आप संकेत एक छोटे से

0

साथ टिंकर करना पड़ सकता है यह वापस के- लिफाफा काम लेकिन है:

Lat = arctan(z/(sqrt(x^2+y^2))) 

Long = arccos(sqrt(x^2+y^2)/x) 
0

संपादित करें - आप सवाल पुन: पढ़ने होने मेरी उत्तर जरूरी नहीं है, लेकिन मैं इसे संदर्भ के लिए छोड़ दूंगा।

यह इस बात पर निर्भर करता है कि आप किस उद्देश्य के लिए परिणाम का उपयोग करने जा रहे हैं। कोई एकल अक्षांश और अक्षांश प्रणाली नहीं है, उदाहरण के लिए डब्लूजीएस 84 (यूएसए जीपीएस) या ईटीआरएस 89 (यूरोपीय जीपीएस) थोड़ा अलग है और अटलांटिक महासागर के रूप में विचलित हो रहा है।

http://www.ordnancesurvey.co.uk/oswebsite/gps/information/coordinatesystemsinfo/guidecontents/guide5.html

http://www.ordnancesurvey.co.uk/oswebsite/gps/information/coordinatesystemsinfo/guidecontents/guide6.html

अंत में इससे आपके प्रश्न का सीधे चर्चा करनी चाहिए।

http://www.ordnancesurvey.co.uk/oswebsite/gps/information/coordinatesystemsinfo/guidecontents/guideb.html

या

http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/convertingcoordinates3D.pdf

+0

मैं इसे एक पूर्ण क्षेत्र (एक गेम में) के लिए एक गोलाकार निर्देशांक का उपयोग कर रहा हूं इसलिए मुझे असली दुनिया की जटिलताओं का उपयोग करने की आवश्यकता नहीं है :) –

+0

मुझे एहसास हुआ कि पोस्ट करने के बाद, मुझे वास्तव में प्रश्न को ठीक से सुनना चाहिए। मैंने अतीत में इसका थोड़ा सा काम किया है, इसलिए मैं लेट/लम्बाई देखता हूं और पेंटिफिशिंग शुरू करता हूं। – Jaydee

9
lat=atan2(z,sqrt(x*x+y*y)) 
lng=atan2(y,x) 

atan2() साथ का उपयोग करते हुए सूत्रों अधिक सुविधाजनक है। आपको पीआई/2 को जोड़ने/घटाने या शून्य से अलग क्वाड्रंट्स या डिवीजन में साइन इन मुद्दों की देखभाल करने की आवश्यकता नहीं है।

lat होगा> 0 उत्तरी गोलार्द्ध में
lat पूर्वी गोलार्द्ध में दक्षिणी गोलार्द्ध में < 0 हो जाएगा
lng होगा> 0
lng पश्चिमी गोलार्द्ध में < 0 हो जाएगा

+0

आपका अक्षांश काम करता प्रतीत होता है, लेकिन आपकी रेखांश बहुत ही अनियमित है –

+0

@ रॉय टी .: शायद परिभाषा पर निर्भर करता है कि दो अक्षों में से एक x- और -y है। इसे x- और y-axis के साथ आज़माएं (आपने समन्वय प्रणाली को बिल्कुल निर्दिष्ट नहीं किया है)। – Curd

6

इससे जावास्क्रिप्ट/THREE.js का उपयोग करने में मदद मिली:

var lat = 90 - (Math.acos(y/RADIUS_SPHERE)) * 180/Math.PI; 
var lon = ((270 + (Math.atan2(x , z)) * 180/Math.PI) % 360) -180; 
+0

क्या आप इस के विपरीत पता लगाने में मेरी सहायता करने के इच्छुक होंगे। मेरे पास लेट, लॉन और त्रिज्या है, और मैं तीन। वेक्टर 3 के '{x, y, z}' को समझने की कोशिश कर रहा हूं। – Cmndo

+0

इस उत्तर को जांचें: http://stackoverflow.com/a/28367325/174027 – jujule

+1

मेरे मामले में मुझे निम्नलिखित में लोन की गणना बदलनी पड़ी: var lon = ((270 + (Math.atan2 (x, z)) * 180/गणित। पीआई)% 360) -360; – ppareja

0

लेट/एलएनजी का उपयोग करके गोलाकारों पर वस्तुओं को रखने के लिए एक सीधा समाधान प्राप्त करने के बाद, मैं एक साधारण वर्ग के साथ आया था ताकि आप इसे तीन.जेएस का उपयोग कर सकें।

var earth = new THREE.GeoSpatialMap(geometry, material); 
earth.setTexturesEdgeLongitude(-180.806168); 

for (i = 0; i < continentData.length; i += step) { 

    var lat = continentData[i]; 
    var lng = continentData[i + 1]; 

    var light = new THREE.PointLight(0x0099ff); 
    var plant = new org.good.ecology.Plant(); 
    plant.scale.x = plant.scale.y = plant.scale.z = Math.random() * 3; 

    console.log("Adding symbol at: " + lat + " : " + lng); 
    earth.addGeoSymbol(
     new THREE.GeoSpatialMap.GeoSymbol(plant, { 
      phi: lat, 
      lambda: lng 
     }) 
    ); 


    plant.lookAt(earth.position); 

} 

https://github.com/scottbyrns/Three.js-Geospatial-Mapping

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