在一维空间中:
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
注意:所有变量都是整数。
答案 0 :(得分:1)
要检查这些公式,我使用了这个程序,看起来很有效。
#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;
}