最近本來想打算藉由Flash CS5的發佈來開發iPhone應用程式,無奈Apple的大刀一揮~ 導致就算用Flash CS5開發出來的iPhone程式也通過不了上架的審核... 一下子打亂了我的一些計劃... 不過還是要練習練習AS3,而本文主要就是用AS3來實現KNN的基本概念,簡單來說KNN是一種可以藉由訓練資料來推測可能結果的演算法(Supervised learning),詳細的程式細節如下:
(本範例初始化的K值為5,玩玩看吧>>knn.swf)
KNN.as
package { import flash.display.*; import flash.events.*; import flash.geom.Point; import flash.utils.*; public class KNN extends MovieClip { private var k:uint = 5; public function KNN() { stage.addEventListener(MouseEvent.MOUSE_UP,put); init(); } public function put(m:MouseEvent):void { var c:Circle = null; var num:uint = this.numChildren; trace(num); var k_dict:Dictionary = new Dictionary(true); var k_arr:Array = new Array(); for(var i = 0 ; i < num ; i++) { var cc:Circle = this.getChildAt(i) as Circle; var dist = Point.distance(new Point(stage.mouseX,stage.mouseY),new Point(cc.x,cc.y)); k_dict[dist] = i; k_arr.push(dist); } k_arr.sort(Array.NUMERIC); var blue = 0; var red = 0; for(var j = 0 ; j < k ; j++) { var nid = k_dict[k_arr[j]]; var c2:Circle = this.getChildAt(nid) as Circle; var cor:uint = c2.getColor(); trace(nid+" "+k_arr[j]+" "+cor); if(cor == 0x0000FF) blue++; else red++; } if(blue > red) c = new Circle(0x0000FF); else c = new Circle(0xFF0000); c.x = stage.mouseX; c.y = stage.mouseY; addChild(c); } public function init():void { for(var i = 0 ; i < 10 ; i++) { var c:Circle = new Circle(0xff0000); c.x = Math.random()*500; c.y = Math.random()*500; addChild(c); } for(i = 0 ; i < 10 ; i++) { var c2:Circle = new Circle(0x0000FF); c2.x = Math.random()*500; c2.y = Math.random()*500; addChild(c2); } } } }
Circle.as
package { import flash.display.*; public class Circle extends Sprite { private var color:uint = 0; public function Circle(c:uint) { this.color = c; this.graphics.lineStyle(5); this.graphics.beginFill(this.color); this.graphics.drawCircle(0,0,20); this.graphics.endFill(); } public function getColor():uint { return this.color; } } }
相關資源
寫得程式挺厲害的!
這是用什麼程式語言寫的嗎?
因為看起來好像是JAVA寫的
2010-05-07 14:06:55
ActionScript 3 寫的,它和Java本來就很相似 :D
2010-05-07 14:30:48