2011-04-21 78 views
2

假设我有一个5x5的网格,网格中的每个单元格都从0到24编号,从左到右。给定一个像17这样的单元格编号,我如何确定单元格的x和y坐标?我已经能够做到这一点,反之亦然,其中如果有坐标我可以计算出细胞数量:将网格中按顺序指定的数字转换为x-y坐标

Cellnumber = x + y∗width
(x和y坐标表示每个单元的左上点)

但现在我想要相反。有任何想法吗?

+3

0-24 ...不是0..25 – 2011-04-21 23:24:45

+0

烨固定:) ... – Snowman 2011-04-21 23:28:12

回答

10

假设为基础的0坐标和类似C的语法,它会是这样的:

int y = Cellnumber/width; 
int x = Cellnumber % width; 
+0

+1。好看又简洁。 – 2011-04-21 23:34:15

6

随着表示法%是模运算符:

x = Cellnumber % width 
y = Floor(Cellnumber/width) 
在你的5×5示例

所以,Cellnumber = 17

x = 2 
    y = 3 
+0

我喜欢它,但如果其中一人需要地板,他们都做,或者:-)同样没有 – corsiKa 2011-04-21 23:27:33

+0

@ glowcoder:模运算符通常是一个整数运算符...但我明白你的观点。 – 2011-04-21 23:28:57

1

我认为:

Y = (cellnum/5) + 1 
X = (cellnum % 5) + 1 
+0

这不行。 +1会给出错误的结果。 – Genzume 2011-04-21 23:30:29

+0

取决于您居中坐标系的位置。我以(1,1) – GPSmaster 2011-04-21 23:32:11

+0

为中心的单元格0当我发布时,其他两个人已经回应。抱歉 – GPSmaster 2011-04-21 23:33:29