如何从鼠标坐标接收细胞的等距索引?

时间:2012-08-20 09:21:48

标签: algorithm math isometric

我用瓷砖 64x32

绘制等距地图
const Offset = 160;
int X, Y;

for (int a=0; a < 6; a++)
 for (int b=0; b < 6; b++) {
X = a * 32 - b * 32 + Offset;
Y = a * 16 + b * 16;
DrawTile(X, Y, tile);
 }

图片,说明了此代码: http://i.imgur.com/tgCxF.png

亲爱的专业人士,请帮助我们在细胞的等距索引中转换鼠标坐标的公式。示例:(105; 100) - &gt; [1; 4]。

感谢。

P.S。 请原谅我的英语不好。我刚刚学习......

1 个答案:

答案 0 :(得分:3)

你有两个基矢量p =(32,16)和q =( - 32,16)。任何向量r是p和q的线性组合:

r = a * p + b * q
components:
rx = a * 32 - b * 32 = (a - b) * 32
ry = a * 16 + b * 16 = (a + b) * 16
so your indexes are:
a = (2 * ry  + rx) div 64
b = (2 * ry  - rx) div 64
(div is integer division)

<强>加了: 请注意,我使用中间顶点作为坐标零,并考虑了您的偏移量