2013-12-20 3 views
0

삼각형 경계에서 각 모서리의 꼭지점을 추출하고 싶습니다. 먼저 필요한 경우 도메인에 구속 조건과 구멍을 정의하여 제한된 삼각 측량을 정의하는 것입니다. 그런 다음 메쉬 세밀화 알고리즘을 통해 메쉬를 수정해야합니다. 그것은 모든 결함을 제외하고 멋지고 멋쟁이 일합니다. 나는 어떤 경계가 어떤 경계에 있는지 말해야 만한다. 예를 들어 보겠습니다. 도메인을 정의하고 삼각형 분할의 제약 조건 인 4 개의 폴리 라인이 주어지면 (위, 아래, 왼쪽 및 오른쪽 폴리 라인) 폴리 라인이 어느 폴리선에 놓여 있는지 말해야합니다. 각 폴리선을 std :: vector로 정의 했으므로 세그먼트의 점을 쉽게 프로빙 할 수 있습니다. 이렇게 : CDT :: Point pt1; CDT :: Point pt2;CGAL 삼각형이 경계에 있는지 알 수있는 방법

for(const auto& seg : segments) 
{ 
    if(seg.has_on(pt1)) 
    { num++; } 
    if(seg.has_on(pt2)) 
    { num++; } 
    if(num==2){/*success? -> return true*/}    
} 

저는 다행히도 다각형에서 작동하는 CGAL :: bounded_side_2 함수를 알고 있습니다. 이 문제를 어떻게 해결할 수 있습니까?

for(CDT::Finite_edges_iterator it = cdt.finite_edges_begin(); 
      it != cdt.finite_edges_end(); ++it) 
{ 
     CDT::Edge e=*it; 
     // how can I tell if an edge is on boundary? 
} 

답변

2

제한된 삼각 측량의 is_contrained 메서드를 사용할 수 있습니다. 당신이 dandling 가장자리가 할 수있는 경우

if (cdt.is_constrained(e)) ... 

, 다음 example처럼 도메인을 표시하고 가장자리가 다른 nesting_level이 두면에 입사 있는지 확인 먼저해야합니다.

+0

세분하기 전에 어떤 구속 된 가장자리에 어떤 메쉬 세분화 엣지를 놓을 수 있습니까? segment_2 :: has_on이 올바른 방법인가요? 아니면 다른 방법이 있습니까? – dodol

+1

당신이 금지 된 Delaunay 삼각 측량을 [이 클래스] (http://doc.cgal.org/latest/Triangulation_2/classCGAL_1_1Constrained__triangulation__plus__2.html)로 감싸면 정보에 액세스 할 수있을 것이라고 생각합니다 (제약 조건에 추가 된 점은 하위 제약 조건을 정의합니다). – sloriot

+0

참으로. Subconstraint_iterator를 사용하여 제한된 가장자리를 반복하므로 가장자리가 제한되는지 묻지 않아도됩니다. 느린 피드백에 대해 유감스럽게 생각합니다. – dodol

관련 문제