2015-02-06 3 views
3

i'm играет Arround с three.jsJavascript Широта Долгота в хуг положения на земле (threejs)

я хочу, чтобы сделать объекты по конкретному geocoordinates на большую сфере, i'm довольно близко к решению, но я не получаю правильное положение АБВ от Lat Lon

я создали тестовый случай на jsfiddle, есть две координаты

latlons = [[40.7142700,-74.0059700], [52.5243700,13.4105300]]; 

его Нью-Йорк и Берлин

, и это моя функция известково хуга от Lat Lon и радиуса

function calcPosFromLatLonRad(lat,lon,radius){ 

// Attempt1 
var cosLat = Math.cos(lat * Math.PI/180.0); 
var sinLat = Math.sin(lat * Math.PI/180.0); 
var cosLon = Math.cos(lon * Math.PI/180.0); 
var sinLon = Math.sin(lon * Math.PI/180.0); 
var rad = radius; 
y = rad * cosLat * sinLon; 
x = rad * cosLat * cosLon; 
z = rad * sinLat; 

// Attempt2 
// x = radius * Math.sin(lat) * Math.cos(lon) 
// y = radius * Math.sin(lat) * Math.sin(lon) 
// z = radius * Math.cos(lat) 


// Attempt3 
// latitude = lat * Math.PI/180 
// longitude = lon * Math.PI/180 
// x = -radius * Math.cos(latitude) * Math.cos(longitude) 
// y = radius * Math.sin(latitude) 
// z = radius * Math.cos(latitude) * Math.sin(longitude) 


// Attempt4 
// var phi = (90-lat)*(Math.PI/180); 
// var theta = (lng+180)*(Math.PI/180); 
// x = ((rad) * Math.sin(phi)*Math.cos(theta)); 
// z = ((rad) * Math.sin(phi)*Math.sin(theta)); 
// y = ((rad) * Math.cos(phi)); 



    console.log([x,y,z]); 
    return [x,y,z]; 
} 

но все попытки вернуть другой х, и все они не правильно (г всегда правильно).

Может ли кто-нибудь мольбы направлять меня на правильный путь? я понятия не имею, что может быть неправильно

Хереса скрипки играть с

UPDATE: working jsfiddle

+0

¯hmn Почему я единственный парень, глядя на это? –

+0

вы впереди своего времени :) – coblr

ответ

8

несчастливо я не могу объяснить далее, но после игры вокруг этого один работает как шарм :)

function calcPosFromLatLonRad(lat,lon,radius){ 

    var phi = (90-lat)*(Math.PI/180) 
    var theta = (lon+180)*(Math.PI/180) 

    x = -((radius) * Math.sin(phi)*Math.cos(theta)) 
    z = ((radius) * Math.sin(phi)*Math.sin(theta)) 
    y = ((radius) * Math.cos(phi)) 

    return [x,y,z] 

} 

Да, это довольно круто, не так ли? И i'm все еще заинтересованы в более короткие уравнения

working fiddle

+0

У вас все еще есть рабочая версия этого? Проверял скрипку, но похоже, что three.js не загружен. Я хочу сделать то же самое. – Brian

+0

проверить ссылку, которую я добавил к этому ответу, она работает здесь! –

+0

Формула без радиуса пожалуйста? Спасибо. – hamzox

Смежные вопросы