쿼드 트리가 내 게임에 이상적인 데이터 구조라고 들었지만, 쿼드 트리 내에서 정확히 모양이 작동하는 방식을 이해하는 데 어려움이 있습니다.
JavaScript 로이 작업을 수행하고 있지만이 질문이 모든 언어의 쿼드 트리에 적용될 수 있다고 생각합니다.
나는 기본 (x, y) 포인트 와 포인트 삽입 이 쿼드 트리에서 어떻게 작동하는지 이해 하고 종이에서 할 수 있다고 생각합니다.
다음은 포인트 실험에 대한 JSfiddle 입니다.
한 가지 경우를 제외하고 포인트가있는 테스트가 예상대로 작동합니다.
그러나 직사각형과 같은 모양이 관련되면 혼란이 시작됩니다. 도형이있는 쿼드 트리에서 검색 할 때 도형의 각 점과 어떤 노드에 속하는지 확인합니까? 그리고 각 도형에 (x, y, width, height) 매개 변수를 사용할 때 도형 삽입은 어떻게 작동합니까? 시작점의 너비 / 높이를 사용하여 다른 모퉁이 점을 계산 한 다음 적절한 노드에 분배합니까? 삽입 된 모양이 4 개의 노드에 걸쳐있는 경우 해당 모양의 데이터가 4 개의 모든 노드에 저장됩니까?
그리고 검색 방법이 모양을 매개 변수 (x, y, width, height)로 받아들이면 실제로 무슨 일이 일어나고 있습니까? 먼저 모양을 삽입 할 때 모양이 어떤 노드에 걸쳐 있는지 확인한 다음 해당 노드의 모든 객체를 검색합니까?
형태로 작업 하는 JSfiddle이 있지만 테스트 결과에 완전히 혼란 스럽습니다. 중복 객체가 반환됩니다!
예를 들어, 빨간색 사각형은 검색 방법에 입력하는 매개 변수와 동일하게 그려집니다. 이 빨간색 사각형이 네 노드 모두에 걸쳐 있으므로 쿼드 트리의 모든 개체를 반환해야한다고 생각합니다! 그러나 그것은 그렇지 않으며, 그것이 돌아 오는 것을 합리화하는 데 어려움을 겪고 있습니다. 현재 주석 처리 된 다른 여러 테스트가 있지만 주석을 풀고 실행하여 더 혼란스러운 결과를 볼 수 있습니다!
예를 들어 쿼드 트리의 모든 포인트를 반환하려면 어떻게해야합니까? 경계의 전체 크기를 사용하는 검색 방법? 예를 들어 retrieve (0, 0, canvas.width, canvas.height)?
내가 사용 하는 JavaScript QuadTree 라이브러리 는 다양한 다른 소스에서 참조되었으므로 실제 구현이 정확하고 유명하다고 가정합니다.
나는 많은 혼란이 쿼드 트리 용어에 대한 오해에서 비롯된 것이라고 생각합니다. 마찬가지로 "포인트"에 너비 / 높이 매개 변수가있는 경우 치수 대신 경계를 말하는 이유는 무엇입니까? 그것은 관습 / 속기의 문제입니까, 아니면 완전히 다른 개념입니까?
시간 내 줘서 고마워!
_stuckChildren
코드 의 필드에 대한 참조를 참조하십시오 . "경계가있는 항목 검색"샘플에서도이를 확인할 수 있습니다. 클릭 한 노드의 경계에 걸쳐있는 노드는 루트 노드까지 항상 빨간색으로 강조 표시됩니다.