2016-11-10 42 views
2

在一個1維空間:如何將索引轉換爲N個座標?

x = i 

在2維空間(大小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

我猜常見公式是這樣的: 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; 
} 
相關問題