从不同高度的网格中获取X,Y坐标

时间:2014-04-13 21:33:05

标签: java math coordinates isometric

enter image description here

private static final int gridWidth = 6;
private static final int firstHeight = 64;
private static final int secondHeight = 32;

public static Coords getXY(int cellNumber)
{
    int X = some math magic;
    int y = some math magic;

    int pixelX = some math magic;
    int pixelY = some math magic;

    return new Coords(x, y);
}

我需要一个只从单元格编号返回X,Y坐标的函数。这里的问题是速度优化是非常重要的,所以我不允许使用任何for循环。只有数学方程式。

更糟糕的是,我需要将这些坐标相乘以获得单元格的像素位置,但第二行的高度始终是前一个的一半。例如,上图中的数字“16”应返回X = 4,Y = 3,当转换为像素时,应返回X = 192,Y = 96。

如何在不使用任何循环的情况下实现此目的?谢谢。

2 个答案:

答案 0 :(得分:1)

public static Coords getXY(int cellNumber)
{
    int X = cellNumber % gridWidth;
    int y = cellNumber / gridWidth + 1;

    int pixelX = (y % 2 == 0) ? (x-1)*secondHeight : (x-1)*firstHeight //assuming firstHeight  row is the first column...

    int pixelY = (y % 2 == 0) ? (y/2)*firstHeight  + (y/2 -1)*secondHeight  : (y/2)*firstHeight  + (y/2)*secondHeight ; //assuming firstHeight is the first row...

    return new Coords(x, y);
}

编辑:我知道我错了,我的pixelY是0,0而不是6,6。我相信你可以自己解决这个问题。如果Y = 192,我不确定为什么X = 96 ......不管怎样,这就是方法。

答案 1 :(得分:1)

这样做可以解决问题:(你的例子中Xpixel和Ypixel的方式错误; X = 192,Y = 96)

X = cellNumber % gridWidth;
Y = (cellNumber / gridWidth) + 1;

pixelX = ((cellNumber % gridWidth) - 1) * firstHeight;
pixelY = Math.ceil((cellNumber / gridWidth) * 1.5) * secondHeight;