AS3:Pointクラスについて
結構躓いたPointクラスについてのメモ.
Pointクラスについて
Pointクラスはその名の通り,点の座標を扱います.
インスタンスを生成する為には,2つのNumber型の引数が必要です.
newして生成したインスタンスをtraceで表示すると,第一引数がx座標,第二引数がy座標として表示されます.
pt:Point = new Point(50,50); trace(pt); //出力:(x=50,y=50)
クラスプロパティ,クラスメソッド
長さを測るlength
基準点(0,0)から対象とする点までの距離がわかります.
pt:Point = new Point(50,50); trace(pt.length); //出力 : 70.71067811865476
点同士の演算
加算・・・add()
減算・・・subtract()
距離計測・・・Point.distance()
等価・・・equals()
var pt1:Point = new Point(100,100); var pt2:Point = new Point(50,50); var pt3:Point = new Point(); pt3 = pt1.add(pt2); //加算 trace(pt3); //出力(x=150,y=150) pt3 = pt1.subtract(pt2); //減算 trace(pt3); //出力(x=50,y=50) var tmp:Number = Point.distance(pt1,pt2); //距離を代入 trace(tmp); //出力:70.71067811865476 trace(pt1.equals(pt2)); //出力:false
2点の間の点を計算するinterpolate()
3つの引数を与えます.
第一引数・・・Point型
第二引数・・・Point型
第三引数・・・0~1までの値
2つの点の間の点を返します.3つ目の引数が1に近いほど,第一引数の点に近くなり,0に近いほど,第二引数の点に近くなります.
var pt1:Point = new Point(100,100); var pt2:Point = new Point(300,300); var pt3:Point = Point.interpolate(pt1,pt2,1); trace(pt3); //出力:(x=100,y=100) pt3 = Point.interpolate(pt1,pt2,0); trace(pt3); //出力:(x=300,y=300) pt3 = Point.interpolate(pt1,pt2,0.5); trace(pt3); //出力:(x=200,y=200)
点の距離を変えるnormalize()
ベクトルの角度は保ち,距離のみを変更できます.
normalizeに与える引数(Number型)の距離に変更できます.
このとき角度は固定です.
例えば,(1,1)にある点の距離を5にしたい場合.
基準点が(0,0)なので(1,1)の距離は√(2)です.
距離5になるには,座標はどこに移動すればいいでしょうか?
ぱっと思いつくのは(3,4)または(4,3)でしょう.
しかし,これらの座標に移動すると,基準点からの角度が変わってしまいます.
もっと簡単に考えると,元の点の座標,x,yの比率と移動した点の,x,yの比率が変化してしまいます.
(1,1) = x:y = 1:1.
(3,4) = x:y = 3:4.
この比率を保ったまま移動すると,角度は保ったまま,距離のみ移動する事ができます.
さきほどの(1,1)にある点をnormalizeメソッドを使用し,距離5に変更すると,返ってくる座標は(3.5355,3.5355)です.
x,yの比率が1:1となってますね.
(座標値が巫女さんになってますね,素敵ですね)
var pt1:Point = new Point(1,1); trace("距離=" + pt1.length + "座標 = " + pt1); //出力:距離=5 座標=(x=3,5355....y=3,5355....)