root/as3/PotrAs/samples/potras/algorithm/BestPoligonTest.as

リビジョン 86, 2.6 kB (コミッタ: nitoyon, コミット時期: 5 年 前)

initial version

Line 
1 package
2 {
3         import com.nitoyon.potras.*;
4         import flash.display.*;
5         import flash.geom.*;
6         import flash.events.*;
7
8         [SWF(width="320",height="320")]
9         public class BestPoligonTest extends Sprite
10         {
11                 [Embed(source='data1.gif')]
12                 private var Data1:Class;
13
14                 private static const SCALE:int = 8;
15
16                 public function BestPoligonTest():void
17                 {
18                         var bmp:Bitmap = new Data1();
19                         bmp.scaleX = bmp.scaleY = SCALE;
20                         var bmd:BitmapData = bmp.bitmapData;
21                         addChild(bmp);
22
23                         var i:int = 0;
24                         var j:int = 0;
25
26                         var bmdOver:BitmapData = new BitmapData(bmd.width, bmd.height);
27                         var bmpOver:Bitmap = new Bitmap(bmdOver);
28                         bmdOver.fillRect(new Rectangle(0, 0, bmd.width, bmd.height), 0);
29                         bmpOver.scaleX = bmpOver.scaleY = SCALE;
30                         addChild(bmpOver);
31
32                         var pathList:Array = PathList.create(bmp.bitmapData);
33                         drawPath(bmd, pathList);
34
35                         var lons:Array = [];
36                         for(i = 0; i < pathList.length; i++)
37                         {
38                                 var sums:Array = ProcessPath.calcSums(pathList[i].priv as Array) as Array;
39                                 lons[i] = ProcessPath.calcLon(pathList[i].priv as Array);
40                                 var po:Array = ProcessPath.bestPolygon(pathList[i].priv as Array, lons[i], sums);
41
42                                 for each(var num:int in po)
43                                 {
44                                         bmdOver.setPixel32(pathList[i].priv[num].x, pathList[i].priv[num].y, 0xffff0000);
45                                 }
46                         }
47
48                 }
49
50                 public static function drawPath(bmd:BitmapData, pathList:Array):void
51                 {
52                         bmd.fillRect(new Rectangle(0, 0, bmd.width, bmd.height), 0xffffffff);
53                         for(var i:int = 0; i < pathList.length; i++)
54                         {
55                                 for(var j:int = 0; j < pathList[i].priv.length; j++)
56                                 {
57                                         var pt:Point = pathList[i].priv[j] as Point;
58                                         if(pt)
59                                         {
60                                                 bmd.setPixel(pt.x, pt.y, 0x999999);
61                                         }
62                                 }
63                         }
64                 }
65
66                 public function drawLon(bmd:BitmapData, pathList:Array, lons:Array, i:int, j:int):void
67                 {
68                         var pt:Point = pathList[i].priv[j] as Point;
69                         if(pt)
70                         {
71                                 bmd.lock();
72                                 bmd.fillRect(new Rectangle(0, 0, bmd.width, bmd.height), 0x00ffffff);
73                                 bmd.setPixel32(pt.x, pt.y, 0xff000000);
74
75                                 var k:int = j;
76                                 while(true)
77                                 {
78                                         k = (k + 1) % lons[i].length;
79                                         if(k == lons[i][j])
80                                         {
81                                                 break;
82                                         }
83
84                                         pt = pathList[i].priv[k] as Point;
85                                         bmd.setPixel32(pt.x, pt.y, 0xffff0000);
86
87                                 }
88                                 bmd.unlock();
89                         }
90                 }
91
92                 private function getIJfromPoint(pathList:Array, point:Point):Array
93                 {
94                         for(var i:int = 0; i < pathList.length; i++)
95                         {
96                                 for(var j:int = 0; j < pathList[i].priv.length; j++)
97                                 {
98                                         if(point.equals(pathList[i].priv[j] as Point))
99                                         {
100                                                 return [i, j]
101                                         }
102                                 }
103                         }
104                         return null;
105                 }
106         }
107 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。