我已经实现了一个 3D 奇怪吸引子浏览器,它提供 0-100 范围内的浮点 XYZ 输出,现在我想根据两个连续输出之间的位移为其实现一个着色函数。
我不确定用于存储每个点的颜色值的数据结构,使用 3D 数组时,我只能四舍五入到最接近的整数,这会给出非常粗糙的配色方案。
我隐约知道八叉树,它们适合这种情况吗?
编辑:更多解释:
为了生成点,我反复运行这个:
(a、b、c、d 是 -3 到 3 范围内的随机 float )
x = x2;
y = y2;
z = z2;
x2 = sin(a * y) - z * cos(b * x);
y2 = z2 * sin(c * x) - cos(d * y);
z2 = sin(x);
parr[i][0]=x;
parr[i][1]=y;
parr[i][2]=z;
每次运行都会为每个轴生成新的位置,为了给渲染着色,我需要获取两个连续结果之间的距离,如果我只是通过每次运行之间的距离计算来执行此操作,那么颜色会在平衡中来回褪色,因此我需要获取每个点的运行平均值并存储它,使用 3dimenrsionl 数组的着色太粗糙,我正在寻找有关如何以更小的增量存储值的建议。
最佳答案
也许你可以放弃 2 维数组并使用 1 维数组
struct ColoredPoint {
int x;
int y;
int z;
float color;
};
这样代码看起来就像这样
...
parr[i].x = x;
parr[i].y = y;
parr[i].z = z;
parr[i].color = some_computed_color;
(您可能还希望封装字段并使用 class ColoredPoint
和访问方法)
关于用于存储 3 维 float 的 C++ 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1737955/