Location : Home > Languages > Perl > Package Title : Math::Bezier |
![]() |
Math::Bezier - ベジエ曲線を計算
use Math::Bezier; # コントロールポイント (x, y) のリストを通過する曲線を生成 my $bezier = Math::Bezier->new($x1, $y1, $x2, $y2, ..., $xn, $yn); # または参照で記述しても同じ my $bezier = Math::Bezier->new([ $x1, $y1, $x2, $y2, ..., $xn, $yn]); # 曲線をパラメータ表示 my ($x, $y) = $bezier->point(0.5); # スカラーで参照のリストを返す my $xy = $bezier->point(0.5); # 曲線に沿って20の点の座標 (x, y) を返す my @curve = $bezier->curve(20); # スカラーで参照のリストを返す my $curve = $bezier->curve(20);
本モジュールは"Quick and Simple Bezier Curve Drawing"(Robert D. Miller 著)の Graphics Gems V で説明されているアルゴリズムにしたがってベジェ曲線を計算するアルゴリズムを実装したものである。
新たなベジェ曲線はコンストラクタ new() で定義され、通過する点(コントロール・ポイント)の座標 (x, y) のリストを与えることで計算を行う。
use Math::Bezier; my @control = ( 0, 0, 10, 20, 30, -20, 40, 0 ); my $bezier = Math::Bezier->new(@control);
または通過する点(コントロール・ポイント)のリストへの参照で与える。
my $bezier = Math::Bezier->new(\@control);
曲線に沿って定義された 0 から 1 までのパラメータ theta によって記述される場合に、 point($theta) メソッドを用いれば対応する座標を返す。
my ($x, $y) = $bezier->point(0.5); print "x: $x y: $y\n
それぞれの座標を取り出したい場合は以下のように記述する。
my $point = $bezier->point(0.5); print "x: $point->[0] y: $point->[1]\n";
curve($n) メソッドは曲線の長さ方向に沿った(0 <= $theta <= 1 の範囲)、曲線上の $n 個の点の座標の組 ($x1,$y1, $x2, $y2, ..., $xn, $yn) を返す。パラメータ $n はサンプル点のインデックスにもなっている。また、省略した場合のデフォルト値は20である。本メソッドは点の座標のリストまたはリストへの参照を返す。
my @points = $bezier->curve(10); while (@points) { my ($x, $y) = splice(@points, 0, 2); print "x: $x y: $y\n"; } my $points = $bezier->curve(10); while (@$points) { my ($x, $y) = splice(@$points, 0, 2); print "x: $x y: $y\n"; }
Andy Wardley, <abw@kfs.org>
Graphics Gems 5, edited by Alan W. Paeth, Academic Press, 1995, ISBN 0-12-543455-3. Section IV.8, 'Quick and Simple Bezier Curve Drawing' by Robert D. Miller, pages 206-209.
【訳注と解説】
![]() |
Updated : 2006/07/04 |