appendix> 2D> CubicCurve2D TOPUPPREVNEXT

CubicCurve2D.Double 3次曲線

【主な機能】

3次ベジエ曲線 Bezier Curve を表現します。

3次ベジエ曲線は、3次式で表現される曲線で次の性質があります。

通常は 「4つの制御点があり、...」という言い方がされますが、 Javaでは、始点、最初の制御点、2番目の制御点、終点 と呼びます。

【例】

Cubic1-1.gif   Cubic1-2.gif Cubic1-3.gif

【コンストラクタ】

コンストラクタ概要
CubicCurve2D.Double ( ) 始点を (0,0)、制御点を (0,0)、および (0,0)、終点を (0,0) とする3次ベジエ曲線を生成します。
CubicCurve2D.Double (
double x1 , double y1 ,
double xc1 , double yc1 ,
double xc2 , double yc2 ,
double x2 , double y2 )
始点を ( x1 , y1 )、 最初の制御点を ( xc1 , yc1 )、 2番目のの制御点を ( xc2 , yc2 )、 終点を( x2 , y2 ) とする3次ベジエ曲線を生成します。

【メソッド】

メソッド機能
Rectangel2D getBounds2D ( ) この図形を囲む四角い枠を返します。
Point2D getP1 ( )
double getX1 ( )
double getY1 ( )
それぞれ、始点、始点のx座標、始点のy座標を値とします。
Point2D getCtrlP1 ( )
double getCtrlX1 ( )
double getCtrlY1 ( )
それぞれ、最初の制御点、最初の制御点のx座標、およびy座標を値とします。
Point2D getCtrlP2 ( )
double getCtrlX2 ( )
double getCtrlY2 ( )
それぞれ、2番目の制御点、2番目の制御点のx座標、およびy座標を値とします。
Point2D getP2 ( )
double getX2 ( )
double getY2 ( )
それぞれ、終点、終点のx座標、終点のy座標を値とします。
void setCurve.Double (
double x1 , double y1 ,
double xc1 , double yc1 ,
double xc2 , double yc2 ,
double x2 , double y2 )
この図形の始点の座標をを ( x1 , y1 )に、 最初の制御点の座標をを ( xc1 , yc1 )に、 2番目の制御点の座標をを ( xc2 , yc2 )に、 終点の座標を( x2 , y2 ) に、 それぞれ設定します。

【CubicCurve2D から継承した主なメソッド】

メソッド機能
boolean contains ( double x , double y )
boolean contains ( Point2D p )
それぞれ、座標 ( x, y ) 、 点 p がこの図形の内側にあれば true、そうでなければ false。
boolean contains (
double x , double y ,
double w , double h )
boolean contains ( Rectangle2D r )
この図形が、それぞれ矩形領域 ( x , y , w , h ) あるいは r を 包含すれば true、 そうでなければ false。
Rectangle getBounds ( ) この図形を囲む四角い枠を返します。
boolean intersects (
double x , double y ,
double w , double h )
boolean intersects ( Rectangle2D r )
この図形と矩形領域 ( x , y , w , h )、 あるいはこの図形と矩形領域 r とが 重なる場合 true、 そうでなければ false。
void setCurve
( double[] coords , int offset )
この図形の始点、制御点、終点の座標を、配列 coordsoffset から8個で示される数値にします。
void setCurve
( Point2D[] pts . int offset )
この図形の始点、制御点、終点の座標を、配列 coordsoffset から4個で示される点の座標と同じにします。
void setCurve (
Point2D p1 ,
Point2D pc1 ,
Point2D pc2 ,
Point2D p2 )
p1>、点pc1>、点pc2>、点p2 の座標をそれぞれ、この図形の始点、最初の制御点、2番目の制御点、終点の座標に設定します。
void setCurve ( CubicCurve2D c ) この図形の始点、2つの制御点、終点の座標を、c と同じにします。
static int solveQuadratic
( double[] eqn )
3次方程式 ax3 + bx2 + cx + d = 0 の係数 { d , c , b , a } を eqn に設定して、このメソッドを呼び出す。
実数解があれば eqn に設定され、解の個数が値として返されます。 解が複素数になる場合は、0 が返されます。方程式が定数の場合は、-1 が返されます。
static int solveQuadratic (
double[] eqn ,
double[] res )
3次方程式 ax3 + bx2 + cx + d = 0 の係数 { c , b , a } を eqn に設定して、このメソッドを呼び出す。
実数解があれば res に設定され、解の個数が値として返されます。 解が複素数になる場合は、0 が返されます。方程式が定数の場合は、-1 が返されます。

【例1】

プログラム Cubic1.java

上記の例を表示するプログラム
プログラム StrokeBar.java が必要です。

実行結果

Cubic1-4.gif

【例2】

プログラム Cubic2.java

2本のベジエ曲線の端点をなめらかにつなげた形で表示してみましょう。
プログラム StrokeBar.java が必要です。

Cubic2-1.gif

なめらかにつなげるには、接続点の接線が1直線になるようにします。 最初に表示する際に1直線にしておき、 接続点がドラッグされたら、2つの制御点も並行移動します。
制御点AまたはBがドラッグされたら、 反対側の制御点を点対称の位置に移動させます。

【例3】

プログラム Cubic3.java

さらに両端点をなめらかにつなげて表示してみましょう。
プログラム StrokeBar.java が必要です。

ここではなめらかに表示するだけですが、 GeneralPath を用いると曲線を接続してひとつの図形にすることができます。

Cubic3-1.gif


更新日:2004-04-04