저는 정점 목록과 사각형 목록 인 정사각형/직사각형 목록을 가지고 있습니다. 정점에는 x와 y 좌표가 있고 영역에는 (x, y, 높이와 너비)가 있습니다. 모든 정점/영역에 대해 어느 정점이 어느 정점에 있는지를 효율적으로 확인할 수있는 방법은 무엇입니까?포인트 배열이 사각형 배열 안에 있는지 확인하십시오.
편집 :
이것은 내가 작성한 코드입니다.
if (!g.getVertices().isEmpty()) {
for (int i = 0; i < g.getVertices().size(); i++) {
Vertex v = g.getVertices().get(i);
Point vertexPoint = new Point(v.getX(), v.getY());
for (int j = 0; j < g.getNumberOfRegions(); j++) {
int x = g.getRegions().get(j).getX();
int y = g.getRegions().get(j).getY();
int height = g.getRegions().get(j).getHeight();
int width = g.getRegions().get(j).getWidth();
Grid regionGrid = new Grid(j+1, x, y, height, width);
Rectangle regionRectangle = new Rectangle(x, y, height, width);
if (regionRectangle.contains(vertexPoint)) {
System.out.println("Vertex " + v + " lies inside region " + regionGrid.getRegionID());
}
}
}
}
편집 2 : 나는 영역을 생성하기 위해 사용,하지만 난 왼쪽에서 오른쪽으로 그리드 regionID에서 각 지역을 할당하는 방법이 필요합니다. 예 :
1 - 2 - 3
4 - 5 - 6
7 - 8 - 9
(3x3 격자) 순간 그 형식은 다음과 같습니다 JTS를 사용하는 동안 평면 구조 작업
이1 - 1 - 1
2 - 2 - 2
3 - 3 - 3
for (int i = 0; i < rowValue; i++) {
for (int j = 0; j < columnValue; j++) {
Grid r = new Grid(0, 20 + i * size, 20 + j * size, size, size);
r.setRegionID(j + 1);
g.addRegion(r);
}
}
. 당신이 할 수있는 개선 사항을 볼 수 있습니까? – RikudouSennin
get (x)가 O (1)에서 작동하면 알고리즘이 O (#vertices * #regions)에서 작동합니다. 결과적으로 쌍 목록 (정점, 영역)이 필요한 경우 O (#vertices * #regions) 쌍이있을 수 있으므로 알고리즘이 최적화됩니다. 예를 들어 결과가 더 작아 질 수 있다면 각 꼭지점에 대해 최대 1 개의 영역을 사용하면 빠른 알고리즘이 가능합니다. – piotrek