Area 클래스

Area 클래스

Area 객체는 2차원 공간의 닫힌 영역에 대한 해상도 독립적인 설명을 저장하고 조작해요. Area 객체는 변환할 수 있고 다른 Area 객체와 결합할 때 다양한 Constructive Area Geometry(CAG) 연산을 수행할 수 있어요.

출처: Java API Reference

본문

CAG 연산에는 영역 덧셈(합집합), 뺄셈(차집합), 교집합, 배타적 OR(XOR)이 포함돼요.

public class Area
extends Object
implements Shape, Cloneable

Area 클래스는 Shape 인터페이스를 구현하고 모든 히트 테스트·패스 반복 기능을 완전 지원하지만, 일반화된 경로보다 여러 면에서 더 구체적이에요.

  • 닫힌 경로와 하위 경로만 저장돼요. 열린 경로로 만든 AreaGraphics2D.fill 메서드로 채운 것처럼 구성 중에 암묵적으로 닫혀요.
  • 저장된 개별 하위 경로의 내부는 전부 비어 있지 않고 겹치지 않아요. 경로는 구성 중에 겹치지 않는 별도 구성 요소 부분으로 분해되고, 빈 조각은 버려지며, 이후 모든 CAG 연산에서 이 비어있지 않고 겹치지 않는 특성이 유지돼요.
  • 서로 다른 구성 요소 하위 경로의 윤곽선은 닫힌 영역이 겹치지 않도록 교차하지 않는 한 서로 닿을 수 있어요.

주의해야 할 점

  • 열린(open) ShapeArea를 만들면 Area 객체에 닫힌 윤곽선이 생겨요.
  • 영역을 둘러싸지 않는 Shape("닫힌" 경우라도)로 만들면 빈 Area가 돼요. 예를 들어 선(line)으로 Area를 만들면 비어요. 빈 AreaPathIterator 객체에서 기하 정보를 반복하지 않아요.
  • 자기 교차하는 Shape는 원래 경로의 교차하지 않는 부분 각각을 둘러싸는 둘(또는 그 이상)의 하위 경로로 분할될 수 있어요.
  • 원래 윤곽선이 단순하고 명확해도, 같은 기하 구조를 설명하는 데 더 많은 경로 세그먼트가 필요할 수 있어요. Area 클래스가 경로에 수행하는 분석은 사람이 인식하는 "단순하고 명확함"과 다를 수 있어요.

주요 메서드

  • add(Area rhs) — 합집합. 두 영역을 합쳐요.
  • subtract(Area rhs) — 차집합. rhs를 뺀 나머지 영역을 만들어요.
  • intersect(Area rhs) — 교집합. 두 영역의 공통 부분을 만들어요.
  • exclusiveOr(Area rhs) — 대칭차집합. 둘 중 하나에만 속한 영역을 만들어요.
  • contains(...) / intersects(...) — 히트 테스트.
  • getPathIterator(AffineTransform) — 경로 반복자.
  • getBounds2D() — 경계 사각형.
  • createTransformedArea(AffineTransform) — 변환된 Area를 만들어요.
  • equals(Area) / isEmpty() — 비교.

사용 예

복잡한 도형을 겹쳐서 합치거나 빼는 충돌 감지·클리핑 영역 계산에 유용해요. 예를 들어 두 다각형의 합집합 영역이나 교집합 영역을 구할 수 있어요.

더 알아보기