ActionScript 3 當中有一個幾何 類庫集,這個類庫包有一個Point類。
Point 對象表示二維座標系統中的某個位置,其中 x 表示水平軸,y 表示垂直軸。 下面看看裡面的方法,嘗試寫一下裡面的結構是怎樣的
package<br />{<br />public class Point2D extends Object<br />{<br />public var x:Number;<br />public var y:Number;<br />private var Length:Number;<br />public function Point2D(x:Number=0,y:Number=0)</p><p>public function get length():Number</p><p>//將另一個點的座標添加到此點的座標以建立一個新點<br />public function add(v:Point2D):Point2D</p><p>//建立此 Point 對象的副本<br />public function clone():Point2D</p><p>//返回 pt1 和 pt2 之間的距離。<br />public static function distance(pt1:Point2D,pt2:Point2D):Number</p><p>//確定兩個點是否相同<br />public function equals(toCompare:Point2D):Boolean</p><p> //確定兩個指定點之間的點<br />public static function interpolate(pt1:Point2D,pt2:Point2D,f:Number):Point2D</p><p>//將 (0,0) 和當前點之間的線段縮放為設定的長度(利用三角形相似可以得到)。<br />public function normalize(thickness:Number):void</p><p>//按指定量位移 Point 對象。<br />public function offset(dx:Number,dy:Number):void</p><p>//將一對極座標轉換為笛卡爾點座標。<br />public static function polar(len:Number,angle:Number):Point2D</p><p>//從此點的座標中減去另一個點的座標以建立一個新點<br />public function subtract(v:Point2D):Point2D</p><p>//返回包含 x 和 y 座標的值的字串<br />public function toString():String</p><p>}<br />}
大概結構是這樣,下面就寫一個和Point有相同功能的 Point2D類,下面把裡面的方法大概猜測寫一下,以便瞭解裡面的結構。
有興趣可以測試一下!基本上的功能都能夠實現到。
有趣的是,我們發現這種寫法,也是在as3 當中一個比較常見和常用的設計手法,可以寫一個複數類,藉助這個Point類寫法,
實現複數的四則運算功能。
Point 類描述的是數學上一個座標系(x,y)在個點當中,可以進行運算Point對象就是封裝記錄幾何座標系當中的點。
package<br />{<br />public class Point2D extends Object<br />{<br />public var x:Number;<br />public var y:Number;<br />private var Length:Number;<br />public function Point2D(x:Number=0,y:Number=0)<br />{<br />this.x=x;<br />this.y=y;<br />}<br />public function get length():Number<br />{<br />Length=Point2D.distance(new Point2D(0,0),new Point2D(this.x,this.y));<br />return Length;<br />}</p><p>//將另一個點的座標添加到此點的座標以建立一個新點<br />public function add(v:Point2D):Point2D<br />{<br />var px:Number=this.x + v.x;<br />var py:Number=this.y + v.y;<br />return new Point2D(px,py);<br />}</p><p>//建立此 Point 對象的副本<br />public function clone():Point2D<br />{<br />return new Point2D(this.x,this.y);<br />}<br />//返回 pt1 和 pt2 之間的距離。<br />public static function distance(pt1:Point2D,pt2:Point2D):Number<br />{<br />return Math.sqrt((pt1.x - pt2.x )* (pt1.x - pt2.x) + (pt1.y - pt2.y) * (pt1.y - pt2.y));<br />}</p><p>//確定兩個點是否相同<br />public function equals(toCompare:Point2D):Boolean<br />{<br /> return (this.x==toCompare.x && this.y==toCompare.y )?true:false;<br />}</p><p> //確定兩個指定點之間的點<br />public static function interpolate(pt1:Point2D,pt2:Point2D,f:Number):Point2D<br />{<br />var point:Point2D=new Point2D();<br />point.x= (pt2.x-pt1.x)*f;<br />point.y= (pt2.y-pt1.y)*f;<br />return point;<br />}</p><p>//將 (0,0) 和當前點之間的線段縮放為設定的長度(利用三角形相似可以得到)。<br />public function normalize(thickness:Number):void<br />{<br />var norm:Number = this.length/thickness;<br />if( norm == 0 || norm == 1) return;<br />x /= norm;<br />y /= norm;<br />}</p><p>//按指定量位移 Point 對象。<br />public function offset(dx:Number,dy:Number):void<br />{<br />this.x+= dx;<br />this.y+= dy;<br />}</p><p>//將一對極座標轉換為笛卡爾點座標。<br />public static function polar(len:Number,angle:Number):Point2D<br />{<br />var px:Number=len * Math.cos(angle);<br />var py:Number=len * Math.sin(angle);<br />return new Point2D(px,py);<br />}</p><p>//從此點的座標中減去另一個點的座標以建立一個新點<br />public function subtract(v:Point2D):Point2D<br />{<br />var px:Number=this.x - v.x;<br />var py:Number=this.y - v.y;<br />return new Point2D(px,py);<br />}</p><p>//返回包含 x 和 y 座標的值的字串<br />public function toString():String<br />{<br />return "(x=" + x + ", y=" + y + ")";<br />}<br />}<br />}