次の情報があります。
Origin(0,0,0)とradius Rの球体が存在します。光線と球体の交差を行った後、球体上の3D空間のポイント(XYZ)がわかります(線が貫通する3D空間の正確な位置)球体)。
私のプログラムでは、球体上のXYZポイントの緯度と経度を計算したいと思いますが、これを簡単に行う方法(またはGoogle)を考えることはできません。
要するに、私が書き込もうとしている関数は次のとおりです。
public static LatLon FromVector3(Vector3 position, float sphereRadius)
{
return Latitude and Longitude
}
誰もこれを行う方法を知っていますか?参考として、このWiki SVGファイルが役立つ場合があります。
更新:
すべての有用な答えをありがとう、最終的に私はこのコードで行った:
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);
}
今、私はどの答えが私を最も受け入れるのに役立ったかを考えなければなりません:P。
X、y、z(3d座標系)から球面極座標を見つけるのは難しくないはずです。
r
は、表面上にある場合は常に一定です。
(90-θ)緯度(負の場合は最下部にあります)として上から測定されます。
φは経度です。 (ただし、経度システムについてはよくわかりません)
wikipedia からこの図も確認してください。
_lat=atan2(z,sqrt(x*x+y*y))
lng=atan2(y,x)
_
atan2()
で数式を使用する方が便利です。 pi/2を加算/減算したり、異なる象限やゼロ除算の符号の問題を気にする必要はありません。
lat
は北半球では> 0になりますlat
は南半球では<0lng
は、東半球では> 0になりますlng
は、西半球では<0
これは、Javascript/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;
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
あなたは少し兆候をいじる必要があるかもしれません
これは封筒の裏作業ですが、次のとおりです。
Lat = arctan(z/(sqrt(x^2+y^2)))
Long = arccos(sqrt(x^2+y^2)/x)
Lat/lngを使用して球体にオブジェクトを配置するための簡単なソリューションを取得した後、three.jsを使用してそれを実行できる単純なクラスを思い付きました。
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);
}
編集-私の答えを再読してもらえるとは限りませんが、参考のために残しておきます。
結果をどのような目的に使用するかがどれだけ正確かによって異なります。単一の緯度と経度のシステムはありません。たとえば、WGS84(USA GPS)またはETRS89(ヨーロッパGPS)はわずかに異なり、大西洋が広がるにつれて分岐しています。
最後に、これはあなたの質問に直接対処する必要があります。
または
http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/convertingcoordinates3D.pdf