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。
如何在不使用任何循环的情况下实现此目的?谢谢。
答案 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;