我有一个玩家和另一个物体的坐标。两者都具有地理坐标(纬度和经度)。我也有玩家面对的方向(指南针)。如何从玩家方向计算与另一个物体的角度?例如我想知道对象是否在播放器的右侧/左侧以及多少度。
非常感谢!
答案 0 :(得分:5)
有一些取决于,答案实质上是,你想知道如何做geographic navigation。 取决于的原因之一是所涉及的距离以及所需的准确度可能会影响答案。
对于短距离(<10km),您可以忽略地球的曲率,并将其视为二维笛卡尔地图(纬度/经度为X-Y)。那么你的问题就变成了基本的三角学。
对于更大的距离或更高的准确度,您可以使用spheroid地球模型进行近似(假设地球是一个完美的球体,它不是)并计算Great Circle bearing
和distance
。
或者您可以将地球建模为ellipsoid,并计算其geographic navigation。
可能有用的两个网页:Details for computing distance using lat/long coordinates和Calculate distance, bearing and more between Latitude/Longitude points。
注意:atan2和Haversine formula通常是有用的实施细节。
小补充说明:bearing
是此上下文中heading
或direction
的同义词。
答案 1 :(得分:2)
你需要这个球形三角公式:http://williams.best.vwh.net/avform.htm#Crs一旦你有了航线(相对于真北的角度),你可以减去玩家所面向方向的罗盘方向,以获得相对航向。
(我不知道Android是否会自动补偿磁性变化,但如果没有,你也必须考虑到这一点,以便在所有区域都能正确对齐)
答案 2 :(得分:0)
API中有一些工具可以为您执行此操作:Location.bearingTo(Location)和GeomagneticSensor将为您提供从您的位置到目标的方向 - 然后您可以根据设备当前标题进行调整。
如果您已经运行了MapView&amp;很懒,设置MyLocationOverlay,启用Compass并跳过GeomagneticSensor,让MapView为你做。