gpt4 book ai didi

c - 行、列、深度值的多维数组索引?

转载 作者:行者123 更新时间:2023-12-01 15:09:37 24 4
gpt4 key购买 nike

我有一些值是多维数组的偏移量,看起来像这样:

static const int TILE_SIZE = 32;
int Offset2D = (y * TILE_SIZE) + (x * TILE_SIZE);
int Offset3D = (y * TILE_SIZE) + (x * TILE_SIZE) + (z * TILE_SIZE);

现在我想做的是将偏移量转换为 x,y,z 对,如下所示:

void ConvertBack(int offset,int size,int& x,int& y,int& z)
{
//What's wrong with this code ?
x = offset / size;
y = offset % size;
z = ??; //How to get Z?
}

//Get back offsets from any dimension ?

void ConvertBackComplex(unsigned int offset,int size,int* vector,int len)
{
for (int i = 0;i < len;i++)
{
vector[i] = offset ?... ?
}
}

...到目前为止,我所有的尝试都失败了...所以我非常欢迎任何帮助!...

最佳答案

首先,我认为您的索引系统有点不对劲。不同的 x、y 和 z 值可以产生相同的偏移量。因此,首先,假设 TILE_SIZE 是数组的多少个单元格存储给定点的数据:

myArray = new arr[xSize*ySize*zSize*TILESIZE]
int offset2D = (x*ySize*zSize + y*zSize)*TILE_SIZE;
int offset3D = (x*ySize*zSize + y*zSize + z)*TILE_SIZE;

要从偏移量中取回 x,y,z,只需执行以下操作:

temp = offset/TILE_SIZE;
x = temp/(ySize*zSize);
y = (temp%(ySize*zSize))/zSize;
z = (temp%(ySize*zSize))%zSize;

对于多个维度:

temp = offset/TILE_SIZE;
sizeProduct = 1;
for(int k=1; k<numDims; ++k)
{
sizeProduct*=size[k];
}
for(int i=0; i<numDims; ++i)
{
vector[i]=temp/sizeProduct;
temp = temp % sizeProduct;
if((i+1)<numDims)
{
sizeProduct/=sizes[i+1];
}
}

计算多个维度的数组大小:

int arraySize = TILE_SIZE;
for(int i=0; i<numDims; ++i)
{
arraySize*=sizes[i];
}

要计算多个维度的数组索引(假设 vector 是您的坐标数组):

int index =0;
sizeProduct = 1;
for(int k=1; k<numDims; ++k)
{
sizeProduct*=size[k];
}
for(int i=0; i<numDims; ++i)
{
index+=sizeProduct*vector[i];
if((i+1)<numDims)
{
sizeProduct/=sizes[i+1];
}
}
index*=TILE_SIZE;

关于c - 行、列、深度值的多维数组索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12113116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com