직사각형 (x, y, 너비, 높이) 또는 점 목록 (x, y)으로 변환 할 수있는 실과 구절 집합이 있습니다. Room
및 Passage
은 모두 Pointable
인터페이스를 확장합니다.
나는 주어진 Point
가 속한 Pointable
를 식별해야 다음 getPoints() 메소드는
직사각형 기반 점 검색 최적화
public Set<Point> getPoints() {
Set<Point> array = new HashSet<Point>();
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
array.add(new Point(x + i, y + j));
}
}
return array;
}
문제점으로 객실 클래스에 구현됩니다. 방이 교차하지 않습니다. 원래는 HashMap<Point,Pointable>
을 사용하여 Point
을 Pointable
에 연결 시켰습니다. O (n) 시간에 신속하게 답변에 액세스 할 수있었습니다. 그러나 이제 수준 생성시 여러 번 HashMap
을 다시 계산해야합니다.
이 시점에서 (생성 및 액세스를 고려하여) HashMap을 사용하는 것이 더 효율적입니까? 아니면 2 차원 간격 트리 집합 같은 다른 방법을 사용해야합니까? 이때
[R-Tree] (http://en.wikipedia.org/wiki/R-tree)를 구현할 수 있습니다. – Obicere
R-Tree의 유일한 문제점은 긴 구절 때문인 것입니다. 긴 구절은 직사각형의 크기를 늘리고 효율성을 떨어 뜨립니다. – JohnAMeyer