Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaFXで2D図形にUnion(和集合)操作を行う方法

Union(ユニオン/和集合)操作とは、2つ以上の図形を入力として受け取り、それらが占有する領域をすべて結合した1つの図形として返す処理です。複数の図形が重なり合っている場合でも、全体をひとつの形状として扱えるようになるため、カスタム図形を作成する際に非常に便利です。

JavaFXで2D図形にUnion(和集合)操作を行う方法

union()メソッドの基本

javafx.scene.shape.Shapeクラスには静的メソッドunion()が用意されています。このメソッドは2つのShapeオブジェクトを引数として受け取り、その和集合の結果を新しいShapeオブジェクトとして返します。3つ以上の図形を結合したい場合は、戻り値に対してさらにunion()を呼び出すことで順次合成できます。

サンプルコード

以下の例では、3つの円を作成し、それらをUnion操作で結合して1つの図形として表示しています。

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 JavaFXUnionExample extends Application {
    public void start(Stage stage) {
        // 円1を描画
        Circle circle1 = new Circle();
        circle1.setCenterX(230.0f);
        circle1.setCenterY(100.0f);
        circle1.setRadius(75.0f);
        circle1.setFill(Color.DARKRED);
        // 円2を描画
        Circle circle2 = new Circle();
        circle2.setCenterX(280.0f);
        circle2.setCenterY(170.0f);
        circle2.setRadius(75.0f);
        circle2.setFill(Color.DARKRED);
        // 円3を描画
        Circle circle3 = new Circle();
        circle3.setCenterX(330.0f);
        circle3.setCenterY(100.0f);
        circle3.setRadius(75.0f);
        circle3.setFill(Color.DARKRED);
        // Union操作を実行
        Shape union = Shape.union(circle1, circle2);
        union = Shape.union(union, circle3);
        union.setFill(Color.RED);
        // ステージの設定
        Group root = new Group(circle1, circle2, circle3, union);
        Scene scene = new Scene(root, 595, 300);
        stage.setTitle("Union Operation");
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String args[]){
        launch(args);
    }
}

実行結果

このプログラムを実行すると、3つの円が結合された形状が赤色で表示されます。重なった部分も含めて、すべての領域がひとつの連続した図形として描画されることが確認できます。

JavaFXで2D図形にUnion(和集合)操作を行う方法

なお、JavaFXにはUnion以外にも、intersect()(積集合:共通部分のみを抽出)、subtract()(差集合:一方から他方を切り抜き)といったブール演算系のメソッドがShapeクラスに用意されています。これらを組み合わせることで、基本的な図形から複雑な形状を自由に構築できます。

  1. JavaFXアプリケーションの基本構造を解説!Stage・Scene・Nodesの役割と関係

    一般的に、JavaFXアプリケーションは「Stage(ステージ)」「Scene(シーン)」「Nodes(ノード)」という3つの主要コンポーネントで構成されています。以下の図のように、それぞれが階層的に連携することでアプリケーションの画面が実現されます。Stage(ステージ)とはStageはウィンドウそのものを指し、JavaFXアプリケーションのすべてのオブジェクトを格納する最上位のコンテナです。Stageはパッケージjavafx.stageのStageクラスによって表現されます。なお、Stageの内容を画面に表示するには、show()メソッドを呼び出す必要があります。Scene Graph(シ

  2. JavaFXのシーングラフとは?基本構造とノードの役割を解説

    JavaFXにおけるシーングラフとは JavaFXでは、GUIアプリケーションは「シーングラフ(Scene Graph)」と呼ばれるデータ構造を用いて構築されます。シーングラフは、モダンなグラフィカルアプリケーションで広く採用されている、ツリー構造に似たデータ構造です。アプリケーションの起点となるものであり、複数のノード(Node)の集合体として表現されます。 JavaFXで何かを画面に表示するには、ノードを使ってシーングラフを構築し、それをStageクラスのオブジェクトに設定する必要があります。Stageクラスは、JavaFXアプリケーションにおける最上位のコンテナとして機能します。 ノード