Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

JavaFX 2D 도형 빼기(Subtract) 연산 완벽 가이드

JavaFX에서 빼기(Subtract) 연산은 두 개 이상의 도형을 입력으로 받아, 첫 번째 도형의 영역 중 두 번째 도형과 겹치는 부분을 제외한 나머지 영역을 결과로 반환하는 연산입니다.

JavaFX 2D 도형 빼기(Subtract) 연산 완벽 가이드

Shape.subtract() 메서드란?

javafx.scene.shape.Shape 클래스가 제공하는 정적(static) 메서드인 subtract()는 두 개의 Shape 객체를 매개변수로 받아, 첫 번째 도형에서 두 번째 도형이 차지하는 영역을 뺀 결과를 새로운 Shape 객체로 반환합니다.

예를 들어 원 A에서 원 B를 빼면, 두 원이 겹치는 부분이 제거된 초승달 모양의 도형이 만들어집니다. 이는 벤 다이어그램에서 집합의 차집합(A - B)을 표현하는 것과 같은 개념입니다.

주요 특징

  • 정적 메서드이므로 객체 생성 없이 Shape.subtract(shape1, shape2) 형태로 바로 호출할 수 있습니다.
  • 결과로 반환되는 Shape는 일반 도형처럼 채우기(fill), 테두리(stroke) 등의 속성을 자유롭게 설정할 수 있습니다.
  • 유사한 연산으로 교집합을 구하는 intersect(), 합집합을 구하는 union() 메서드도 함께 제공됩니다.

예제 코드

아래 예제에서는 세 개의 원을 그린 뒤, 빼기 연산과 교집합 연산을 조합하여 새로운 도형을 만들어 화면에 출력합니다.

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Shape;

public class JavaFXSubtractExample extends Application {
    public void start(Stage stage) {
        // 첫 번째 원 그리기
        Circle circle1 = new Circle();
        circle1.setCenterX(230.0f);
        circle1.setCenterY(100.0f);
        circle1.setRadius(75.0f);
        circle1.setFill(Color.DARKRED);

        // 두 번째 원 그리기
        Circle circle2 = new Circle();
        circle2.setCenterX(280.0f);
        circle2.setCenterY(170.0f);
        circle2.setRadius(75.0f);
        circle2.setFill(Color.DARKRED);

        // 세 번째 원 그리기
        Circle circle3 = new Circle();
        circle3.setCenterX(330.0f);
        circle3.setCenterY(100.0f);
        circle3.setRadius(75.0f);
        circle3.setFill(Color.DARKRED);

        // 빼기 연산: circle1에서 circle2 영역 제외
        Shape subtract = Shape.subtract(circle1, circle2);
        // 교집합 연산: 위 결과와 circle3의 겹치는 부분만 추출
        subtract = Shape.intersect(subtract, circle3);
        subtract.setFill(Color.RED);

        // 스테이지 설정
        Group root = new Group(circle1, circle2, circle3, subtract);
        Scene scene = new Scene(root, 595, 300);
        stage.setTitle("Subtract Operation");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String args[]) {
        launch(args);
    }
}

코드 설명

  1. 원 3개 생성: 중심 좌표와 반지름이 서로 다른 세 개의 원(circle1, circle2, circle3)을 생성하고 진한 붉은색(DARKRED)으로 채웁니다.
  2. 빼기 연산: Shape.subtract(circle1, circle2)를 호출하여 첫 번째 원에서 두 번째 원과 겹치는 영역을 제거합니다.
  3. 교집합 연산: 빼기 연산의 결과에 Shape.intersect()를 적용해 세 번째 원과 겹치는 부분만 남깁니다.
  4. 색상 지정: 최종 결과 도형을 빨간색(RED)으로 채워 원본 도형과 시각적으로 구분합니다.
  5. 화면 출력: Group에 모든 도형을 담아 Scene을 구성하고, Stage에 설정한 후 화면에 표시합니다.

실행 결과

프로그램을 실행하면 아래와 같이 세 개의 원이 배치되고, 빼기 연산과 교집합 연산이 적용된 최종 도형이 빨간색으로 표시되는 것을 확인할 수 있습니다.

JavaFX 2D 도형 빼기(Subtract) 연산 완벽 가이드

마무리

JavaFX의 빼기 연산은 여러 도형을 조합해 복잡한 커스텀 도형을 만들 때 매우 유용합니다. union()(합집합), intersect()(교집합), subtract()(차집합) 세 가지 불리언 연산을 적절히 조합하면 기본 도형만으로도 다양한 그래픽 요소를 손쉽게 구현할 수 있습니다.