【问题标题】:How to convert an index into N coordinates?如何将索引转换为 N 坐标?
【发布时间】:2016-11-10 18:13:01
【问题描述】:

在一维空间中:

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

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

【问题讨论】:

    标签: arrays indexing coordinates data-conversion


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-05
      • 2022-01-25
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多