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

JavaFXの2D図形における交差(Intersect)操作の基本と実装方法

JavaFXでは、複数の2D図形を組み合わせて新しい形状を作り出す「ブール演算」が用意されています。その中でも交差(Intersect)操作は、2つ以上の図形を入力として受け取り、それらが重なり合う部分のみを抽出して返す操作です。

交差操作とは

下の図のように、交差操作を行うと、入力された各図形に共通する領域だけが結果として得られます。

JavaFXの2D図形における交差(Intersect)操作の基本と実装方法

この操作を実行するには、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);
   }
}

コードのポイント

  1. 中心座標と半径を指定して、3つのCircle(円)オブジェクトを作成します。
  2. まずShape.intersect(circle1, circle2)で円1と円2の共通領域を求めます。
  3. その結果に対してさらにShape.intersect(intersect, circle3)を適用することで、3つの円すべてが重なる領域を取得できます。
  4. 得られた形状にはsetFill()メソッドで塗りつぶし色を設定し、元の図形と一緒にGroupへ追加して画面に表示します。

実行結果

プログラムを実行すると、次のように3つの円が重なる中央部分が赤く表示されます。

JavaFXの2D図形における交差(Intersect)操作の基本と実装方法

このようにintersect()メソッドを使えば、複雑な図形の重なり判定や合成形状の作成を簡単に実現できます。同様のブール演算としては、図形を結合するunion()や、一方から他方を取り除くsubtract()なども用意されているので、用途に応じて使い分けるとよいでしょう。

  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アプリケーションにおける最上位のコンテナとして機能します。 ノード