目次|前|次 |
Java 2D APIでは、点、直線、曲線、矩形など、基本的な幾何学オブジェクトを定義するクラスがいくつか提供されています。これらの新しい幾何学クラスは、java.awt.geom
パッケージに含まれています。下位互換のため、Rectangle
、Point
、Polygon
など、旧バージョンのJDKに存在していた幾何学クラスも、java.awt
パッケージに残っています。
GeneralPath
、Arc2D
、Rectangle2D
などJava 2D APIの幾何学的図形は、java.awt
で定義されているShape
インタフェースを実装しています。Shape
では、幾何学的なパスを持つオブジェクトを記述したり検査したりするための、共通のプロトコルが提供されています。新しいインタフェースのPathIterator
は、幾何学的図形から要素を抽出するためのメソッドを定義しています。
幾何学クラスを使うと、ほとんどすべての2次元オブジェクトを、簡単に定義して操作できます。
次の表は、主要な幾何学インタフェースとクラスの一覧です。これらのインタフェースとクラスのほとんどは、java.awt.geom
パッケージに含まれています。Shape
などjava.awt
パッケージに含まれているものもありますが、これは主に、旧バージョンのJDKとの下位互換を維持するためです。
インタフェース | 説明 |
---|---|
PathIterator |
パスから要素を取得するためのメソッドを定義しています。 |
Shape (java.awt) |
幾何学的なパスを持つオブジェクトを記述および検査するための共通メソッド群を提供しています。GeneralPath クラスおよびほかの幾何学クラスで実装されています。 |
クラス | 説明 |
---|---|
Arc2D Arc2D.Double Arc2D.Float |
スーパー・クラス: RectangularShape 外接する矩形、開始位置の角度、中心角の角度、および閉鎖の種類で定義される円弧を表します。 Arc2D.Float およびArc2D.Double は、単精度と倍精度で円弧を指定するために実装されています。 |
Area |
インタフェース: Shape, Cloneable ブール演算をサポートする領域の幾何学的図形を表します。 |
CubicCurve2D CubicCurve2D.Float
|
インタフェース: Shape (w)座標空間内の3次パラメトリック曲線セグメントを表します。 CubicCurve2D.Float および CubicCurve2D.Double は、単精度と倍精度で3次曲線を指定するために実装されています。 |
Dimension2D |
幅と高さの寸法をカプセル化しています。2次元の寸法を格納するすべてのオブジェクトの抽象スーパー・クラスです。 |
Ellipse2D Ellipse2D.Double Ellipse2D.Float |
スーパー・クラス: RectangularShape 外接する長方形で定義される楕円を表します。 Ellipse2D.Float およびEllipse2D.Double は、単精度と倍精度で楕円を指定するために実装されています。 |
FlatteningPathIterator | PathIterator オブジェクトの平坦化されたビューを返します。それ自体では補間計算を行わない Shapes に対する平坦化動作を実現するために使用できます。 |
GeneralPath |
インタフェース: Shape 直線、2次曲線、および3次曲線から構成される幾何学的パスを表します。 |
Line2D Line2D.Double Line2D.Float |
インタフェース: Shape (x, y)座標空間内の直線セグメントを表します。 Line2D.Float およびLine2D.Double は、単精度と倍精度で直線を指定するために実装されています。 |
Point2D Point2D.Double Point2D.Float |
(x, y)座標空間内の位置を表す点です。Point2D.Float およびPoint2D.Double は、単精度と倍精度で点を指定するために実装されています。 |
QuadCurve2D QuadCurve2D.Double QuadCurve2D.Float |
インタフェース: Shape (x, y)座標空間内の2次パラメトリック曲線セグメントを表します。 QuadCurve2D.Float およびQuadCurve2D.Double は、単精度と倍精度で2次曲線を指定するために実装されています。 |
Rectangle2D Rectangle2D.Double Rectangle2D.Float |
スーパー・クラス: RectangularShape 位置(x, y)と寸法(w x h)で定義される矩形を表します。 Rectangle2D.Float およびRectangle2D.Double は、単精度と倍精度で矩形を指定するために実装されています。 |
RectangularShape |
インタフェース: Shape 矩形の範囲で規定される図形を操作するための共通処理ルーチンを提供しています。 |
RoundRectangle2D RoundRectangle2D.Double RoundRectangle2D.Float |
スーパー・クラス: RectangularShape 位置(x, y)、寸法(w x h)、隅の弧の幅と高さで定義される丸い角を持つ矩形を表します。 RoundRectangle2D.Float およびRoundRectangle2D.Double は、単精度と倍精度で角の丸い矩形を指定するために実装されています。 |
Shape
は、GeneralPath
やRectangle2D.Float
など、Shape
インタフェースを実装するすべてのクラスのインスタンスです。Shape
の外形(輪郭)をパスと呼びます。
Shape
を描画する場合は、Graphics2D
コンテキストのStroke
オブジェクトで定義されているペンのスタイルが、Shape
のパスに適用されます。Shape
を塗りつぶす場合は、Graphics2D
コンテキストのPaint
が、パスの内側の領域に適用されます。詳細については、「Graphics2Dを使ったレンダリング」を参照してください。
Shape
のパスは、クリッピング・パスの定義にも使用できます。クリッピング・パスにより、レンダリングされるピクセルが決まります。クリッピング・パスで定義される領域の内側にあるピクセルだけが、レンダリングされます。クリッピング・パスは、Graphics2D
コンテキストの一部です。詳細については、「クリッピング・パスの設定」を参照してください。
GeneralPath
を使うと、直線、2次曲線、および3次曲線を使って構成できる任意の2次元オブジェクトを表すことが可能です。java.awt.geom
では、矩形、楕円、円弧、曲線などの一般的な幾何図形オブジェクトを簡単に表現できるよう、専用のShape
インタフェースの実装が別に提供されています。また、Java 2D APIでは、構成領域ジオメトリをサポートする特別な種類のShapeも提供されています。
構成領域ジオメトリ(CAG)は、既存のオブジェクトにブール演算を行って新しい幾何学オブジェクトを作る処理です。Java 2D APIでは、Area
という名前の特別な型のShape
が、ブール演算をサポートしています。任意のShape
からArea
を構築できます。
Areas
では、次のブール演算を実行できます。
これらの演算を図3-1に示します。
「バウンディング・ボックス」は、Shapeの幾何学的図形を完全に囲む矩形です。バウンディング・ボックスを使って、ユーザーがオブジェクトを選択したかどうか、つまり「ヒット」したかどうかを判定します。
Shape
インタフェースでは、図形のバウンディング・ボックスを取得するメソッドとして、getBounds
とgetBounds2D
の2つが定義されています。getBounds2D
からはRectangle
はなくRectangle2D
が返されるので、図形のバウンディング・ボックスについてさらに高い精度の記述を取得できます。
Shape
では、次の判定を行うメソッドも提供されています。
contains
)contains
)intersects
)Areas
を使うと、円や正方形のような単純な図形から複雑なShapes
を簡単に作ることができます。Areas
結合して新しく複雑なShape
を作る手順を次に示します。
Shapes
を使って、結合するAreas
を作成します。add
、subtract
、intersect
、exclusiveOr
から適切なものを呼び出します。たとえば、CAGを使うと、図 3-2
に示すような洋なし型を作ることができます。
洋なしの本体は、重なり合う円と楕円の2つのAreas
に論理和演算を行って作ります。葉は、重なる2つの円に論理積演算を行って作り、それを論理和演算で1つのShape
に結合しています。茎の部分も、重なり合う円に論理差演算を2回行って作られています。
Shape
インタフェースを実装して、新しい種類の形状を定義するクラスを作成できます。Shape
インタフェースのメソッドを実装できるならば、内部的に図形をどのように表現してもかまいません。Shape
では、輪郭を指定するパスを生成できなければなりません。
たとえば、点の配列としてポリゴンを表すShape
の簡単な実装を作成できます。このようにしてポリゴンを作成してあれば、draw
やsetClip
など、引数としてShape
オブジェクトを受け取る任意のメソッドにポリゴンを渡すことができます。
PolygonPath
クラスでは、次のShape
インタフェース・メソッドを実装する必要があります。
contains
getBounds
getBounds2D
getPathIterator
intersects
目次|前|次 |