如何将索引转换为N坐标?

时间:2016-11-10 18:13:01

标签: arrays indexing coordinates data-conversion

在一维空间中:

x = i

在二维空间(大小为sx,sy)中:

x = i / sx
y = i % sx

在3维空间(大小为sx,sy,sz):

x = i / (sy*sz)
y = (i/sz) % sy
z = i % sz

如何处理N维空间?如何推广这些公式?

逆转换怎么样?

(x1, x2, ..., xn) --> i

注意:所有变量都是整数。

1 个答案:

答案 0 :(得分:1)

我猜常见的公式如下: enter image description here

要检查这些公式,我使用了这个程序,看起来很有效。

#include <iostream>
#include <string>
#include <string.h>


#define Sz1 2
#define Sz2 3
#define Sz3 4
#define Sz4 5


using namespace std;

int main()
{
    int a[Sz4][Sz3][Sz2][Sz1];
    int i,j,k,l,n,x1,x2,x3,x4,s1,s2,s3,s4;
    s1=Sz1;s2=Sz2;s3=Sz3,s4=Sz4;

    memset(a,0,sizeof(a));

    for (i=0;i<s1*s2*s3*s4;i++){
        x4= i/(s1*s2*s3);
        x3 = i / (s1*s2) % s3;
        x2 = (i/s1) % s2;
        x1 = i % s1;

        a[x4][x3][x2][x1]=i;
    }

    for (l=0;l<Sz4;l++) {
        for (i=0;i<Sz3;i++) {
            for(j=0;j<Sz2;j++) {
                for(k=0;k<Sz1;k++) {
                    n=s1*s2*s3*l+s1*s2*i+s1*j+k;//inverse convertion
                    cout<<a[l][i][j][k]<<"{"<<n<<"} ";
                }
                cout<<"|";
            }
            cout<<endl;
        }
        cout<<endl<<endl;
    }
    return 0;
}