2009-11-15 85 views
2

我已经实现了一个3D奇怪的吸引器浏览器,它给出了在0-100范围内的浮点XYZ输出,现在我想基于两次连续输出。C++数据结构,用于存储浮点数的3维

我不确定用于存储每个点的颜色值的数据结构,使用3D数组我仅限于四舍五入到最接近的int值,从而给出非常粗糙的颜色方案。

我隐约意识到八分骰,它们适合在这种情况下吗?

EDIT:有点更多的解释:

以产生即时反复运行此点:

(A,B,C,d的范围是-3到3个随机浮点数)

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; 

其中用于每个生成新的位置轴每次运行中,以色渲染我需要两个连续的结果之间的距离,如果我只是这样做与每个运行之间的距离计算,则颜色褪色来回在平衡中,所以我需要运行平均值fo使用3DimenSionl数组对每个点进行存储并存储过于粗糙,我正在寻找如何以更小的增量存储值的建议。

+0

什么是“奇怪吸引器探险家”? – Macke

+0

是一个3浮点结构你想要什么或...? – Jonas

+0

类似于:http://www.chaoscope.org/ 但在我的情况下,使用免费的摄像头在点云周围和点云内移动。 – Baxter

回答

1

我想可能会考虑某种三维二叉搜索树。

template <class KEY, class VALUE> 
class BinaryTree 
{ 
    // some implementation, probably available in libraries 
public: 
    VALUE* Find(const KEY& key) const 
    { 
     // real implementation is needed here 
     return NULL; 
    } 

}; 

// this tree nodes wil actually hold color 
class BinaryTree1 : public BinaryTree<double, int> 
{ 
}; 

class BinaryTree2 : public BinaryTree<double, BinaryTree1> 
{ 
}; 

class BinaryTree3 : public BinaryTree<double, BinaryTree2> 
{ 
}; 

你运作中检索从这棵树上的颜色看起来像

bool GetColor(const BinaryTree3& tree, double dX, double dY, double& dZ, int& color) 
{ 
    BinaryTree2* pYTree = tree.Find(dX); 
    if(NULL == pYTree) 
     return false; 

    BinaryTree1* pZTree = pYTree->Find(dY); 
    if(NULL == pZTree) 
     return false; 

    int* pCol = pZTree->Find(dZ); 
    if(NULL == pCol) 
     return false; 

    color = *pCol; 
    return true; 
} 

房颤当然,你需要编写,将增添色彩这棵树的功能,提供了3个坐标X, Y和Z. std :: map似乎是基类的一个很好的候选者。

2

也许你可以关闭跌落的2维数组,并使用

struct ColoredPoint { 

    int x; 
    int y; 
    int z; 

    float color; 
}; 

的1维数组,这样的代码看起来像

... 
parr[i].x  = x; 
parr[i].y  = y; 
parr[i].z  = z; 
parr[i].color = some_computed_color; 

(你也不妨封装字段和使用class ColoredPoint与访问方法)

+0

并给出(x,y,z)如何找到颜色?线性搜索? – BostonLogan

+0

从初始后 “......我现在要实现的着色功能,它基于两个连续输出之间的位移......” 目前还不清楚,如果访问的颜色值由(X,Y ,z)是必需的。 – 2009-11-15 19:19:14

+0

需要基于屏幕深度进行渲染,因此我需要三维二叉搜索树而不是结构数组。 – Baxter