【发布时间】:2016-02-26 03:34:06
【问题描述】:
当我创建一个带有std::vector 的层时,我会计算我的坐标,其中填充了cube 对象(这是我的一个类):
for(int J = 0; J < mapSize; J++)
{
for(int I = 0; I < mapSize; I++)
{
x = (J - I) * (cubeSize/2);
y = (J + I) * (cubeSize/4);
c = new cube(cubeSize, x, y, z, I, J);
cs.push_back(*c);
}
}
我想这样做:cs[getCubeByID(mouseX, mouseY)].setTexture(...);
使用示例:I-J [0, 0] 中的多维数据集在多维数据集数组中具有 number 0。如果我click on 0,0 我得到了这个号码。
编辑: 我们给了我在 cmets 中得到带有一对 x,y 的 J 或 I 的公式,非常感谢。 我只需要将这对 I-J 转换为我的数组的条目号,就像我给出的示例一样。
我试过了:int entry = (J - 1) * size + (I - 1); 并且所选的立方体离我想要的那个不是很远,但仍然不是正确的公式。模算术可以解决我的问题,但我不明白它是如何工作的。
【问题讨论】:
-
我不确定我是否理解,但如果您想将
x和y对转换回I和J,(2 * x + 4 * y) / (2 * cubeSize) = J。那么计算I也很简单。 -
我有我的光标坐标 (x,y),如果我在地图上单击,我想将它们转换为等距坐标(例如 0、1)。然后,我想将 (I,J) 转换为 std::vector
中我的多维数据集的数字(此处命名为 cs)对不起,英语不好,我很难解释所有这些。我试过你的计算,它不起作用,我没有得到等距坐标。 -
我不使用图块,但立方体的 6 个边使用 4 个顶点。
-
我所做的只是颠倒你一开始的等式。如果这不是您想要的,我不知道该计算什么。
标签: c++ math coordinates isometric