【问题标题】:Java: Transform coordinates from one system into another when 2 coordinate pairs are knownJava:当已知两个坐标对时,将坐标从一个系统转换为另一个系统
【发布时间】:2016-07-30 16:54:30
【问题描述】:

我目前正在为 android 制作一个应用程序,用户可以在其中触摸地图上的特定位置并获取有关该位置的信息。该地图是视频游戏地图的自上而下视图,但这并不重要。基本上,我知道左上角和右下角的视频游戏坐标,我需要知道用户触摸的地方的视频游戏坐标。

例如,如果用户触摸显示地图上的点 (500,500),我想要该位置的视频游戏地图坐标。

这里的问题是,我用于地图的 API 给出了坐标系中的触摸坐标,从左上角 (0,0) 开始,数字递增到右下角。视频游戏使用更正常的坐标系,顶部 (y) 和右侧 (x) 的数字增加,底部 (y) 和左侧 (x) 的数字减少。

您知道如何将地图 API 中的坐标转换为视频游戏坐标吗?

【问题讨论】:

  • 虽然这个问题与代码相关(即使您没有显示代码),但您可能会在 Mathematica 上得到更清晰的答案。

标签: java android math


【解决方案1】:

让我们处理您的示例:

我假设您在解释中使用了符号 (y,x),我将在此答案中使用相同的符号。(我相信您应该使用 (x,y))

左上角的 VGC(视频游戏坐标)是 (2403,1212),右下角的 VGC 是 (-13,3084)。因此,在当前情况下,VGC 中有 2403-(-13)=2416 个可能的 y 坐标和 3084-1212 = 1872 个可能的 x 坐标。

对于 Android 坐标系,有 1000 个可能的 x 坐标和 1000 个可能的 y 坐标。

如果我们尝试映射这些:2416/1000=2.416 和 1872/1000=1.872。所以如果Android y坐标改变1,VGC y坐标就会改变2.416。

假设用户在 android 坐标中触摸 (100,150)。这意味着距离左上角 100 y 和 150 倍。然后将它们转换为 VGC 更改,(100*2.416,150*1.872) 大致等于 (241,281)。

现在,如果左上角坐标是 (2403,1212),那么 VGC 坐标中的触地得分将是 (2403-241,1212+281)。

在代码中制作左上角和右下角的VGC变量,并用相同的逻辑进行计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2013-03-25
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多