쿼드 에지 데이터 구조 (Delaunay / Voronoi)


18

계산 계 또는 대수학자를위한 2 가지 질문 :

나는 방금 계산 기하학으로 뛰어 들기 시작했고 그것을 좋아하고 있습니다 =)

나는라고 Guibas 및 Stolfi로 유명한 기사 읽으려고하고있다 "일반적으로 구획의 조작과 보로 노이 다이어그램의 계산을위한 프리미티브" 들로네 삼각 분할 알고리즘을 구현하기 위해서입니다. 나는 모든 이론적 인 내용을 건너 뛰고 시간을 절약하기 위해 쿼드 에지 데이터 구조에 대한 설명을 읽으려고합니다. 그러나 구조가 널리 사용되거나 아름답 기 때문에 기사의 모든 수학을 이해하는 것이 가치가 있다고 생각합니다.

수학은 조금 조밀합니다. 나는 토폴로지에 대해 완전히 무지하지는 않지만, 가장자리 대수에 대한 설명에는 내가 가지고 있지 않은 추상 대수에 대한 지식이 필요합니다.

내 두 가지 질문은 다음과 같습니다. Delaunay / Voronoi 컴퓨팅 외에 쿼드 에지 구조의 다른 응용 프로그램은 무엇입니까? 매우 강력한 도구 인 것 같습니다.

두 번째 질문; 추상 대수 란 무엇입니까? 추상적 대수학에 대한 소개를 해줄 수 있다면 좋을 것입니다.

감사합니다!


3
격차를 메우기 위해 : 추상 대수학은 특정 규칙을 존중하는 요소 집합에 대한 연구입니다. 이 세트가 만족하는 규칙은 짐작, 동일성 요소, 고유 한 역의 존재와 같은 속성이며, 정류, 연관성 등을 진행할 때마다 실제 숫자처럼 행동하지 않는 세트에 대한 대수 연구입니다. 좋은 예는 순열입니다.
로스 스나이더


두 번째 질문은 약간의 실수였습니다. 나는 그룹 이론을 알고있다. 나는 반지와 필드가 무엇인지 안다. 이 기사에서 그들은 정의 단지의 : 추상 대수학을 "에지 대수는 추상 대수학 (E, E *, Onext 부패, 플립) 만족 특성 E1-E5와 F1-F5입니다"
bigmonachus

[...] 그리고 그게 무슨 뜻인지 모르겠습니다. 그것은 필드 위에 대수학 이 아닌가?
bigmonachus

답변:


32

기바와 스톨 피의“대수 대수학”형식주의는 약간 불필요하다.

실제로 필요한 것은 기본 그래프와 이중 그래프의 차이점을 기억하는 것입니다. 각면 시원 그래프는 대응하는 듀얼 정점 갖는다 ; 원시 그래프의 각 에지 는 대응하는 이중 에지 가지며 ; 원시 그래프의 각 정점 는 대응하는 이중면 . 원시 모서리는 원시 정점과 별도의 원시면을 연결합니다. 이중 모서리는 이중 정점과 별도의 이중면을 연결합니다. 이중의 이중은 원래 것입니다. Guibas 및 Stolfi의 논문에서 그림 4를 참조하십시오.f e e v v ffeevv

원시 및 이중 그래프

Guibas와 Stolfi는 각 가장자리 (원초 또는 이중)를 4 개의 방향 지향 가장자리 의 모음으로 생각할 것을 제안 합니다. 간단히하기 위해이 다트를 호출합니다 . 각각의 다트 하나의 엔드 포인트에서 포인트 다른 끝점 및 양면 로컬 분리 와 . 를 호출 할 끝점을 선택하는 것이 다트의 방향 이며 를 호출 하는 방향이 꼬리(e )머리(e )왼쪽(e )오른쪽(e )꼬리(e )왼쪽(e )etail(e)head(e)left(e)right(e)tail(e)left(e). (Guibas와 Stolfi는 "꼬리"와 "머리"대신 "Org"와 "Dest"를 사용하지만 불필요한 약어가 악의적이므로 더 짧은 레이블을 선호합니다.)

다트 에 대해 Guibas와 Stolfi는 다음 세 가지 관련 다트를 연결합니다.e

  1. 꼬리 ( e ) etailNext(e) : 떠나는 다트 다음 후 반 시계 방향으로 순서 .tail(e)e
  2. e 왼쪽 ( e ) 오른쪽 ( e )flip(e) :“같은”다트는 이지만 및 교체되었습니다.eleft(e)right(e)
  3. erotate(e) : 의 중간 지점을 시계 반대 방향으로 1/4 바퀴 돌려 얻은 이중 다트 .e

tail 다음, 회전 및 뒤집기

이 세 가지 기능은 다음과 같은 모든 종류의 훌륭한 정체성을 충족시킵니다.

  • right(tailNext(e))=left(e)
  • right(flip(e))=left(e)
  • right(rotate(e))=head(e)
  • flip(flip(e))=e
  • rotate(rotate(rotate(rotate(e))))=e
  • tailNext(rotate(tailNext(rotate(e))))=e

전체 목록은 논문의 83 페이지를 참조하십시오 (그러나 저자는 아마도 선언적 코드에 더 가깝기 때문에 접미사 표기법 사용해야 합니다 ). Guibas와 Stolfi는 이러한 모든 아이덴티티를 만족시키는 모든 트리플 함수를 에지 대수 라고 부릅니다 .e Flipe.Flip

또한 이러한 세 가지 기능을 고려할 때 다음과 같은 다른 유용한 기능을 정의 할 수 있습니다

  • reverse(e)=rotate(flip(rotate(e))) — 머리와 꼬리 정점 교체
  • e 왼쪽 ( e )leftNext(e)=rotate(tailNext(rotate(rotate(rotate(e))))) — 주위의 시계 방향으로 뒤에 다음 다트eleft(e)

마지막으로,이 함수들을 아는 것은 세분화의 토폴로지에 관한 모든 것을 절대적으로 알려주고,이 세 함수를 사용하여 표면의 모든 세분화 (오리엔테이션 가능 여부)를 인코딩 할 수 있습니다.

쿼드 에지 데이터 구조는 에지 삽입, 삭제, 축소, 확장 및 뒤집기와 같은 다른 일정 시간 작업과 함께 이러한 모든 기능에 대한 액세스를 제공하는 표면 그래프의 특히 편리한 표현입니다. 정점 또는면의 분할 또는 병합; 핸들 또는 크로스 캡 추가 또는 삭제.

즐기세요!


OmniGraffle을 사용했습니다.
Jeffε
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.