Javaアプレットによる2Dグラフィックサンプル 図形の合成

Javaグラフィックサンプル(アプレット版):図形合成に関する図形描画サンプルです。2つの図形から論理和、論理積、差、はいた論理和をとって図形の合成を行うサンプルです。



図形の合成

このページには、以下のサンプルを掲載しています。 下の項目をクリックをすると各サンプルにジャンプします。 ※2週間以内の新着記事はNewアイコン、更新記事はUpアイコンが表示されます。
  1. 図形の切り抜き ( BooleanSample01.java )  
  2. 図形の合成(論理和) ( BooleanSample02.java )  
  3. 図形の合成(論理積)( BooleanSample03.java )  
  4. 図形の合成(排他的論理和)( BooleanSample04.java )  

■図形の切り抜き

[ サンプルプログラムのソースコード - BooleanSample01.java - ]
  1. package sample.applet;
  2. import javax.swing.JApplet;
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.geom.Area;
  7. import java.awt.geom.Ellipse2D;
  8. public class BooleanSample01 extends JApplet {
  9.   public void paint(Graphics g){
  10.     Graphics2D g2 = (Graphics2D)g;
  11.     Ellipse2D e1 = new Ellipse2D.Double(10,10,100,100);
  12.     Ellipse2D e2 = new Ellipse2D.Double(15,15,100,100);
  13.     Area a1 = new Area(e1);
  14.     Area a2 = new Area(e2);
  15.     a2.subtract(a1);
  16.     g2.setColor(Color.YELLOW);
  17.     g2.fill(a2);
  18.     g2.setColor(Color.BLACK);
  19.     g2.draw(a2);
  20.   }
  21. }
[ サンプルプログラムの実行結果 ]

[ サンプルプログラムの解説 ]
14行目で定義した円「e2」の領域から13行目で定義した円「e1」の領域の部分を切り取っています。 15、16行目で円「e1」と「e2」の領域定義を行い、17行目で円「e2」の領域を定義したオブジェクト「a2」から subtractメソッドを使って円「e1」の領域を定義したオブジェクト「a1]を切り取っています。 図示すると下記のような感じです。




■図形の合成(論理和)

[ サンプルプログラムのソースコード - BooleanSample02.java - ]
  1. package sample.applet;
  2. import javax.swing.JApplet;
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.geom.Area;
  7. import java.awt.geom.Ellipse2D;
  8. public class BooleanSample02 extends JApplet {
  9.   public void paint(Graphics g){
  10.     Graphics2D g2 = (Graphics2D)g;
  11.     Ellipse2D e1 = new Ellipse2D.Double(40,10,100,100);
  12.     Ellipse2D e2 = new Ellipse2D.Double(10,40,160,40);
  13.     Area a1 = new Area(e1);
  14.     Area a2 = new Area(e2);
  15.     a2.add(a1);
  16.     g2.setColor(Color.MAGENTA);
  17.     g2.fill(a2);
  18.     g2.setColor(Color.BLACK);
  19.     g2.draw(a2);
  20.   }
  21. }
[ サンプルプログラムの実行結果 ]

[ サンプルプログラムの解説 ]
13行目で定義した円「e1」の領域と14行目で定義した楕円「e2」の領域を合わせた領域が表示されます。 15、16行目で円「e1」と「e2」の領域定義を行い、17行目で円「e1」の領域を定義したオブジェクト「a1」に addメソッドを使って楕円「e2」の領域を定義したオブジェクト「a2]を加えています。 図示すると下記のような感じです。




■図形の合成(論理積)

[ サンプルプログラムのソースコード - BooleanSample03.java - ]
  1. package sample.applet;
  2. import javax.swing.JApplet;
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.geom.Area;
  7. import java.awt.geom.Ellipse2D;
  8. public class BooleanSample03 extends JApplet {
  9.   public void paint(Graphics g){
  10.     Graphics2D g2 = (Graphics2D)g;
  11.     Ellipse2D e1 = new Ellipse2D.Double(-80,-30,200,200);
  12.     Ellipse2D e2 = new Ellipse2D.Double(80,-30,200,200);
  13.     Area a1 = new Area(e1);
  14.     Area a2 = new Area(e2);
  15.     a2.intersect(a1);
  16.     g2.setColor(Color.CYAN);
  17.     g2.fill(a2);
  18.     g2.setColor(Color.BLACK);
  19.     g2.draw(a2);
  20.   }
  21. }
[ サンプルプログラムの実行結果 ]

[ サンプルプログラムの解説 ]
13行目で定義した円「e1」の領域と14行目で定義した円「e2」の領域を合わせた領域のうち共通の部分のみ表示されます。 15、16行目で円「e1」と「e2」の領域定義を行い、17行目で円「e1」の領域を定義したオブジェクト「a1」と 円「e2」の領域を定義したオブジェクト「a2]との共通部分をintersectメソッドでオブジェクト「a1」の新たな領域とします。 図示すると下記のような感じです。




■図形の合成(排他的論理和)

[ サンプルプログラムのソースコード - BooleanSample04.java - ]
  1. package sample.applet;
  2. import javax.swing.JApplet;
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.geom.Area;
  7. import java.awt.geom.Ellipse2D;
  8. public class BooleanSample04 extends JApplet {
  9.   public void paint(Graphics g){
  10.     Graphics2D g2 = (Graphics2D)g;
  11.     Ellipse2D e1 = new Ellipse2D.Double(10,10,100,100);
  12.     Ellipse2D e2 = new Ellipse2D.Double(80,10,100,100);
  13.     Area a1 = new Area(e1);
  14.     Area a2 = new Area(e2);
  15.     a2.exclusiveOr(a1);
  16.     g2.setColor(Color.ORANGE);
  17.     g2.fill(a2);
  18.     g2.setColor(Color.BLACK);
  19.     g2.draw(a2);
  20.   }
  21. }
[ サンプルプログラムの実行結果 ]

[ サンプルプログラムの解説 ]
13行目で定義した円「e1」の領域と14行目で定義した円「e2」の領域を合わせた領域のうち共通以外の部分が表示されます。 15、16行目で円「e1」と「e2」の領域定義を行い、17行目で円「e1」の領域を定義したオブジェクト「a1」と 円「e2」の領域を定義したオブジェクト「a2]との共通部分以外の領域をexclusiveOrメソッドでオブジェクト「a1」の新たな領域とします。 図示すると下記のような感じです。






最終更新日:2019/02/13

2015-03-01からの訪問者数
  437 人