【问题标题】:CGAL: Access to Results of find_conflicts()CGAL:访问 find_conflicts() 的结果
【发布时间】:2014-06-23 22:27:37
【问题描述】:

所以我对 CGAL 中的 find_conflicts 函数感到很困惑。我以为我知道 std::pair,并且我以为我知道 find_conflicts() 中发生了什么,但是对于我的一生,我不确定如何访问结果。我认为传递给 find_conflicts 的迭代器足以直接访问这些值。 (即,我想获得那些我放入“向量构面”的构面)并且看起来我正在这样做,因为我可以成功

           typedef std::pair<std::vector<Facet>, std::vector<Cell> > FacetAndCell;


            *  *  *


            Cell_handle cell = T.locate(curr_point);
            std::vector<Facet> facets;

            T.find_conflicts(curr_point, cell, std::back_inserter(facets), CGAL::Emptyset_iterator());

            CGAL::First_of_pair_property_map<FacetAndCell> my_p_map();

            Delaunay::Finite_facets_iterator ff_iter;
            std::vector<Facet>::iterator facet_iter;

            // Here, what I'm trying to achieve is figuring out which of the facets 
            // in conflict are finite.  I had wanted to use some kind of test like 
            // "is_infinite()" on the facet at hand, but this isn't available for 
            // a facet out of context of the triangulation it's part of.

            for(facet_iter = facets.begin(); facet_iter != facets.end(); facet_iter++){
                for(ff_iter = T.finite_facets_begin(); ff_iter != T.finite_facets_end(); ff_iter++){

                    // Since I get an error that facet_iter is actually of type pair, I thought this would work, but it doesn't.
                    // ERROR!
                    cout << facet_iter->first << endl;

                    // This works, which is what led me to believe I was comparing one facet to another facet.
                    /*
                    if(*facet_iter == *ff_iter){
                        cout << "Finite facet!" << endl;
                        break;
                    }*/
                }
            }

总结:

1) 总的来说,我想知道 find_conflicts() 结果中的哪些方面是有限的。如果有更简单的方法可以做到这一点,请随时告诉我。

2) 否则,这里更具体的问题是我需要获取由 find_conflicts() 产生的刻面向量,然后获取每个刻面的顶点。我应该使用返回的“对”单元格和构面,还是可以直接访问向量,就像我正在尝试做的那样?

请帮忙,谢谢。

【问题讨论】:

    标签: facet triangulation cgal vertices


    【解决方案1】:

    对于有限性测试,请使用is_infinite()。见http://doc.cgal.org/latest/Triangulation_3/classCGAL_1_1Triangulation__3.html#af024721d3ae4b9327ffe442fb828935c

    否则,您可能会感到困惑,因为 Facet 类型是一对的 typedef(很遗憾)。

    PS:或者,您可以在其他问题中使用 Marc Glisse 的建议(使用 locate(midpoint(p, sphere center)))。可能会更容易。 CGAL Using Locate() to Find Cell on Triangulation Surface

    【讨论】:

    • 啊,是的。你很擅长弄清楚我真正的误解。是后者;因此,Facet 由一个单元格和该单元格的顶点索引来描述,该单元格指示该 facet 相对于哪个单元格顶点...在 3D Delaunay 三角剖分中,一个 facet 必然是一个三角形,对吧?
    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    相关资源
    最近更新 更多