如何绘制围绕中心坐标相对于设备旋转的真实世界坐标?

Posted

技术标签:

【中文标题】如何绘制围绕中心坐标相对于设备旋转的真实世界坐标?【英文标题】:How to draw real world coordinates rotated relative to the device around a center coordinate? 【发布时间】:2013-01-14 22:39:56 【问题描述】:

我正在开发一个简单的位置感知游戏,其中用户的当前位置显示在游戏地图上,以及他周围其他玩家的位置。它不是使用 MKMapView,而是使用没有街道的自定义游戏地图。

如何将其他玩家的其他纬度/经度坐标转换为 CGPoint 值,以在具有固定比例(如 50 米 = 屏幕上 50 个点)的世界比例游戏地图中表示它们,并确定所有点的方向,以便用户可以看到他必须朝哪个方向去接触另一个玩家?

主要目标是为平面自上而下视图生成纬度/经度坐标的 CGPoint 值,但将点定位在用户当前位置周围,类似于 Google 地图的定向地图功能(箭头),以便您知道在哪里是什么。

是否有进行计算的框架?

【问题讨论】:

固定比例:地图可以缩放吗? ios Mkmap 可以并且将一直缩放。所以你的意思是从屏幕点 (x,y) 画一个 x 米的圆? 真正的方向是什么意思?您是否有地图的俯视图(鸟瞰图),例如苹果地图应用程序,或者像第一人称/第三人称(射击)游戏中的透视投影? 就像指南针一样,您可以知道其他玩家在现实世界地图上的位置,并且知道必须朝哪个方向走才能遇到他们。 @AlexWien 更新了我的问题 【参考方案1】:

首先您必须将 lon/lat 转换为以米为单位的笛卡尔 x,y。 接下来是与其他玩家的度数方向。方向是 dy/dx,其中 dy = player2.y 到 me.y,dx 相同。通过除以 playerv2 和我之间的距离,将 dy 和 dx 归一化。 你收到

ny = dy / sqrt(dx*dx + dy*dy)
nx = dx / sqrt(dx*dx + dy*dy)

乘以 50。现在你在 player2 的方向上有一个 50 m 的点:

comp2x = 50 * nx;
comp2y = 50 * ny;

现在将地图以 me.x/me.y 为中心。并将屏幕应用于仪表刻度

【讨论】:

【参考方案2】:

您想要来自 MapKit 的 MKMapPointForCoordinate。这会将经纬度对转换为由 x 和 y 定义的平面。查看描述投影的MKMapPoint 的文档。然后,您可以根据需要将这些 x,y 对缩放和旋转为 CGPoints 以供显示。 (您必须进行试验以了解哪些缩放因子适用于您的游戏。)

要以用户为中心,只需从所有其他对象的点中减去它们的 x 和 y 位置(在 MKMapPoints 中)的值。比如:

MKMapPoint userPoint = MKMapPointForCoordinate(userCoordinate);
MKMapPoint otherObjectPoint = MKMapPointForCoordinate(otherCoordinate);

otherObjectPoint.x -= userPoint.x; // center around your user
otherObjectPoint.y -= userPoint.y;

CGPoint otherObjectCenter = CGPointMake(otherObjectPoint.x * 0.001, otherObjectPoint.y * 0.001);

// Using (50, 50) as an example for where your user view is placed.
userView.center = CGPointMake(50, 50);
otherView.center = CGPointMake(50 + otherObjectCenter.x, 50 + otherObjectCenter.y);

【讨论】:

谢谢!那么 MKMapPointForCoordinate() 的输出是在 iPhone 的屏幕单位空间中,其中 1 个单位代表 1 米? MkMapoint 没有描述单位,至少我没有找到信息。但是有一种方法可以测量两个地图点之间的距离。 不是一点=一米;它没有记录比率是多少;这就是为什么您需要使用比例因子(在我的示例中为 .001)

以上是关于如何绘制围绕中心坐标相对于设备旋转的真实世界坐标?的主要内容,如果未能解决你的问题,请参考以下文章

对象坐标上的旋转和平移

Unity3D视图中心 ( 视图中心概念 | 围绕游戏物体旋转 | 添加游戏物体到游戏场景的位置 )

悟透Qt—求解画布经任意中心点旋转后相对旋转前坐标系的坐标

悟透Qt—求解画布经任意中心点旋转后相对旋转前坐标系的坐标

悟透Qt—求解画布经任意中心点旋转后相对旋转前坐标系的坐标

记录相机成像原理