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

标签 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) -> [1; 4].

谢谢。

P.S. 请原谅我糟糕的英语。我只是在学习...

最佳答案

您有两个基向量 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)

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

关于algorithm - 如何从鼠标坐标接收细胞的等距索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12035096/

相关文章:

algorithm - 如何理解线性划分中的动态规划解法?

c - 从字符串中删除字符并在删除时动态调整其大小的算法

Javascript:将四舍五入的数字格式化为 N 位小数

c++ - <math.h> 是 C 还是 C++?

html - CSS Transforms 给 div 一个轮廓

python - 将 A* 与目标外部图一起使用

algorithm - 为什么 FFT 产生复数而不是实数?

java - Java 中奇怪的十进制计算,可能是一个错误?

ios - Swift Spritekit 等距 map 触摸位置

python - 使用 matplotlib 的热图等距方向