| 目次 | 前へ | 次へ | 
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クラスおよびほかの幾何学クラスで実装されています。 | 
| クラス | 説明 | 
|---|---|
| Arc2DArc2D.DoubleArc2D.Float | スーパークラス: RectangularShape外接する矩形、開始位置の角度、中心角の角度、および閉鎖の種類で定義される円弧を表します。 Arc2D.FloatおよびArc2D.Doubleは、単精度と倍精度で円弧を指定するために実装されています。 | 
| Area | インタフェース: Shape, Cloneableブール演算をサポートする領域の幾何学的図形を表します。 | 
| CubicCurve2DCubicCurve2D.Float | インタフェース: Shape(w) 座標空間内の 3 次パラメトリック曲線セグメントを表します。 CubicCurve2D.Floatおよび CubicCurve2D.Doubleは、単精度と倍精度で 3 次曲線を指定するために実装されています。 | 
| Dimension2D | 幅と高さの寸法をカプセル化しています。2 次元の寸法を格納するすべてのオブジェクトの抽象スーパークラスです。 | 
| Ellipse2DEllipse2D.DoubleEllipse2D.Float | スーパークラス: RectangularShape外接する長方形で定義される楕円を表します。 Ellipse2D.FloatおよびEllipse2D.Doubleは、単精度と倍精度で楕円を指定するために実装されています。 | 
| FlatteningPathIterator | PathIteratorオブジェクトの平坦化されたビューを返します。それ自体では補間計算を行わない Shapesに対する平坦化動作を実現するために使用できます。 | 
| GeneralPath | インタフェース: Shape直線、2 次曲線、および 3 次曲線から構成される幾何学的パスを表します。 | 
| Line2DLine2D.DoubleLine2D.Float | インタフェース: Shape(x, y) 座標空間内の直線セグメントを表します。 Line2D.FloatおよびLine2D.Doubleは、単精度と倍精度で直線を指定するために実装されています。 | 
| Point2DPoint2D.DoublePoint2D.Float | (x, y) 座標空間内の位置を表す点です。 Point2D.FloatおよびPoint2D.Doubleは、単精度と倍精度で点を指定するために実装されています。 | 
| QuadCurve2DQuadCurve2D.DoubleQuadCurve2D.Float | インタフェース: Shape(x, y) 座標空間内の 2 次パラメトリック曲線セグメントを表します。 QuadCurve2D.FloatおよびQuadCurve2D.Doubleは、単精度と倍精度で 2 次曲線を指定するために実装されています。 | 
| Rectangle2DRectangle2D.DoubleRectangle2D.Float | スーパークラス: RectangularShape位置 (x, y) と寸法 (w x h) で定義される矩形を表します。 Rectangle2D.FloatおよびRectangle2D.Doubleは、単精度と倍精度で矩形を指定するために実装されています。 | 
| RectangularShape | インタフェース: Shape矩形の範囲で規定される図形を操作するための共通処理ルーチンを提供しています。 | 
| RoundRectangle2DRoundRectangle2D.DoubleRoundRectangle2D.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 インタフェースの実装が別に提供されています。また、Java2D™ 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 インタフェースメソッドを実装する必要があります。
containsgetBoundsgetBounds2DgetPathIteratorintersects
| 目次 | 前へ | 次へ |