2012-11-27 6 views
0

안녕하세요 저는 Delaunay_triangulation_2 및 Delaunay_triangulation_3을 사용하여 보간 할 점을 찾습니다.cgal triangulation_3 찾기 사용 방법은 무엇입니까?

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와 그 트릭은 나를 위해 직관적하지 않은 : 나는 Delaunay_triangulation_2에 대한 위치를 사용하는 방법을 발견했다. 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); 
} 

내 테스트를 실행에 문제가 들로네 :: 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

나는 (다른 뭔가가 다음 들로네 :: CELL을 반환 될 때 경우에) 내 쿼리 및 얼굴의 세 점을 가장자리의 두 점을 싶어. "경계에서 쿼리하는 셀 중 하나"에서 가져 오는 방법?

답변

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(); 
    } 
+0

감사합니다. 위와 같은 코드 예는 정확하게 필요한 것입니다. – Dorian