【问题标题】:How to use cgal triangulation_3 locate?如何使用 cgal triangulation_3 定位?
【发布时间】:2012-11-28 15:18:57
【问题描述】:

您好,我正在使用 Delaunay_triangulation_2 和 Delaunay_triangulation_3 来寻找插值点。我找到了如何为 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)。如何从“其中一个在其边界上有查询的单元格”获取它?

【问题讨论】:

    标签: triangulation cgal locate


    【解决方案1】:

    关于什么是小平面和边的文档位于三角剖分的 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();
        }
    

    【讨论】:

    • 谢谢sloriot,这样的代码示例正是我需要的。
    猜你喜欢
    • 1970-01-01
    • 2021-03-21
    • 2014-06-06
    • 1970-01-01
    • 2017-12-22
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多