2014-12-21 5 views
3

목표는 부울 값의 2D 모음을 나타내는 개체를 갖는 것입니다.사각형 영역 내에서 패턴을 표현하는 방법

Grid Problem

나는

객체가 w 경계 사각형 (새 크기 (H)와 위치 점 (x, y)에 그리드에 배치 (x, y)의 크기의 점 그리드를 , new Point (x, y))

목표는 객체를 bool [,]로 표현하는 것입니다. 여기서 배열 위치의 색인은 Rectangle bounds의 오프셋을 나타냅니다.

나는 이것을 약간 생각해 보았을 것입니다. 그래서 저는 매우 편리한 교차로 때문에 Rectangle을 사용했다고 설명 할 것입니다.

개체는 어떤 방향으로도 한 장치를 이동할 수 있지만 다른 개체가 이미 차지하고있는 위치로 이동할 수는 없습니다. 패턴이 중복의

Pattern p1 = new Pattern(Point location1, bool[,] pattern); 
Pattern p2 = new Pattern(Point location2, bool[,] pattern); 

if(p1.Intersects(p2)) 
    throw new ... 

나는 단지 관리 :

내가 좋아하는 뭔가를 할 최종 사용을하고 싶습니다. 패턴의 일반적인 크기와 모양을 변경할 수 있기를 바랍니다.

저는 전체 면적을 기준으로 특정 규칙을 사용하여 패턴을 재정의하는 방법을 생각하려고합니다.

이 문제를 해결하는 가장 좋은 방법에 대한 조언을 찾고 있습니다.

+0

아마도이 질문은 http://programmers.stackexchange.com에서 더 잘 맞을 것입니다. – InferOn

+0

문제가 시각적으로 표현되었거나 사각형 개념 만 사용하고 있습니까? – TaW

+1

그래서 사각형이 교차하면 모양 **이 교차 할 수 있습니다. Rectangle 방식은 더 자세히 검사해야하는지 빠르게 판단 할 수있는 좋은 방법입니다. 최종 결정을 내리려면 배열을 반복하고 그 안에있는 동일한 위치가 모두 true로 설정되어 있는지 확인해야합니다. 분명히 두 패턴의 크기가 서로 다른 "경계 사각형"인 경우 다른 모양의 행/열을 초과하지 않도록 명시 적으로 검사해야합니다. –

답변

1

트리 맵을 사용할 수 있습니다. 사각형을 정렬하고 첫 번째를 2 차원 트리에 넣습니다. 두 축에서 트리를 분할하고 그 다음 사각형을 맞 춥니 다. 린스하고 반복하십시오.

0

나는 간단한 포인트 목록으로 가기로 결정했습니다. 나는 그것이 너무 많이 생각할 때가되었을지도 모른다라고 느낀다. 각 객체에는 점 목록, 새로 추가 된 점이 기존 점의 이웃인지 여부를 확인하는 메소드 및 해당 점이 객체 소유인지 여부를 결정하는 메소드가 있습니다.

유사 중재자 패턴이며 루트 객체에는 많은 하위 객체 목록이 포함되어 있으며 하위 객체는 점의 가용성을 위해 루트 객체를 쿼리하고 루트 객체는 모든 하위 객체를 쿼리합니다.

이것은 SOLID/SRP를 유지하는 데 도움이되어야합니다.