发布于 2011-03-16 18:22:22
我做什么:我的模型由许多不同的图元组成(三角形,四边形,圆盘,柱面...)。对于每个原语,我可以实现一个随机挑选方法(例如http://mathworld.wolfram.com/TrianglePointPicking.html)。每个primitve都可以计算它的表面积。基元的面积越大,其生成随机点的概率就越高。在我的模型中,我构建了一个累积列表,如下所示
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();
}https://stackoverflow.com/questions/5323644
复制相似问题