JavaFX 2D 객체 연산이란?
JavaFX는 2D 객체에 대해 세 가지 기본 연산을 지원합니다. 바로 합집합(Union), 교집합(Intersection), 차집합(Subtraction)입니다. 이 연산들은 모두 javafx.scene.shape.Shape 클래스가 제공하는 정적(static) 메서드를 통해 수행되며, 연산 결과는 새로운 Shape 객체로 반환됩니다.
합집합(Union) 연산 − 두 개 이상의 도형을 입력으로 받아, 해당 도형들이 차지하는 전체 영역을 하나의 도형으로 반환합니다.
교집합(Intersection) 연산 − 두 개 이상의 도형을 입력으로 받아, 도형들이 서로 겹쳐지는 공통 영역만 반환합니다.
차집합(Subtraction) 연산 − 두 개 이상의 도형을 입력으로 받아, 첫 번째 도형에서 두 번째 도형과 겹치는 부분을 제외한 나머지 영역을 반환합니다.
예제 코드
아래 예제에서는 세 쌍의 원을 만든 뒤, 각각 합집합·교집합·차집합 연산을 적용하고 그 결과를 화면에 표시합니다.
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;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
public class JavaFXOperations extends Application {
public void start(Stage stage) {
Font font = Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 12);
// 합집합 연산용 원 두 개 생성
Circle shape1 = new Circle(65.0f, 135.0f, 50.0f);
Circle shape2 = new Circle(130.0f, 135.0f, 50.0f);
// 합집합 연산 수행
Shape union = Shape.union(shape1, shape2);
union.setFill(Color.RED);
Text label1 = new Text("Union Operation");
label1.setFont(font);
label1.setX(40);
label1.setY(230);
// 교집합 연산용 원 두 개 생성
Circle shape3 = new Circle(250.0f, 135.0f, 50.0f);
Circle shape4 = new Circle(325.0f, 135.0f, 50.0f);
// 교집합 연산 수행
Shape intersect = Shape.intersect(shape3, shape4);
intersect.setFill(Color.RED);
Text label2 = new Text("Intersect Operation");
label2.setFont(font);
label2.setX(225);
label2.setY(230);
// 차집합 연산용 원 두 개 생성
Circle shape5 = new Circle(445.0f, 135.0f, 50.0f);
Circle shape6 = new Circle(510.0f, 135.0f, 50.0f);
// 차집합 연산 수행
Shape subtract = Shape.subtract(shape5, shape6);
subtract.setFill(Color.RED);
Text label3 = new Text("Subtract Operation");
label3.setFont(font);
label3.setX(420);
label3.setY(230);
// 스테이지 설정
Group root = new Group(
shape1, shape2, shape3, shape4, shape5, shape6,
union, intersect, subtract, label1, label2, label3
);
Scene scene = new Scene(root, 600, 300);
stage.setTitle("2D Operations Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
실행 결과
프로그램을 실행하면 왼쪽부터 차례대로 합집합, 교집합, 차집합 연산의 결과가 빨간색 도형으로 표시됩니다. 합집합에서는 두 원이 하나로 합쳐진 형태가, 교집합에서는 두 원이 겹치는 렌즈 모양의 영역이, 차집합에서는 한쪽이 잘려나간 초승달 모양의 영역이 각각 나타납니다.
