2P by neo 3달전 | favorite | 댓글 1개
  • GJK 알고리듬은 두 도형이 겹치는지 확인하는 방법
  • 도형 A와 도형 B가 겹치는지 확인하려면, 두 도형의 점 중 하나라도 겹치는지 확인하면 됨

Minkowski 차집합

  • 두 도형의 모든 점을 빼서 새로운 집합을 만듦.
  • 이 새로운 집합에 원점이 포함되면 두 도형이 겹친다는 의미임.
  • 이를 Minkowski 차집합이라 부름.

알고리듬의 기본 아이디어

  • A와 B의 Minkowski 차집합이 원점을 포함하는지 확인함.
  • 차집합이 원점을 포함하면 두 도형이 겹침.

알고리듬 단계

  1. 초기화: 임의의 방향 벡터 d를 설정하고, 첫 번째 점 p를 찾음.
  2. 점 찾기: dp의 내적을 계산하여 양수이면 계속 진행, 음수이면 종료.
  3. 새 점 추가: p에서 원점 방향으로 새로운 점을 찾음.
  4. 단순화: 첫 번째 두 점을 기준으로 새로운 점을 추가하여 단순화함.
  5. 원점 포함 여부 확인: 단순화된 도형이 원점을 포함하는지 확인함.
  6. 반복: 원점을 포함할 때까지 또는 포함하지 않는다는 증거를 찾을 때까지 반복함.

GN⁺의 의견

  • 흥미로운 점: GJK 알고리듬은 복잡한 문제를 간단한 수학적 변환으로 해결하는 좋은 예시임.
  • 도움이 되는 이유: 충돌 감지와 같은 실시간 그래픽스에서 매우 유용하게 사용됨.
  • 비판적 시각: 알고리듬의 구현이 복잡할 수 있으며, 정확한 이해가 필요함.
  • 관련 기술: 다른 충돌 감지 알고리듬으로는 SAT(Separating Axis Theorem) 등이 있음.
  • 고려 사항: GJK 알고리듬을 사용할 때는 도형의 복잡성과 계산 비용을 고려해야 함.
Hacker News 의견
  • GJK 알고리즘: 1990년대에 GJK 알고리즘을 이해하려고 1년간 고생했음. 충돌 감지와 가장 가까운 점 찾기에 유용함. 기본 개념은 이해하기 쉬움. 두 개의 볼록한 고체에서 시작하여 무작위 점을 선택하고, 각 점 사이의 거리를 개선하려고 시도함. 가장 가까운 점을 선택하고 반복함. 가장 가까운 점이 더 이상 꼭짓점이 아닐 때 "심플렉스" 개념이 필요함. 여러 가지 경우를 분석하는 것임. 물리 엔진에서는 객체가 면-면 접촉에 정착할 때 문제가 발생함. 이론적으로는 우아한 해결책이지만, 실제로는 어려운 수치 해석 문제임. 그래도 가장 빠른 접근법일 가능성이 높음. 일반적인 경우 O(log N), 이전 위치와 가까운 경우 O(1)임. 옥스퍼드의 고(故) 스티븐 카메론 교수가 GJK를 제대로 구현하는 데 많은 연구를 했음. 1990년대 후반 상업용 3D 래그돌 시스템 "Falling Bodies"에서 GJK를 사용했음.

  • GJK 설명 작성: GJK 충돌 감지 알고리즘에 대한 직관적인 설명을 찾을 수 없어서 직접 작성했음. 더 명확하고 효율적으로 만들 방법이 있으면 알려달라고 요청함. 고등학생의 수학 관련 설명이므로 적절한 양의 의심을 가지고 받아들여야 함.

  • GJK 알고리즘 비디오: 동일한 알고리즘에 대한 비디오 프레젠테이션 링크를 공유함. 비디오 링크

  • 기사 칭찬: 훌륭한 기사임. 매우 명확하고 흥미로움.

  • 볼록 최적화 비교: 두 볼록 집합 사이의 교차점을 확인하는 또 다른 방법은 두 점 사이의 차이의 노름을 최소화하는 볼록 최적화 문제를 해결하는 것임. 최적 값이 0이면 집합에 교차점이 있음. GJK 알고리즘과 볼록 최적화 방법의 비교를 보고 싶음. 어느 쪽이 더 나은지 확신할 수 없음.

  • 기사 칭찬 및 오해: 훌륭한 기사임. 다만, 첫 번째 이미지가 비볼록 형태의 교차점을 보여주고 있지만, 알고리즘은 볼록 형태에만 작동한다는 점이 나중에 밝혀짐.

  • GJK 알고리즘 처음 접함: GJK 알고리즘에 대해 처음 들어봄.

  • 관련 블로그 포스트: Minkowski 기하학과 관련된 블로그 포스트를 작성했음. 블로그 링크

  • 개인 웹사이트: 예상치 못하게 주목받고 있어서 개인 웹사이트가 농담으로 가득 차 있다는 점을 언급함. 연락을 원하면 답글로 알려달라고 요청함.

  • Minkowski 함수 사용: openSCAD에서 Minkowski 함수를 사용해왔는데, 그것이 실제로 무엇인지 알게 되어 기쁨.

  • 알고리즘 칭찬: 대단한 알고리즘임.