2014-10-02 4 views
1

최근에 부스트 :: 도형 라이브러리에서 작업하려고했습니다. 이 간단한 다각형부스트에서 다각형 기능 확인

  1. 이다 : 나는

    #include <boost/geometry.hpp> 
    #include <boost/geometry/geometries/point.hpp> 
    #include <boost/geometry/geometries/polygon.hpp> 
    
    #include <iostream> 
    
    namespace bg = boost::geometry; 
    
    int main(void) 
    { 
        typedef bg::model::point<double, 2, bg::cs::cartesian> point; 
        typedef bg::model::polygon<point> polygon; 
    
        //! create a polygon 
        polygon p; 
        p.outer().push_back(point(0., 0.)); 
        p.outer().push_back(point(1., 0.)); 
        p.outer().push_back(point(1., 2.)); 
        p.outer().push_back(point(2., 3.)); 
        p.outer().push_back(point(0., 4.)); 
    
        //! display it 
        std::cout << "generated polygon:" << std::endl; 
        std::cout << bg::wkt<polygon>(p) << std::endl; 
    
        return 0; 
    } 
    

    아래 코드 검사에 대한 어떤 생각을 발견?

  2. 방위는 무엇입니까 (시계 방향, 반 시계 방향)
  3. 닫혀 있습니까?

그건 그렇고, 나는 부스트 버전 1.53.0을 사용하고 있습니다.

감사합니다.

답변

0

BG에서 Polygon의 개념은 설명 가장 높은 수준의 의사 결정 :

다각형은 다각형은 하나의 외부 경계와 0 개 이상의 내부 경계 (OGC 단순 기능에 의해 정의 된 평면이다 사양).

그래서 Boost.Geometry 폴리곤의 정의는 예를 들어 Wiki, 다각형에는 구멍이 없습니다. Boost.Geometry의 다각형은 구멍이 있거나없는 다각형입니다. (구멍이없는 다각형은 Boost.Geometry 내 도우미 형상이며, 라고도합니다.) Ring에서

우리가 찾을 :

  • 은 전문화가있을 수 있습니다 clockwise 또는 counterclockwise
  • traits::closure의 특수화가있을 수 있습니다. traits::point_orderRules에서 폐쇄, open 또는 closed

을 정의하는 것은 대부분의 답변을 질문하는 발견 할 것이다 : 컴파일시에 확인되는 개념, 게다가

을, 다른있다 유효한 다각형이 충족해야하는 규칙 이것은 개방 공간 규칙을 따른다 (위 링크 참조).

  • 다각형 간단한 기하학적 객체 (위키하지만 구멍이 Boost.Geometry 다각형에서 허용되는 참조).
  • ring_type의 기본 폴리곤이 시계 방향으로 정의 된 경우 외부 링은 시계 방향이어야하며 내부 링은 w.r.t와 반대 방향이어야합니다. 정의 된 방향 (시계 방향 바깥 쪽 링의 경우 시계 반대 방향). ring_type이 시계 반대 방향으로 정의되면 반대입니다.
  • ring_type의 기본 폴리곤이 닫힌 것으로 정의 된 경우 모든 링을 닫아야합니다. 첫 번째 점은 공간적으로 마지막 점과 같아야합니다.
  • 내부는 연결된 지점 집합입니다. 내부가 접속 지점 세트 인만큼 (
  • 에는 자기 교차점이 없어야 만, (내부/외부 링 사이) 자체 탄젠트가 허용된다.
  • 더 커트라인, 스파이크 또는 천공이 없어야한다.
  • 내부 링이 외부 링 내에 위치한다. 내부 링이 서로 내에 위치 될 수 없다.

참고

,691 것을
  1. boost::geometry::correct을 사용하여 위의 모든 요구 사항을 준수하지 않는 반지/다각형을 수정할 수 있습니다.
  2. 부스트 1.56.0에 boost::geometry::is_valid이 추가되어 지오메트리의 유효성을 확인할 수 있습니다. 이전 버전의 경우 예 : polygons union using boost