c++ - 3D 模型的均匀采样

标签 c++ 3d computational-geometry

我寻求一种在 C++ 中对 3D 模型表面进行均匀采样的方法/算法。 我找到了单位球体均匀采样的方法,例如 thisthis但我需要一些也适用于更复杂的 3D 模型(也可能是凹面)的东西。 提前致谢

最佳答案

我的工作:我的模型由许多不同的基元组成(三角形、四边形、圆盘、圆柱体...)。对于每个基元,我可以实现随机选取方法(例如 http://mathworld.wolfram.com/TrianglePointPicking.html )。每个基元都可以计算其表面积。图元的面积越大,生成随机点的概率就越高。在我的模型中,我构建了一个像这样的累积列表

class Model{
  // ...
  vector<pair<double, Primitive*> > primitives_;
}

void Model::AddPrimitive(Primitive* p)
{
  double area = p->Area();
  if (!primitves_.empty())
    area += primitives_.back().first;
  primitives_.push_back(make_pair(area, p));
}

当我在模型上生成随机点时,我首先选择一个随机基元,然后选择该基元上的随机点。

Point Model::RandomPoint()
{
  double maxArea = primitives_.back().first;
  double rnd = maxArea * Uniform01();  // random in [0; maxArea] 
  Iterator it = std::lower_bound(
        primitives_.begin(), primitives_.end(), rnd, FirstLess()); 
  return it->second->RandomPoint();    
}

关于c++ - 3D 模型的均匀采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5323644/

相关文章:

c++ - 无法使用 "const unsigned char *"类型的右值(又名 char*)初始化类型 'value_type *' 的参数

c++ - 获取所有 FPU 寄存器的值,甚至是 "empty"的寄存器

javascript - 如何使用 highcharts 3D 散点图获得立方图?

ios - 了解 SCNCamera 的非投影坐标

c++ - 如何将 OS X 风格添加到 Qt 应用程序

jquery - 将 2D 图像转换为 .STL 格式的插件

data-structures - 存储连续多边形的最佳数据结构?

computational-geometry - 3D 凸多氢体中的点位置

javascript - SVG 路径上的 bool 运算

c++ - 关键部分是否确保由一个线程修改的任何数据类型的共享变量对其他线程可见?