【发布时间】:2016-09-12 16:38:48
【问题描述】:
我正在使用 Unity3D 制作一个应用程序,它使用 GPS 坐标在 3D 世界中放置一个“东西”,当你在现实世界中靠近它时,你会发现它越来越近。有点像PokemonGO
所以问题是: 我使用函数 dist(lat1,lon1,lat2,lon2) 设法将对象放置在正确的位置和距离上,它给出了两个坐标之间的距离(以米为单位)(见下文)。
接下来我要做的是让场景围绕 Y 轴转向以向北行驶(Z 轴+ 应该指向北方)。我该怎么做?
我做的是这样的:
float xx = dist (0, Tlon, 0, lon), zz = dist (Tlat, 0, lat, 0);
Vector3 position = new Vector3 (xx, 0, zz);
position.Normalize ();
float beta = Mathf.Acos(position.z) * Mathf.Rad2Deg;
position = Quaternion.Euler (0,beta-Input.compass.trueHeading,0)*position;
transform.position = position;
但它做了一些奇怪的事情,“正确”的位置在我的右边和左边(为什么?idk)
{dist函数,用于计算2个坐标之间的距离:}
float dist(float lat1, float lon1, float lat2, float lon2){ // generally used geo measurement function
var R = 6378.137; // Radius of earth in KM
var dLat = (lat2 - lat1) * Mathf.PI / 180;
var dLon = (lon2 - lon1) * Mathf.PI / 180;
var a = Mathf.Sin(dLat/2) * Mathf.Sin(dLat/2) +
Mathf.Cos(lat1 * Mathf.PI / 180) * Mathf.Cos(lat2 * Mathf.PI / 180) *
Mathf.Sin(dLon/2) * Mathf.Sin(dLon/2);
var c = 2 * Mathf.Atan2(Mathf.Sqrt(a), Mathf.Sqrt(1-a));
var d = R * c;
return (float)(d * 1000); // meters
}
【问题讨论】:
标签: unity3d gps compass-geolocation