JavaFXの2D図形における交差(Intersect)操作の基本と実装方法
JavaFXでは、複数の2D図形を組み合わせて新しい形状を作り出す「ブール演算」が用意されています。その中でも交差(Intersect)操作は、2つ以上の図形を入力として受け取り、それらが重なり合う部分のみを抽出して返す操作です。
交差操作とは
下の図のように、交差操作を行うと、入力された各図形に共通する領域だけが結果として得られます。

この操作を実行するには、javafx.scene.shape.Shapeクラスが提供する静的メソッドintersect()を使用します。このメソッドは、2つのShapeオブジェクトを引数として受け取り、それらの交差操作の結果を新しいShapeオブジェクトとして返します。
メソッドのシグネチャ
public static Shape intersect(Shape shape1, Shape shape2)
- shape1:最初の図形(Shapeオブジェクト)
- shape2:2番目の図形(Shapeオブジェクト)
- 戻り値:両者の重なり部分を表す新しいShapeオブジェクト
実装例
ここでは、3つの円を作成し、そのうち2つの円の交差結果に対してさらに3つ目の円との交差を求める例を紹介します。最終的に得られるのは、3つの円すべてが重なる中央の領域です。
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 JavaFXIntersectExample 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);
// 交差操作を実行
Shape intersect = Shape.intersect(circle1, circle2);
intersect = Shape.intersect(intersect, circle3);
intersect.setFill(Color.RED);
// ステージの設定
Group root = new Group(circle1, circle2, circle3, intersect);
Scene scene = new Scene(root, 595, 300);
stage.setTitle("Intersect Operation");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}コードのポイント
- 中心座標と半径を指定して、3つのCircle(円)オブジェクトを作成します。
- まずShape.intersect(circle1, circle2)で円1と円2の共通領域を求めます。
- その結果に対してさらにShape.intersect(intersect, circle3)を適用することで、3つの円すべてが重なる領域を取得できます。
- 得られた形状にはsetFill()メソッドで塗りつぶし色を設定し、元の図形と一緒にGroupへ追加して画面に表示します。
実行結果
プログラムを実行すると、次のように3つの円が重なる中央部分が赤く表示されます。

このようにintersect()メソッドを使えば、複雑な図形の重なり判定や合成形状の作成を簡単に実現できます。同様のブール演算としては、図形を結合するunion()や、一方から他方を取り除くsubtract()なども用意されているので、用途に応じて使い分けるとよいでしょう。
-
JavaFXアプリケーションの基本構造を解説!Stage・Scene・Nodesの役割と関係
一般的に、JavaFXアプリケーションは「Stage(ステージ)」「Scene(シーン)」「Nodes(ノード)」という3つの主要コンポーネントで構成されています。以下の図のように、それぞれが階層的に連携することでアプリケーションの画面が実現されます。Stage(ステージ)とはStageはウィンドウそのものを指し、JavaFXアプリケーションのすべてのオブジェクトを格納する最上位のコンテナです。Stageはパッケージjavafx.stageのStageクラスによって表現されます。なお、Stageの内容を画面に表示するには、show()メソッドを呼び出す必要があります。Scene Graph(シ
-
JavaFXのシーングラフとは?基本構造とノードの役割を解説
JavaFXにおけるシーングラフとは JavaFXでは、GUIアプリケーションは「シーングラフ(Scene Graph)」と呼ばれるデータ構造を用いて構築されます。シーングラフは、モダンなグラフィカルアプリケーションで広く採用されている、ツリー構造に似たデータ構造です。アプリケーションの起点となるものであり、複数のノード(Node)の集合体として表現されます。 JavaFXで何かを画面に表示するには、ノードを使ってシーングラフを構築し、それをStageクラスのオブジェクトに設定する必要があります。Stageクラスは、JavaFXアプリケーションにおける最上位のコンテナとして機能します。 ノード