如何结合width、height、length将3D坐标映射为1D索引?
3D坐标转1D索引的正确方法
核心逻辑
3D坐标转1D索引的本质是按维度步长累加:每个维度的步长等于它之前所有维度的元素数量乘积,用于跳过前面维度的所有元素。你提到的length是z轴的维度长度,它的作用是约束z的合法取值范围(z必须在0 ~ length-1之间),并非计算索引的必要参数。
正确公式
假设你的3D坐标为(x, y, z),对应维度定义:
width:x轴的元素总数,x的取值范围是0 ~ width-1height:y轴的元素总数,y的取值范围是0 ~ height-1length:z轴的元素总数,z的取值范围是0 ~ length-1
那么1D索引的计算公式为:
index = x + width * y + width * height * z
等价的简化写法:
index = x + width * (y + height * z)
测试用例验证
当width=8、height=8、length=8,坐标(x,y,z)=(7,7,7)时,代入公式:
7 + 8 * (7 + 8 * 7) = 7 + 8 * 63 = 7 + 504 = 511
完全符合你的预期结果。
关于length的说明
length不需要写入公式的原因是:它仅用于确保z的取值不会超出合法范围(避免索引超过1D数组的最大长度width*height*length-1),但计算单个合法坐标的索引时,只需要前面维度的大小来确定步长。
错误公式分析
ChatGPT给出的公式额外添加了length * width * height * z,这会错误地将z维度的步长放大为width*height*(1+length),导致索引值异常偏大,显然不符合3D转1D的逻辑。
内容的提问来源于stack exchange,提问作者Bloxxy 213
相关产品推荐
相关产品推荐

