多角形を描く

広告

次は複数の点の配列を用意し、最初の点を最後の点と直線で結ぶことで多角形を描画するメソッドを見てみます。GraphicsクラスのdrawPolygonメソッドを使います。

x 座標と y 座標の配列で定義された閉じた多角形を描きます。座標 (x, y)の各
ペアは点を定義します。

このメソッドは、nPoint ラインセグメントによって定義される多角形を描きま
す。最後の点と最初の点が一致しない場合、それらを接続するラインを描画すれ
ば図は自動的に閉じます。

  パラメータ:
    xPoints - x 座標の配列
    yPoints - y 座標の配列
    nPoints - 点の総数

例えば4つの点を引数に指定した場合、1番目の点から2番目の点へまず直線が引かれ、次に2番目の点から3番目の点へ、最後に3番目の点から4番目の点へと直線が引かれていきます。そして最後に1番目の点と4番目の点を直線で結ぶことで閉じた図形を描くことが出来ます。

例えば下記のように使います。

public void paint(Graphics g){
  int xPoints[] = {10, 50, 20, 120};
  int yPoints[] = {80, 50, 20, 90};

  g.drawPolygon(xPoints, yPoints, 4);
}

サンプルプログラム

では実際に試してみます。

GraphicsTest9.java

import java.applet.Applet;
import java.awt.Graphics;

/*
<applet code="GraphicsTest9.class" width="150" height="150">
</applet>
*/

public class GraphicsTest9 extends Applet{
  public void paint(Graphics g){
    int xPoints[] = {10, 90, 75, 20};
    int yPoints[] = {20, 25, 100, 90};

    g.drawPolygon(xPoints, yPoints, 4);
  }
}

実際にブラウザで見てみた結果は下記の通りです。

多角形の描画

下記で実際に試して頂くことができます。

GraphicsTest9.html

内部を塗りつぶした多角形

先ほどは枠線だけでしたが、内部を外枠と同じ色で塗りつぶした多角形を描く事も出来ます。fillPolygonメソッドを使います。

x 座標と y 座標の配列で定義される閉じた多角形を塗りつぶします。

このメソッドは、nPoint ラインセグメントによって定義される多角形を描きま
す。最後の点と最初の点が一致しない場合、それらを接続するラインを描画す
れば図は自動的に閉じます。 

多角形内の領域は、偶奇塗りつぶし規則 (交互規則ともいう) を使って定義され
ます。

パラメータ:
  xPoints - x 座標の配列
  yPoints - y 座標の配列
  nPoints - 点の総数

基本的な使い方はdrawPolygonメソッドと同じで、多角形の内部が枠線と同じ色で塗りつぶされる点だけが異なります。塗りつぶされる領域は、例えば線が交差して複数の領域に分かれるような多角形の場合、閉じた部分だけが塗りつぶされます。

サンプルプログラム

では実際に試してみます。

GraphicsTest10.java

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

/*
<applet code="GraphicsTest10.class" width="150" height="150">
</applet>
*/

public class GraphicsTest10 extends Applet{
  public void paint(Graphics g){
    int xPoints[] = {10, 90, 75, 20};
    int yPoints[] = {20, 100, 25, 90};

    g.fillPolygon(xPoints, yPoints, 4);

    g.setColor(Color.blue);

    int xPoints2[] = {120, 140, 90};
    int yPoints2[] = {20, 70, 30};

    g.fillPolygon(xPoints2, yPoints2, 3);
  }
}

実際にブラウザで見てみた結果は下記の通りです。

多角形の描画

下記で実際に試して頂くことができます。

GraphicsTest10.html

( Written by Tatsuo Ikura )