2016-01-20 5 views
0

Я использую этот код для перевода lonlat на x, y, z, но не могу понять, как сделать обратное.Преобразование lonlat в xyz и наоборот

var phi = (this.lat)*Math.PI/180; 
var theta = (this.lon-180)*Math.PI/180; 

x = -(this.R) * Math.cos(phi) * Math.cos(theta); 
y = -(this.R) * Math.sin(phi); 
z = (this.R) * Math.cos(phi) * Math.sin(theta); 

Теперь преобразование из х, у, г в lonlat

lat = THREE.Math.radToDeg(Math.asin(rotation.y/this.R)); 
lon = THREE.Math.radToDeg(Math.atan2(rotation.z, rotation.x)); 

Но это не работает должным образом, то, что я делаю неправильно?

ответ

0

хорошо, вы Арент преобразование из А в Lon Lat, вы пытаетесь сделать что-то с углами эйлера:

попробовать что-то вроде этого

lon = Math.atan2(x , z); //horizontal angle, just two components 
lon = Math.atan2(Math.sqrt(x*x,z*z) , y); //vertical angle, length of the diagonal between xz components and y component 
+0

я использовал это, чтобы перевести вращение в координатах хуга, а затем использовал мою предыдущую формулу для получения lonlat 'var xyz = new THREE.Vector3 (0,0,0); this.camera.getWorldDirection (xyz); ' Но спасибо за помощь! – Noripsni