gpt4 book ai didi

c++ - 展平的 3D 数组内部值

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:02 25 4
gpt4 key购买 nike

我有一个展平的 3D 数组,代表我要优化的程序网格的顶点索引。我这样创建数组:

int* vertIndices = new int[WIDTH * HEIGHT * DEPTH];

并添加到数组中

vertIndices[x + WIDTH * (y + HEIGHT * z)] = vertIndex;

问题是我只需要跟踪网格表面 上的顶点。不会创建内部顶点。

因此,我创建了很多从未使用过的无用整数。

这是一个遍历 WIDTH: 7、HEIGHT: 7 和 DEPTH: 7 的网格的 vertIndices 数组的循环

enter image description here

所有这些 -1163005939 值都是位于网格内部但不会创建的顶点。

我的问题是如何改进公式

x + WIDTH * (y + HEIGHT * z)

忽略内部值。

谢谢!

最佳答案

我认为您不会回避向公式中引入某种条件。像这样:

int getIndex(int x, int y, int z) {
//First get the amount of points in all layers before this z layer.
int beforeZ = (z) ? WIDTH*HEIGHT + (z - 1)*2*(WIDTH + HEIGHT - 2) : 0;

//Then get the amount of points within this layer before this line.
int beforeY = (y) ? WIDTH + 2*(y - 1) : 0;
if(z == 0 || z == DEPTH - 1) beforeY = y*WIDTH;

//And finally the amount of points within this line before this point.
int beforeX = (x) ? 1 : 0;
if(z == 0 || z == DEPTH - 1 || y == 0 || y == HEIGHT - 1) beforeX = x;

//Return the amount of points before this one.
return beforeZ + beforeY + beforeX;
}

我承认这有点难看,但我认为它非常接近你能得到的最好结果。至少如果您不想创建某种将坐标与索引相匹配的查找表,反之亦然。当然,这样的查找表是可以处理任何情况的真正大手笔,缺点是内存使用量很大,操作速度可能较慢。

关于c++ - 展平的 3D 数组内部值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27336240/

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