2つのオブジェクトに共通するRectangle2Dオブジェクトを作成する

広告

Rectangle2D.Doubleクラスのオブジェクトが2つあった場合に、両方のオブジェクトに共通して含まれる最大のRectangle2D.Doubleクラスのオブジェクトを取得する方法を確認します。

Rectangle2D.Doubleクラスで用意されている「createIntersection」メソッドを使います。

この Rectangle2D と指定された Rectangle2D の共通部分を表す新しい
Rectangle2D オブジェクトを返します。

パラメータ:
  r - この Rectangle と重なり合う Rectangle2D 
戻り値:
  指定された Rectangle2D と この Rectangle2D の両方に含まれる 最大の
    Rectangle2D

1番目の引数に指定したRectangle2Dクラスのオブジェクトと、このメソッドを実行するRectangle2Dクラスのオブジェクトの両方に共通して含まれる新しいRectangle2Dクラスのオブジェクトを戻り値として取得します。

具体的には次のように記述します。

Rectangle2D.Double rec1 = new Rectangle2D.Double(10.0d, 10.0d, 12.0d, 8.0d);
Rectangle2D.Double rec2 = new Rectangle2D.Double(15.0d, 12.0d, 20.0d, 7.0d);
Rectangle2D.Double recNew = (Rectangle2D.Double)rec2.createIntersection(rec1);

サンプルプログラム

簡単なサンプルを一度試してみます。

Rectangle2DTest4.java

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.*;
import java.awt.Color;

public class Rectangle2DTest4 extends JPanel{
  public static void main(String[] args){
    JFrame frame = new JFrame();

    Rectangle2DTest4 app = new Rectangle2DTest4();
    frame.getContentPane().add(app);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  public void paintComponent(Graphics g){
    Graphics2D g2 = (Graphics2D)g;

    Rectangle2D.Double rec1
      = new Rectangle2D.Double(10.0d, 10.0d, 120.0d, 80.0d);

    Rectangle2D.Double rec2
      = new Rectangle2D.Double(50.0d, 40.0d, 180.0d, 70.0d);

    Rectangle2D.Double recNew
       = (Rectangle2D.Double)rec2.createIntersection(rec1);

    g2.setPaint(Color.PINK);
    g2.fill(recNew);

    g2.setPaint(Color.BLUE);
    g2.draw(rec1);
    g2.draw(rec2);
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

2つのオブジェクトに共通する新しいオブジェクトを作成

( Written by Tatsuo Ikura )