如何使用cgal triangulation_3定位?

时间:2012-11-27 21:47:59

标签: triangulation cgal locate

嗨我正在使用Delaunay_triangulation_2和Delaunay_triangulation_3来寻找插值点。我找到了如何使用locate for Delaunay_triangulation_2:

Locate_type loc;
int li;
CgalPoint point(_params[0], _params[1]);
Face_handle handle = delaunay.locate(point, loc, li);

if(loc == Delaunay::VERTEX)
{
    MyData data = _handle->vertex(_li)->info();
}
else if(loc == Delaunay::EDGE)
{
    MyData data1 = handle->vertex(handle->cw(li))->info();
    MyData data2 = handle->vertex(handle->ccw(li))->info();
}
else if(loc == Delaunay::FACE)
{
    MyData data1 = handle->vertex(0)->info();
    MyData data2 = handle->vertex(1)->info();
    MyData data3 = handle->vertex(2)->info();
}

那些使用cw和ccw的技巧对我来说并不直观。

当使用Triangulation_3时,我遇到了实施EDGE,FACET和VEREX案例的问题

    Locate_type loc;
int li,lj;
Cell_handle handle = delaunay.locate(point, loc, li, lj);

switch(loc)
{
    case Delaunay::CELL:
    {
        for(int i = 0; i < 4 ; ++i)
            MyData data = handle->vertex(i)->info();
        break;
    }
    case Delaunay::EDGE:
    case Delaunay::FACET:
    case Delaunay::VERTEX:
        assert(false);
}

我的测试显示案例Delaunay :: VERTEX的行为与Triangulation_2中的行为相同。

Triangulation_3给出了不同的句柄类型,然后是Triangulation_2。我必须在这里使用一些cw和ccw技巧吗?

文件:

  

如果查询位于小平面,边缘或顶点上,则其中一个单元格   返回其边界查询。   http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Triangulation_3_ref/Class_Triangulation_3.html

我想获得两个有我的查询和三个面的边缘点(如果还有其他东西则返回Delaunay :: CELL)。如何从“其边界有查询的单元格之一”中获取它?

1 个答案:

答案 0 :(得分:2)

关于什么是小平面和边缘的文档在三角剖分的combinatorial part内。

    if(loc == Delaunay::VERTEX)
    {
        MyData data = handle->vertex(li)->info();
    }
    else if(loc == Delaunay::EDGE)
    {
        MyData data1 = handle->vertex(handle->vertex(li))->info();
        MyData data2 = handle->vertex(handle->vertex(lj))->info();
    }
    else if(loc == Delaunay::FACET)
    {
        MyData data1 = handle->vertex( (li+1)%4 )->info();
        MyData data2 = handle->vertex( (li+2)%4 )->info();
        MyData data3 = handle->vertex( (li+3)%4 )->info();
    }