【问题标题】:Marching Cubes (C++ to C#)行进立方体(C++ 到 C#)
【发布时间】:2014-04-09 13:12:43
【问题描述】:

我正在尝试在 C# 中实现行进多维数据集,但我遇到了一个我不了解算法并且我不知道如何实现它的部分。

int Polygonise(GRIDCELL grid, double isolevel, TRIANGLE *triangles)

第三个参数我不太明白。我知道这是一个指针,但稍后在算法中,当您设置三角形时,它看起来好像 triangles 变量是 TRIANGLE 结构的数组:

int ntriang = 0;

for (int i=0; triTable[cubeindex,i]!=-1; i+=3) {
    triangles[ntriang].p[i  ] = vertlist[triTable[cubeindex,i  ]];
    triangles[ntriang].p[i+1] = vertlist[triTable[cubeindex,i+1]];
    triangles[ntriang].p[i+2] = vertlist[triTable[cubeindex,i+2]];
    ntriang++;
}

注意triangles[ntriang]。这没有意义,因为在我们将triangles 设置为TRIANGLE *triangles 之前。我也不明白为什么它是一个指针。

【问题讨论】:

  • 为什么triangles[ntriang] 没有意义?它只是使用ntriang 来索引triangles 指向的数组。表达式的其余部分在ntriang-th 位置为结构的成员p 赋值。

标签: c++ pointers marching-cubes


【解决方案1】:

Polygonize 的调用者期望*triangles 指向一个足够长以包含所有三角形的已分配数组。 c# 中的等价物可以是TRIANGLE[]List<TRIANGLE>()

【讨论】:

  • 您必须添加一个列表,然后您可以将 [] 运算符用作数组。
【解决方案2】:

看起来这个函数采用体素/单元格的网格并输出三角形。它是一个指针,因为您将获得一个三角形列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2015-01-26
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多