0

こんにちは、補間のポイントを見つけるために Delaunay_triangulation_2 と Delaunay_triangulation_3 を使用しています。Delaunay_triangulation_2 の locate の使用方法を見つけました。

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 のトリックを使用する必要がありますか?

ドキュメント:

クエリがファセット、エッジ、または頂点にある場合、その境界にクエリを持つセルの 1 つが返されます。 http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Triangulation_3_ref/Class_Triangulation_3.html

クエリと顔の 3 点を持つエッジの 2 点を取得したい (他の何かが返された場合は Delaunay::CELL)。「境界にクエリがあるセルの1つ」から取得する方法は?

4

1 に答える 1

2

ファセットとエッジのドキュメントは 、三角形分割の組み合わせ部分の中にあります。

    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();
    }
于 2012-11-28T07:18:57.000 に答える