|
|
Line2D クラスの使い方 |
H.Kamifuji . |
Line2Dクラスは直線の物体を表すクラスです。 ここでは、Line2D クラスについて、事例にて説明します。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2021/11)では、JDK-17.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 にアップされています。一部、上位互換について、見直しを行っていきます。 |
|
Line2Dクラスは直線を表すクラスです。 クラス図は次のようになっています。 java.lang.Object ⇒ java.awt.geom.Line2D public abstract class Line2D extends Object implements Shape, CloneableLine2Dクラスはabstractクラスとなっていますので実際に使用する場合はサブクラスであるLine2D.DoubleクラスとLine2D.Floatクラスを利用します。 Line2D.DoubleクラスLine2D.Doubleクラスは始点座標と終点座標の値としてdouble型の値を使用するクラスです。クラス図は次のようになっています。 java.lang.Object ⇒ java.awt.geom.Line2D ⇒ java.awt.geom.Line2D.Double public static class Line2D.Double extends Line2D implements Serializableコンストラクタは次の3つが用意されています。
1番目のコンストラクタは直線の始点として座標を(0, 0)、終点としての座標(0, 0)を指定した場合と同じです。それでは2番目のコンストラクタを確認してみます。 Line2D.Double public Line2D.Double(double x1, double y1, double x2, double y2)指定された座標から Line2D を構築および初期化します。 パラメータ: x1 - 始点の X 座標 y1 - 始点の Y 座標 x2 - 終点の X 座標 y2 - 終点の Y 座標 1番目と2番目の引数で始点の座標(x1, y1)を指定します。3番目と4番目の引数で終点の座標(x2, y2)を指定します。 具体的には次のように記述します。 Line2D.Double line = new Line2D.Double(5.0d, 5.0d, 10.0d, 8.0d);なお3番目のコンストラクタは始点及び終点の座標をPoint2Dクラスのオブジェクトとして指定した場合で基本的には2番目のコンストラクタと同じです。Point2Dクラスについては『Point2Dクラス』を参照して下さい。 Line2D.FloatクラスLine2D.Floatクラスは始点座標と終点座標の値としてfloat型の値を使用するクラスです。クラス図は次のようになっています。 java.lang.Object ⇒ java.awt.geom.Line2D ⇒ java.awt.geom.Line2D.Float public static class Line2D.Float extends Line2D implements Serializableコンストラクタは次の3つが用意されています。
1番目のコンストラクタは直線の始点として座標を(0, 0)、終点としての座標(0, 0)を指定した場合と同じです。それでは2番目のコンストラクタを確認してみます。 Line2D.Float public Line2D.Float(float x1, float y1, float x2, float y2)指定された座標から Line を構築および初期化します。 パラメータ: x1 - 始点の X 座標 y1 - 始点の Y 座標 x2 - 終点の X 座標 y2 - 終点の Y 座標 1番目と2番目の引数で始点の座標(x1, y1)を指定します。3番目と4番目の引数で終点の座標(x2, y2)を指定します。 具体的には次のように記述します。 Line2D.Float line = new Line2D.Float(5.0f, 5.0f, 10.0f, 8.0f);Line2D.DoubleクラスとLine2D.Floatクラスは内部に保持する値がdouble型かfloat型かの違いがあるだけですので次のページ以降では基本的にLine2D.Doubleクラスについて内容を確認していきます。 |
Line2D.Doubleクラスで始点座標と終点座標を設定するにはコンストラクタで指定する以外にオブジェクトを作成した後でメソッドを使って設定することが出来ます。Line2D.Doubleクラスで用意されている「setLine」メソッドを使います。setLine public void setLine(double x1, double y1, double x2, double y2)この Line2D の両方の終点の位置を、指定された double 座標に設定します。 パラメータ: x1 - 始点の X 座標 y1 - 始点の Y 座標 x2 - 終点の X 座標 y2 - 終点の Y 座標 1番目と2番目の引数で始点の座標(x1, y1)を指定します。3番目と4番目の引数で終点の座標(x2, y2)を指定します。 具体的には次のように記述します。 Line2D.Double line = new Line2D.Double(); line.setLine(10.0d, 10.0d, 12.0d, 8.0d); サンプルプログラム下記のサンプルを実行してみよう。/** * 始点座標と終点座標を設定する */ import java.awt.geom.Line2D; class Line2DTest1{ public static void main(String args[]){ Line2D.Double line = new Line2D.Double(); line.setLine(10.0d, 10.0d, 20.0d, 15.0d); System.out.println("始点(x, y)=(" + line.x1 + "," + line.y1 + ")"); System.out.println("終点(x, y)=(" + line.x2 + "," + line.y2 + ")"); } }上記をコンパイルした後で実行すると次のように表示されます。 [xxxxxx@ddddddddd Line2DTest]$ java Line2DTest1 始点(x, y)=(10.0,10.0) 終点(x, y)=(20.0,15.0) |
Line2D.Doubleクラスで始点座標と終点座標を取得するにはメソッドを使って取得する方法とフィールドの値を参照する方法があります。まずはメソッドで取得する方法を確認します。 始点座標を取得するにはLine2D.Doubleクラスで用意されている「getX1」メソッドと「getY1」メソッドを使います。また終点座標を取得するにはLine2D.Doubleクラスで用意されている「getX2」メソッドと「getY2」メソッドを使います。 getX1メソッド: getX1 public double getX1()始点の X 座標を倍精度で返します。 戻り値: この Line2D オブジェクトの始点の X 座標 getY1メソッド: getY1 public double getY1()始点の Y 座標を倍精度で返します。 戻り値: この Line2D オブジェクトの始点の Y 座標 getX2メソッド: getX2 public double getX2()終点の X 座標を倍精度で返します。 戻り値: この Line2D オブジェクトの終点の X 座標 getY2メソッド: getY2 public double getY2()終点の Y 座標を倍精度で返します。 戻り値: この Line2D オブジェクトの終点の Y 座標 「getX1」メソッドは戻り値としてオブジェクトに保存されている始点座標のX座標を表すdouble型の値を取得できます。「getY1」メソッドは戻り値としてオブジェクトに保存されている始点座標のY座標を表すdouble型の値を取得できます。「getX2」メソッド及び「getY2」メソッドも終点座標のX座標及びY座標を取得できます。 具体的には次のように記述します。 Line2D.Double line = new Line2D.Double(10.0d, 10.0d, 12.0d, 8.0d); double x1 = line.getX1(); double y1 = line.getY1(); double x2 = line.getX2(); double y2 = line.getY2();また始点座標及び終点座標をPoint2Dクラスのオブジェクトとして取得する事も出来ます。Line2D.Doubleクラスで用意されている「getP1」メソッドと「getP2」メソッドを使います。 getP1メソッド: getP1 public Point2D getP1()この Line2D の始点を表す Point2D を返します。 戻り値: この Line2D の始点を表す Point2D getP2メソッド: getP2 public Point2D getP2()この Line2D の終点を表す Point2D を返します。 戻り値: この Line2D の終点を表す Point2D 「getP1」メソッドは戻り値として始点座標を表すPoint2Dクラスのオブジェクトを取得できます。「getP2」メソッドは戻り値として終点座標を表すPoint2Dクラスのオブジェクトを取得できます。 具体的には次のように記述します。 Line2D.Double line = new Line2D.Double(10.0d, 10.0d, 12.0d, 8.0d); Point2D.Double p1 = (Point2D.Double)line.getP1(); Point2D.Double p2 = (Point2D.Double)line.getP2();※Point2Dクラスについては『Point2Dクラス』を参照して下さい。 フィールドを参照するLine2D.Doubleではフィールドとして「x1」「y1」「x2」「y2」と言う4つのdouble型の値を保持するフィールドを持っておりオブジェクトから直接参照することが出来ます。具体的には次のように記述します。 Line2D.Double line = new Line2D.Double(10.0d, 10.0d, 12.0d, 8.0d); double x1 = line.x1; double y1 = line.y1; double x2 = line.x2; double y2 = line.y2; サンプルプログラム下記のサンプルを実行してみよう。/** * 始点座標と終点座標を取得する */ import java.awt.geom.Line2D; class Line2DTest2{ public static void main(String args[]){ Line2D.Double line = new Line2D.Double(10.0d, 10.0d, 20.0d, 15.0d); double x1 = line.getX1(); double y1 = line.getY1(); double x2 = line.getX2(); double y2 = line.getY2(); System.out.println("始点(x, y)=(" + x1 + "," + y1 + ")"); System.out.println("終点(x, y)=(" + x2 + "," + y2 + ")"); } }上記をコンパイルした後で実行すると次のように表示されます。 [xxxxxx@ddddddddd Line2DTest]$ java Line2DTest1 始点(x, y)=(10.0,10.0) 終点(x, y)=(20.0,15.0) |
|