c++ - 2D isometric engine - 数学题 - 立方体选择 - 菱形图

标签 c++ math coordinates isometric

当我用 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] 中的立方体在立方体数组中有 数字 0。如果我点击 0,0 我得到这个数字。

编辑: 我们在评论中给了我用一对 x,y 得到 J 或 I 的公式,非常感谢。 我只需要像我给的例子那样把这对I-J转换成我数组的条目号。

我试过:int entry = (J - 1) * size + (I - 1); 并且所选立方体与我想要的立方体相距不远,但仍然不是正确的公式。模块化算法可以解决我的问题,但我不明白它是如何工作的。

最佳答案

所以你有

x = (J - I) * (cubeSize/2);
y = (J + I) * (cubeSize/4);

并且您想从中计算 IJ(因此索引是 I + J*mapSize),对吗?它是两个方程的线性系统。

J - I = x * 2 / cubeSize
J + I = y * 4 / cubeSize

I = (y * 2 - x) / cubeSize
J = (y * 2 + x) / cubeSize

关于c++ - 2D isometric engine - 数学题 - 立方体选择 - 菱形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33881027/

相关文章:

Java/Swing : JTable. rowAtPoint 对于表外的点不能正常工作?

c++ - 使用arm-none-linux-gnueabi-g++编译时不执行system()

c++ - 关于在 C++ 中使用 "+"的整数变量和字符串连接的非常基本的问题

c++ - 在 Linsched 中使用 task_struct

java - VC++ 与 Java 的结果不一致

ios - 获取带有经纬度的城市和国家名称(iOS)

c++ - QDeclarativeView 目录中没有这样的文件。在 qtCreator 中运行 QML 和 c++ 应用程序

Java 的根源和力量

python - 将奇数舍入为偶数的最佳方法是什么?

c++ - 如何生成第n个只有偶数位的数?