【问题标题】:Extracting normals of a CGALTriangulation提取 CGALT 三角剖分的法线
【发布时间】:2020-11-16 11:00:03
【问题描述】:

在 3D CGALtriangulation 中,我试图通过这种方式获取法线

    Vector n = CGAL::normal(p1, p2, p3);

上下文代码:

for (CGALTriangulation::Finite_facets_iterator it = T.finite_facets_begin();
             it != T.finite_facets_end();
             it++)
        {
            std::pair<CGALTriangulation::Cell_handle, int> f = *it;
            
            const Pointt& p0 = f.first->vertex((f.second))->point();
            
            const Pointt& p1 = f.first->vertex((f.second+1)&3)->point();
            const Pointt& p2 = f.first->vertex((f.second+2)&3)->point();
            const Pointt& p3 = f.first->vertex((f.second+3)&3)->point();

编辑

for (auto f : T.finite_facets())
{

    //all convex hull facets pointing outside
    if (T.is_infinite(T.mirror_facet(f).first)){
        f = T.mirror_facet(f);
    }

    const auto cell = f.first;
    const int i = f.second;
        
    const Point& p1 = cell->vertex( T.vertex_triple_index(i, 0) )->point();
    const Point& p2 = cell->vertex( T.vertex_triple_index(i, 1) )->point();
    const Point& p3 = cell->vertex( T.vertex_triple_index(i, 2) )->point();

    Vector n = CGAL::normal(p1, p2, p3);
}

【问题讨论】:

  • vertex_triple_index 三个顶点上的迭代器给出了从cell 看到的小平面的正确方向。如果你想要一个给定的方向(例如在凸包上),你仍然必须在一个方面的两种表示之间进行选择:fT.mirror_facet(f)
  • 您是否需要只计算凸包面的法线?
  • 不,我计算了有限面的所有法线。但是当凸包的法线没有指向外部时,视觉效果会更加明显:我正在制作一个水晶着色器......
  • 您应该将所有构面表示两次,对构面的两侧各表示一次。

标签: c++ geometry cgal triangulation


【解决方案1】:

无法以这种方式找到刻面的方向。要设置 p1p2p3,请使用以下代码:

const auto cell = f.first;
const int i = f.second;

const Pointt& p1 = cell->vertex(T.vertex_triple_index(i, 0)->point();
const Pointt& p2 = cell->vertex(T.vertex_triple_index(i, 1)->point();
const Pointt& p3 = cell->vertex(T.vertex_triple_index(i, 2)->point();

请参阅documentation of vertex_triple_index

【讨论】:

    猜你喜欢
    • 2012-03-04
    • 2012-09-16
    • 1970-01-01
    • 2021-05-27
    • 2016-10-06
    • 2019-09-28
    • 2015-01-07
    • 1970-01-01
    • 2013-03-19
    相关资源
    最近更新 更多