C++行进立方体算法解释
C++ Marching Cubes Algorithm Explanation
我试图了解行进立方体算法的工作原理。
源:http://paulbourke.net/geometry/polygonise/
我不明白的是你如何计算"GRIDCELL"值。确切地说,
double val[8];
部分对我来说不清楚它实际上应该包含什么。
typedef struct {
XYZ p[8];
double val[8];
} GRIDCELL;
据我了解,XYZ p[8]; 是输出立方体的顶点坐标。但是什么价值[8];是?
行进立方体算法 - 如链接描述中所述 - 一种从采样数据构建多边形表示的算法。这
double val[8];
是立方体的 8 个顶点的样本。因此,它们不是经过计算的,它们是来自例如MRI扫描的测量值。因此,算法是相反的:获取一组测量数字并从中构建用于可视化的表面表示。
Te val 是单元格每个顶点的"电荷"水平,它取决于您要创建的形状尖端。F.E.:如果你想做一个球,你可以用公式对值进行采样:
for (int l = 0; l < 8; ++l){
float distance = sqrtf(pow(cell.p[l].x - chargepos.x, 2.0) + pow(cell.p[l].y - chargepos.y, 2.0) + pow(cell.p[l].z - chargepos.z, 2.0));
cell.val[l] = chargevalue /pow(distance, 2.0);}
经过进一步的阅读和研究,解释非常简单。
首先:
- 体素表示三维空间中规则网格上的值。
该值仅表示所谓的"等值面"。或者换句话说,空间的密度。
double val[8];
简化:基本上这应该是 -1.0f
到 0.0f
之间的值。其中 -1.0f 表示实心空间和 0.0f 空白空间。
例如,对于ISO值,可以使用柏林/单工噪声。
相关文章:
- 请解释"函数1(p1,p2,p3);"的输出
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 解释一下这个排序算法是如何工作的?
- 函数以相反的顺序输出输入问题,并改进算法以解释相等的数字
- 克鲁斯卡尔的算法解释
- C++行进立方体算法解释
- 有人可以用C++解释这个算法吗?
- 将 std::vector<unsigned int> 解释为位向量 - 高效算法?
- 算法复杂度- O(log n)的解释
- 解释这个算法(比较SURF算法中的点)
- 算法时间复杂度类型解释
- 解释两种几乎相同的算法的性能差异