Location : Home > Languages > Perl > Package Title : Math::Polygon |
![]() |
Math::Polygon - ポリゴンデータの管理クラス
my $poly = Math::Polygon->new( [1,2], [2,4], [5,7], [1,2] ); print $poly->nrPoints; my @p = $poly->points; my ($xmin, $ymin, $xmax, $ymax) = $poly->bbox; my $area = $poly->area; my $l = $poly->perimeter; if($poly->isClockwise) { ... }; my $rot = $poly->startMinXY; my $boxed = $poly->lineClip($xmin, $xmax, $ymin, $ymax);
本クラスは Math::Polygon::Calc|Math::Polygon::Calc 及び Math::Polygon::Clip|Math::Polygon::Clip に対するオブジェクト指向インタフェースを提供する。
$obj->new([OPTIONS], [POINTS], [OPTIONS]) Math::Polygon->new([OPTIONS], [POINTS], [OPTIONS])
POINTS の前後に OPTIONS を追加することもできる。点のリストを取得するために points オプションを使うこともできる。POINTS は X 及び Y の配列への参照である。
new がインスタンスメソッドとして呼び出された場合は、呼び出された側は新しいポリゴンと見なされ、いくつかの事実(時計回り・反時計周りなど)は異議が出されるまでコピーされる。
Option Defined in Default bbox undef clockwise undef points undef
. bbox ARRAY
通常は図形から自動的に計算するが、[xmin,ymin,xmax, ymax] から指定してもよい。bbox()|Math::Polygon/"Simple calculations" を見よ。
. clockwise BOOLEAN
指定されなければ必要に応じて isClockwise()|Math::Polygon/"Simple calculations" メソッドで計算される。
. points ARRAY-OF-POINTS
points()|Math::Polygon/"Attributes" 及び nrPoints()|Math::Polygon/"Attributes" を見よ。
例:新しいポリゴンの生成
my $p = Math::Polygon->new([1,0],[1,1],[0,1],[0,0],[1,0]); my @p = ([1,0],[1,1],[0,1],[0,0],[1,0]); my $p = Math::Polygon->new(points => \@p);
$obj->nrPoints
点の数を返す。
$obj->order
ユニークな点の数を返す。nrPoints()|Math::Polygon/"Attributes" よりも小さい。
$obj->point(INDEX, [INDEX, ...])
INDEX または INDEXES で指定される点を返す。スカラコンテキストでは最初の INDEX のみ利用される。
$obj->points
リストコンテキストでは点はリストを返し、そうでなければ配列への参照として返す。
$obj->area
ポリゴンで囲まれた面積を返す。正しい答えを得るためには最後の点は最初の点と一致していなければならない。計算結果はキャッシュされる。
関数は Math::Polygon::Calc::polygon_area()|Math::Polygon::Calc/"FUNCTIONS" である。
$obj->bbox
ポリゴンのバウンディングボックス(ポリゴンの全ての点をその内部に包含する四角形)を記述する4点 (xmin, ymin, xmax, ymax) を返す。計算に時間がかかるので結果はキャッシュされる。
関数は Math::Polygon::Calc::polygon_bbox()|Math::Polygon::Calc/"FUNCTIONS" である。
$obj->beautify(OPTIONS)
新しい、美しくしたポリゴンを返す。
関数は Math::Polygon::Calc::polygon_beautify()|Math::Polygon::Calc/"FUNCTIONS" である。
ポリゴンは、計算した場合、点が重複していたり、角が尖っていたりするなどしているのでこれを美しくする。
. remove_spikes BOOLEANOption Defined in Default remove_spikes false
$obj->clockwise
点が時計回り順であることを確認する。
$obj->contains(POINT)
引数として渡された点がポリゴンの内部にあるか否かを示す真値を返す。辺(稜線)上の点は内部とする。
$obj->counterClockwise
点が反時計回り順であることを確認する。
$obj->equal((OTHER|ARRAY, [TOLERANCE])|POINTS)
2つのポリゴンを点のレベルで比較する。ポリゴンが同一でも回転している場合は false を返す。same()|Math::Polygon/"Simple calculations" を見よ。
関数は Math::Polygon::Calc::polygon_equal()|Math::Polygon::Calc/"FUNCTIONS" である。
$obj->isClockwise
点を時計回りの方向に並べる。
この計算は極めて時間がかかるので(ポリゴンの面積を求めるのと同様)、結果はキャッシュされる。
$obj->perimeter
ポリゴンの線分の長さを求める。任意の辺の長さを求めることができる。最後の点は最初の点と一致していなくてもよい。その場合は線分と見なす。
関数は Math::Polygon::Calc::polygon_perimeter()|Math::Polygon::Calc/"FUNCTIONS" である。
$obj->same((OTHER|ARRAY, [TOLERANCE])|POINTS)
2つのポリゴンを比較し、互いに回転された状態であるかを確認する。これは equal()|Math::Polygon/"Simple calculations" よりかなり遅いが、他のアルゴリズムでは結果が信用できない場合もあるのでこれを採用している。
関数は Math::Polygon::Calc::polygon_same()|Math::Polygon::Calc/"FUNCTIONS" である。
$obj->startMinXY
バウンディングボックスび左下の点を基点として回転した新しいオブジェクトを返す。
関数は Math::Polygon::Calc::polygon_start_minxy()|Math::Polygon::Calc/"FUNCTIONS" である。
$obj->string
Math::Polygon::Transform|Math::Polygon::Transform を実装し、クリッピングを除いてポリゴンの構造を変換する。全ての関数は新しいポリゴンオブジェクトまたは undef を返す。
$obj->grid(OPTIONS)
グリッド点にあわせたポリゴンオブジェクトを返す。
Math::Polygon::Transform::polygon_grid()|Math::Polygon::Transform/"FUNCTIONS" を見よ。
Option Defined in Default raster 1.0
. raster FLOAT
点の周りのラスタのサイズを返す。原点 [0,0] は常にグリッド点である。ラスタ値が0であれば変換は行われない。
$obj->mirror(OPTIONS)
線分でポリゴンの鏡像を返す。オプションの定義は1つのみである。
これを "flip" または "flop" と呼ぶこともある。
Option Defined in Default b 0 line undef rc undef x undef y undef
. b FLOAT
線分を記述するためにオプション rc との組み合わせを使う。
. line [POINT, POINT]
鏡像射線を特定する。rc 及び b は線分の2点から計算される。
. rc FLOAT
鏡像射線を指定する。線分は y = rc * x + b で表される。rc は -dy/dx に等しい。b に明示的に undef を指定すると x 軸に垂直な線分と見なす。
. x FLOAT
y の値はそのままで x = value に対し鏡像をとる。
. y FLOAT
x の値はそのままで y = value に対し鏡像をとる。
$obj->move(OPTIONS)
移動したポリゴンオブジェクトを返す。全ての点は指定された距離だけ移動する。
Math::Polygon::Transform::polygon_move()|Math::Polygon::Transform/"FUNCTIONS" を見よ。
Option Defined in Default dx 0 dy 0
. dx FLOAT
水平方向に移動する。
. dy FLOAT
垂直方向に移動する。
$obj->resize(OPTIONS)
サイズ変更されたポリゴンオブジェクトを返す。
Math::Polygon::Transform::polygon_resize()|Math::Polygon::Transform/"FUNCTIONS" を見よ。
Option Defined in Default center [0,0] scale 1.0 xscale scale yscale scale
. center POINT
. scale FLOAT
指定されたファクタに従いポリゴンをサイズ変更する。ファクタの値が1よりも大きければ元の図形より大きくなり、小さいと小さくなる。スケールは中心からみたものとなる。
. xscale FLOAT
水平方向のスケールファクタを指定する。
. yscale FLOAT
垂直方向のスケールファクタを指定する。
$obj->rotate(OPTIONS)
回転されたポリゴンオブジェクトを返す。全ての点は指定された距離だけ移動する。
Math::Polygon::Transform::polygon_rotate()|Math::Polygon::Transform/"FUNCTIONS" を見よ。
Option Defined in Default center [0,0] degrees 0 radians 0
. center POINT
. degrees FLOAT
回転角を度で指定する。( -180 と 360 の間)
. radians FLOAT
回転角をラジアンで指定する。( -pi と 2*pi の間)
$obj->simplify(OPTIONS)
点を削除したポリゴンオブジェクトを返す。
Math::Polygon::Transform::polygon_simplify()|Math::Polygon::Transform/"FUNCTIONS" を見よ。
Option Defined in Default max_points undef same 0.0001 slope undef
. max_points INTEGER
まず same と slope は点の数を減らす。特定の点の数を残したいなら指定した最大数に達するまで最大角の点が削除される。
. same FLOAT
2つの点の間の距離を「同じ」と見なす。値は円の半径として用いられる。
. slope FLOAT
3点 X(n), X(n+1), X(n+2) について、点 X(n+1) が X(n) と X(n+2) の間の直接パスよりも長い slope よりも3点からのパスが短ければ削除される。.
slope はポリゴンの始点からは削除されない。
点を削除すればポリゴンの面積は変わる。
$obj->fillClip1(BOX)
ポリゴンを様々な方法で長方形にクリッピングする。
このアルゴリズムでは BOX の外になるポリゴンの部分は境界にマップされる。 ポリゴンは1ピースのままであるが、頂点は2方向を向く。
返り値は1つのポリゴンであるか undef である。ポリゴンの場合は2点・スパイクと中間点で綺麗になったものである。
$obj->lineClip(BOX)
返り値は入力ポリゴンからの線分を含むf ARRAYS-OF-POINTS のリストである。
関数は Math::Polygon::Clip::polygon_line_clip()|Math::Polygon::Clip/"FUNCTIONS" である。
詳しくはt http://perl.overmeer.net/geo を見よ。
Module version 0.003.
Mark Overmeer (polygon@overmeer.net) により書かれた。他の貢献については変更履歴を見よ。
Copyright (c) 2004 by the author(s). All rights reserved.
本プログラムはフリーソフトウェアであり、Perl 本体と同等の条件で修正/再配布してもよい。
![]() |
Updated : 2008/06/27 |