2013-11-23 3 views
2

this question을 조사해 보면 경계선이 선분과 원호로 구성되어있는 모양을 처리해야합니다. CGAL이 나를 도와 줄 수있을 것 같습니다 : this section of the User's Manual에 따르면 General_polygon_set_2Gps_segment_traits_2이며 그 특성 클래스는 필요한 교차점과 차이점을 대부분 표현할 수 있어야합니다.CGAL 일반 폴리곤 : rigid motions and area

지금까지 문서에서 찾지 못한 것은 이러한 모양에 강체 모션을 적용하는 방법과 결과 모양의 영역을 계산하는 방법입니다.

나는 두 가지 문제를 해결할 수 있다고 생각합니다. 강체 모션의 경우 원래 정의 객체를 변형 한 후에 모양을 다시 만들 수 있습니다. 그리고 그 영역을 계산하기 위해 원형 궤도에 맞게 조정 된 신발 끈 접근법의 변형을 사용할 수 있습니다. 매뉴얼에서 나온 예제는 서포트 서클에 대한 세부 사항을 출력하고, 헤더를 파헤 쳐서 나는 모든 curve에 내 폴리곤에 supporting_circle() 메소드가 있다는 것을 알았습니다. 실제로는 Arr_circle_segment_traits_2<K>::X_monotone_curve_2이라고 생각합니다. 그래서 나는 그 지역을 계산하기에 충분한 원 정보를 얻을 수 있어야합니다. 난 단지 머리말에 고의적 인 컴파일러 오류 메시지를 사용하여 설명서가 단순히 unspecified_type으로 설명하는 일부 개체의 유형에 대해 배운 후 발견.

그럼에도 불구하고이 두 가지 작업 모두 상당한 작업이 필요하며 이러한 작업을 수행 할 기본 방법이없는 것 같습니다. 다른 한편으로, CGAL이 템플릿 인자를 통해 커스터마이징을하는 방식으로, 원형 폴리곤에 대해 작동하는 이러한 방법은 다른 일반적인 폴리곤에서는 작동하지 않을 수도 있지만 단순히 빠져있을 수도 있습니다. 내가 사용할 수있는 단축키를 알고 있습니까?

+0

안녕하세요. [저는 CGAL 개발자입니다] (http : //www.cgal.org/people.html). 나는 CGAL의 Boolean Operation and Arrangement 패키지를 잘 모르기 때문에 스스로 답을 모르겠다. 귀하의 질문을 개발자의 내부 메일 링리스트로 전달했습니다. 우리 중 한 명이 당신을 도울 수 있기를 바랍니다. – lrineau

+0

@lrineau : 고마워요! 입력 개체를 변환하는 내 해결 방법은 성능 측면에서 문제가 될 수 있습니다. 나는 다각형 세트를 조각으로 변환하기 위해 코드를 작성했지만 변형 된 다각형을 재구성 할 때 나는 전제 조건을 위반했다. 아마'Epick' 커널을 사용하고 있기 때문에 아마도 하나의 루트 포인트를 double로 변환했을 것입니다. 이 순간 나는이 부울을 처음부터 직접 구현하는 것을 진지하게 고려하고 있습니다. 그러나 아마도 CAGL이 어떻게 내 필요를 충족시킬 수 있는지에 대한 개요를 설명하는 데 도움을 줄 수있는 개발자가 있습니다. – MvG

답변

2

내 대답을 좋아하지 않을 까봐 걱정됩니다.

저는 사실 CGAL 개발자입니다. Reg의 개발자 중 한 명입니다. 부울 연산과 배열 패키지.

처음에는 요청한 작업이 지원되지 않습니다.

면적 계산과 관련하여 귀하의 접근 방법이 실현 가능해 보입니다. 그러나 우리가 지원하는 모든 특성 클래스에 대한 작업을 구현해야하므로 개념에서 이러한 작업을 요구하는 것은 큰 노력 일 것입니다. 나는 항상 하나씩 시작한 다음 하나씩 추가하는 것이 항상 가능하다고 생각합니다. 나는 그것을 todo 목록에 던지 겠지만, 나는 빠른 배달에 나의 내기를 두지 않을 것이다 ...

변환에 관해서는, 그 대답이 더 관여한다. 이미 알았 듯이 (정확한) 기하학적 모양 (예 : 배열, 일반 다각형 세트 또는 작은 선형 단순 볼록 다각형)에 비 정밀 변환을 적용하면 해로울 수 있습니다. 기하학적 요소의 (정확한) 좌표를 나타내는 데 사용 된 것과 동일한 (또는 적어도 서로 변환 가능한) 유형의 숫자를 포함하는 변형 행렬과 같은 정확한 변환을 만들어야합니다. 일반적으로 각도로 시작하고 삼각 함수 (예 : sin() 및 cos())를 사용하여 회전 행렬을 계산하기 때문에 문제는 당연히 회전입니다. 주어진 각도, 즉 알파로 회전하고 싶다고합시다. sin (alpha) 및 cos (alpha)가 유리수가되도록 alpha의 근사치를 계산해야하므로 앞서 말한 정확한 유형의 숫자로 나타낼 수 있습니다. CGAL :: rational_rotation_approximation() 함수가 도움이 될 수 있습니다. 이 함수의 수동 입력에서 언급했듯이 근사치는 8 번째 SoCG에서 Canny와 Ressler가 제시 한 합리적인 회전 방법에 설명 된 Farey 시퀀스를 기반으로합니다.

행운을 빈다!

+0

답변 해 주셔서 감사합니다. 그냥 모든 것을 합리적인 커널과 유리수로 전환해야한다는 것을 의미합니까? 결국, 정확하지 않은 합리적인 거의 회전하는 행렬을 계산할 때 부정확 한 복소수로 곱하면 도움이되지 않을까요? 복식을 사용하는 것과 사용하지 않는 것의 구분선은 어디에 있습니까? 나의 실패한 전제 조건 중 하나와 같은 평등에 대한 검사는 어떤 경우에는 복식에서만 작동하는 것처럼 들리며 다른 경우에는 부서 질 수도 있습니다. 이 경우인가요? – MvG

+1

정확하지는 않습니다. 정확한 술어 - 정확한 - 건설 커널을 사용해야합니다. 반드시 합리적이지는 않은 대수를 지원하는 커널이 있습니다. 합리적인 커널이 충분하지 않다는 확신이있는 경우에만 사용하는 것이 좋습니다 (예 : 일부 숫자의 루트를 계산해야하는 경우). 그러나 초월수를 지원하는 커널은 없습니다 (예 : PI). 복식을 사용하면 코드가 손상 될 수 있으며 결국에는 특정 상황에서 중단되며 배열과 같은 복잡한 데이터 구조의 경우에는 중단됩니다. –

+0

자주 생각하는 것보다 ... –