用于存储 3 维 float 的 C++ 数据结构

标签 c++ 3d data-structures

我已经实现了一个 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/

相关文章:

c++ - 打印到文件时退格字符不起作用

3d - 我如何找到光线在 3d 网格中相交的所有立方体?

mysql - 如何优化缓慢的修改预序树遍历查询

c++ - 稳定排序C++ HashMap -保留相等元素的插入顺序

c - 在链表中,节点似乎被最后一个节点中的数据覆盖

c++ - 电话价格问题(十月挑战 Codechef)

c++ - 我在 visual studio 中的程序没有显示任何内容,我的代码有什么问题?

c++在谷歌浏览器中启用可访问性检查

c++ - 在 openGL 中使用着色器显示体素

c++ - 如何在曲线上设置实心球体的动画