appendix> 2D> Line2D.Double TOPUPPREVNEXT

Line2D.Double 直線

【主な機能】

直線を表現します。

【継承関係】

    java.lang.Object
      └java.awt.geom.Line2D
            └java.awt.geom.Line2D.Double
    

【コンストラクタ】

コンストラクタ機能
Line2D.Double () 始点 (0,0) と 終点 (0,0) を両端とする直線を生成します。
Line2D.Double(
double x1, double y1,
double x2, double y2)
始点 ( x1 , y1 ) と 終点 ( x2 , y2 ) を両端とする直線を生成します。
Line2D.Double( Point2D p1, Point2D p2) 始点 p1 と 終点 p2 を両端とする直線を生成します。

【メソッド】

メソッド機能
Rectangle2D getBounds2D( ) この直線をぴったりと囲む矩形の枠を返します。
Point2D getP1( ) この直線の始点を返します。
Point2D getP2( ) この直線の終点を返します。
double getX1( ) この直線の始点のx座標を返します。
double getX2( ) この直線の終点のx座標を返します。
double getY1( ) この直線の始点のy座標を返します。
double getY2( ) この直線の終点のy座標を返します。
void setLine( double x1 , double y1 , double x2 , double y2 ) この直線の始点と終点を ( x1 , y1 ) と ( x2 , y2 ) にします。

【Line2D から継承したおもなメソッド】

メソッド機能
boolean contains ( ... ) ... に種々のパラメータを指定できますが、 直線は広がりをもたないため値は常に false となります。
Rectangle getBounds ( ) この直線をぴったりと囲む矩形の枠を返します。
boolean intersects (
double x , double y ,
double w , double h )
この直線が、左上隅座標 (x , y)、 幅 w、 高さ h の矩形と交わる場合は true、そうでない場合は false
boolean intersects ( Rectangle2D r ) この直線が 矩形 r と交わる場合は true、そうでない場合は false
boolean intersectsLine (
double x , double y ,
double w , double h )
この直線が、 始点を(x , y)、 終点を(x , y)とする直線と交わる場合は true、そうでない場合は false
boolean intersectsLine ( Line2D line ) この直線が、 直線 line と交わる場合は true、そうでない場合は false
static boolean linesIntersect (
double x1 , double y1 ,
double x2 , double y2 ,
double x3 , double y3 ,
double x4 , double y4 )
(x1 , y1)と(x2 , y2) を結ぶ直線と、 (x3 , y3)と(x4 , y4) を結ぶ直線とが交わる場合には true、そうでない場合には false
double ptLineDist ( double x , double y ) この直線(正確には線分)を無限に延長してえられる直線と、 点(x , y) の距離
double ptLineDist ( Point2Dp ) この直線(正確には線分)を無限に延長してえられる直線と、 点 p の距離
static double ptLineDist (
double x1 , double y1 ,
double x2 , double y2 ,
double x0 , double y0 )
2点(x1 , y1) 、 (x2 , y2) を通る無限に長い直線と、 と点(x0 , y0) の距離
double ptLineDistSq ( double x , double y ) この直線(正確には線分)を無限に延長してえられる直線と 点(x , y) の距離の2乗
double ptLineDistSq ( Point2Dp ) この直線(正確には線分)を無限に延長してえられる直線と 点 p の距離の2乗
static double ptLineDistSq (
double x1 , double y1 ,
double x2 , double y2 ,
double x0 , double y0 )
2点 (x1 , y1) 、 (x2 , y2) を結ぶ無限に長い直線と、 と点(x0 , y0) の距離の2乗
double ptSegDist ( double x , double y ) この直線(線分)と点(x , y) の距離
double ptSegDist ( Point2Dp ) この直線(線分)と点 p の距離
static double ptLineDist (
double x1 , double y1 ,
double x2 , double y2 ,
double x0 , double y0 )
(x1 , y1)と(x2 , y2) を結ぶ直線(線分)と、 と点(x0 , y0) の距離
double ptLineDistSq ( double x , double y ) この直線(線分)と点(x , y) の距離の2乗
double ptLineDistSq ( Point2Dp ) この直線(線分)と点 p の距離の2乗
static double ptLineDistSq (
double x1 , double y1 ,
double x2 , double y2 ,
double x0 , double y0 )
(x1 , y1)と(x2 , y2) を結ぶ直線(線分)と、 と点(x0 , y0) の距離の2乗
int relativeCCW ( Point2D p ) この直線と点 p の位置関係。
この直線を始点を中心に回転させて点 p の方向をむける場合に、 左回りに回転させた方がはやい場合は 1、 右回りに回転させたほうが回転角が小さくてすむ場合は -1。
直線の延長線上にある場合はゼロですが、誤差を考慮して判定する必要があります。
int relativeCCW (
double x0 , double y0 )
この直線と点 ( x0 , y0 ) の位置関係。 計算方法は、relativeCCW ( Point2D p ) と同じ。
static int relativeCCW (
double x1 , double y1 ,
double x2 , double y2 ,
double x0 , double y0 )
始点を(x1 , y1)、 終点を(x2 , y2)とする直線と、 点 ( x0 , y0 ) の位置関係。 計算方法は、relativeCCW ( Point2D p ) と同じ。
void setLine ( Point2D p1 , Point2D p2 ) この直線の始点を p1 で示される座標に、終点を p2で示された座標に設定します。
void setLine ( Line2D line ) この直線の始点と終点の座標を line で示された座標に等しくします。

【例1】

プログラム Line4.java

実行結果

Line4-1.gif

【例2】

プログラム Line1.java

ptSegDist と ptLineDist の違い
relativeCCW の使用例

実行結果

Line1-1.gif

【例3】

プログラム Line9.java

実行結果の例

Line9-1.gif

始点と終点はドラッグできます。 線の幅、dash、dash_phase を選択したり変更したりしてみましょう。

dash を自分で手入力する場合は、数値の配列を与えてください。

数値をコンマで区切ってならべ、中カッコでくくります。 数値に小数点は不要です。
( StringTakenizer でコンマ区切りの数字列を切り出し、 trim をしてから、 parseFloat をしています。)

【例4】

例3 のプログラムで Stroke を指定する欄をつくりましたが、 今後も使えそうなので、クラスとしてくくり出してみました。 ついでに、幅をせまくできるように2段にし、 表示色の選択もできるようにしました。
プログラム Line9new.java
プログラム StrokeBar.java

実行結果の例

Line9new-1.gif


更新日:2004-03-11