首页 > 解决方案 > 从象限计算坐标

问题描述

我知道这是非常简单的数学,但数学从来都不是我的强项,所以我很感激一些帮助。

我有 4 个 128x128 像素的象限。布局如下:

-- +-
-+ ++

象限的中间是 0,0。所以左上角是-128,-128,右下角是128,128。

我需要将这 4 个象限上的坐标转换为其中 1 个象限或 128x128 网格中的坐标。因此,例如,如果我在象限(左上角)上有 (-128,-128),它将转换为 (0,0)。(128,128) 将保持不变,(0,0) 将转换为 (64,64),等等。

我尝试了各种方法,例如测试它们所在的象限,然后进行一些乘法运算,这很有希望,但我似乎无法完善它。

这实际上不是一个特定于语言的问题,但如果它很重要,我正在使用 Java。

这是我已经尝试过的一个最小(和坏)的例子。我知道这是在 javascript 中,为了简单起见,我在浏览器控制台中对其进行了测试。

function transformX(x, y) {
    var i = 0;
    if (x > 0 && y > 0) { // Bottom Right
        i = 128*2;
    } else if (x < 0 && y > 0) { // Bottom Left
        i = 128*1;
    } else if (x < 0 && y < 0) { // Top Left
        i = 128*1;
    } else if (x > 0 && y < 0) { // Top Right
        i = 128*2;
    }
    return (i+x) / 512 * 128;
}

这适用于某些事情,但很快就会失败。例如 transformX(-128, -128) 按预期返回 0,但 transformX(-1, -1) 返回 31.75,而它应该是 63。

标签: javamath

解决方案


似乎您需要将两个坐标的范围从 -128...128 转换为 0..128:

newx = (oldx + 128) / 2

类似的y


推荐阅读