JAVA言語でベジェ曲線を構成する点の配列を求める
JAVA(コンピュータ言語)でベジェ曲線を求めるメソッドの紹介です。
ベジェ曲線の考え方
梯子を使って理解します。
まず、2本の梯子を用意します。それぞれの長さは異なりますが、段数は一緒です。
3本目の梯子を用意します。これを2本の梯子のそれぞれi番目に立てかけます。
3番目の梯子も段数は一緒ですが、長さはぴったり2本の梯子のi番目をつないだ長さにします。
この作業をi=0から段数分だけ行い、3番目の梯子のそれぞれi番目の位置をプロットして滑らかにつなげば...ベジェ曲線の出来上がり。
言葉で書いてもよくわからないけど、
こちら
の動画を見れば一目瞭然で理解できる。
私もこの動画を見て理解できました。Ueyamaさんありがとうございます。
2つの梯子に1つの梯子をかけて描く曲線は2次ベジェ曲線。3つの梯子に2つの梯子をかけ、さらに1つの梯子をかけると3次ベジェ曲線。
更に梯子を増やせるけど、個人的には2次で十分だと思う。
ベジェ曲線を求める順序
まずは直線上の任意の割合で分割する点を求めるメソッドを作る。
始点からiだけ移動した位置が分点。i=0なら分点の位置は始点と重なる。i=1なら終点の位置。
2つの直線それぞれ同じ割合の分点を求め、2つの分点を始点、終点として直線を作り、同じ割合で分点を求める。
求めた点はベジェ曲線上の点になる。
ベジェ曲線を求めるJAVAメソッド
N本の直線をつなげてベジェ曲線を表現します。N個の直線を示すためのN+1個の点を返すメソッドが下記
public tomojavalib.p2cad.Point[] beje(Line l1,Line l2,int nos)
{
tomojavalib.p2cad.Point bp[]= new tomojavalib.p2cad.Point[nos+1] ;
for(int i= 0;i<nos+1;i++)
{
bp[i]= new tomojavalib.p2cad.Point();
tomojavalib.p2cad.Point p1 = bunTen(l1.sp,l1.ep, (double)(i)/(double)(nos) );
tomojavalib.p2cad.Point p2 = bunTen(l2.sp,l2.ep, (double)(nos-i)/(double)(nos) );
bp[i] = bunTen( p1, p2 , (double)(i)/(double)(nos) );
}
return bp;
}
public tomojavalib.p2cad.Point bunTen
(tomojavalib.p2cad.Point sp, tomojavalib.p2cad.Point ep ,double bunritu )
{
tomojavalib.p2cad.Point bp= new tomojavalib.p2cad.Point();
bp.x = sp.x + ( ep.x - sp.x ) * bunritu;
bp.y = sp.y + ( ep.y - sp.y ) * bunritu;
return bp;
}
最終更新日: 2014-04-01 07:29:09