flash on 2014-4-12

by tepe
♥0 | Line 223 | Modified 2014-04-16 08:42:54 | MIT License
play

ActionScript3 source code

/**
 * Copyright tepe ( http://wonderfl.net/user/tepe )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/jEgM
 */

package {
    import flash.events.*;
    import flash.text.TextField;
    import flash.display.Sprite;
    import flash.geom.*;
    public class FlashTest extends Sprite {
        private var txt:TextField;
        public function FlashTest() {
            if(stage==null)this.addEventListener(Event.ADDED_TO_STAGE,init);
            else init(null);
        }
        
        private function addPoint(x:Number=0,y:Number=0,col:uint=0x000000):void{
            var p1:Point2 = new Point2(x,y,col);
            addChild(p1);
            p[p1.id]=p1;
            
        }

        
        private function init(e:Event):void{
            
            
            txt = new TextField;
            txt.selectable = false;
            addChild(txt);
            txt.width = 400;
            txt.height = 300;
            txt.text = "test";
            addEventListener(Event.ENTER_FRAME,onFrame); 
            
            
            
            addPoint();//0
            addPoint(200,200,0xff0000);//1
            addPoint(300,300);//2
            addPoint(100,300);//3
            addPoint(100,100);//4
            
            addPoint(200,300);//5
            addPoint(200,100);//6
            addPoint(200,400);//7
            //addPoint(200,100);//8 
            addLine(p[0],p[4],0x0000ff);
            addLine(p[3],p[4],0xff0000);
            addLine(p[0],p[3]);
            addVector(p[2],p[4],0x00ff00);
            //p[3].text = "A";
            //p[2].text = "H";
            
        }
        private function drawLine(p1:Point2,p2:Point2,col:uint=0x000000):void{
            graphics.lineStyle(0,col);
            graphics.moveTo(p1.x,p1.y);
            graphics.lineTo(p2.x,p2.y);
        }
        private function drawVector(p1:Point2,p2:Point2,col:uint=0x000000):void{
            graphics.lineStyle(0,col);
            graphics.moveTo(p1.x,p1.y);
            graphics.lineTo(p2.x,p2.y);
            var a:Number = angle(p1,p2);//ベクトルの角度
            var b:Number = distance(p1,p2);//ベクトルの長さ
            const c:Number = 0.9;//矢印の角度
            const d:Number = 0.1;//矢印の大きさ
            var x3:Number = Math.cos(a-Math.PI*c)*(b*d);
            var y3:Number = Math.sin(a-Math.PI*c)*(b*d);
            graphics.lineTo(p2.x+x3,p2.y+y3);
            graphics.moveTo(p2.x,p2.y);            
            x3 = Math.cos(a+Math.PI*c)*(b*d);
            y3 = Math.sin(a+Math.PI*c)*(b*d);
            graphics.lineTo(p2.x+x3,p2.y+y3);
            
        }

        private const LINE:int = 0;
        private const VECTOR:int = 1;
        private var lineList:Array = new Array();
        //表示する線を登録
        private function addLine(p1:Point2,p2:Point2,col:uint=0x000000):void{
            var line:Array = new Array();
            line[0] = p1;
            line[1] = p2;
            line[2] = col;
            line[3] = LINE;
            lineList[lineList.length]=line;
        }
        //ベクトル登録
        private function addVector(p1:Point2,p2:Point2,col:uint=0x000000):void{
            var line:Array = new Array();
            line[0] = p1;
            line[1] = p2;
            line[2] = col;
            line[3] = VECTOR;
            lineList[lineList.length]=line;
        }
        
        //登録された線をまとめて描画
        private function drawLines():void{
            for(var i:int=0;i<lineList.length;i++){
                var line:Array = lineList[i]; 
                var p1:Point2 = line[0];
                var p2:Point2 = line[1];
                var col:uint = line[2];
                switch(line[3]){
                    case LINE:
                        drawLine(p1,p2,col);
                        break;
                    case VECTOR:
                        drawVector(p1,p2,col);
                        break;
                }
            }

        }
        private function distance(p1:Point2, p2:Point2):Number{
            var disx:Number = p2.x - p1.x;
            var disy:Number = p2.y - p1.y;
            var p:Point = new Point(disx,disy);
            var dis:Number = Math.sqrt(disx*disx + disy*disy);
            return Math.abs(dis);
        }

        private function drawAngle(p1:Point2,p2:Point2,p3:Point2,col:uint=0x000000):void{
            //角度表示サイズを決める
            var n1:Number = distance(p1,p2);
            var n2:Number = distance(p2,p3);
            
            
            //辺の角度を求める
            var a:Number = angle(p1,p2);
            var b:Number = angle(p2,p3);
            var c:Number;
            if(Math.PI < b-a)c = Math.PI*0.5;
            else c = -Math.PI*0.5;

            
            graphics.lineStyle(0,col);
            graphics.moveTo(p1.x,p1.y);
            graphics.lineTo(p2.x,p2.y);
        }
        
        
        private function angle(p1:Point2,p2:Point2):Number{
            var a:Number = p2.x - p1.x;
            var b:Number = p2.y - p1.y;
            var c:Number = Math.atan2(b,a);
            if(c<0)c+= Math.PI*2;
            txt.appendText("\n["+p1.text+"->"+p2.text+"] "+c.toString());
            return c;
        }
        
        private function drawAngle2(x:Number, y:Number, rad:Number, col:uint):void{
            var r:Number=10;
            graphics.lineStyle(0,col);
            graphics.moveTo(x,y);
            graphics.lineTo(x+Math.cos(rad)*r,y+Math.sin(rad)*r);
        }





        private var rad:Number=0;
        private var cnt:int=0;
        private var p:Object = new Object();
        private function onFrame(event:Event):void{
            cnt++;
            rad = Math.PI /180 *cnt;
            var r:Number = 100;
            var x:Number = Math.cos(rad);
            
            
            txt.text = x.toString();
            
            graphics.clear();
            graphics.lineStyle(0,0xaaaaaa);
            graphics.drawCircle(p[1].x,p[1].y,r);
            
            //rad %= Math.PI;
            var x3:Number = Math.cos(rad)*r;
            var y3:Number = Math.sin(rad)*r;
            
            
            p[0].x = p[1].x+r;
            p[0].y = p[1].y;
            
            p[2].x = p[1].x + Math.cos(rad)*r;
            p[2].y = p[1].x;
            
            p[3].x = p[1].x-r;
            p[3].y = p[1].y;

            p[4].x = p[1].x+x3;
            p[4].y = p[1].y+y3;
            /*
            //辺の角度を求める
            var a:Number = angle(p[0],p[4]);
            var b:Number = angle(p[4],p[3]);
            var c:Number = distance(p[0],p[4]);
            var d:Number = distance(p[4],p[3]);
            var e:Number;
            const f:Number = 0.15;
            if(c<d)e = c*f;
            else e = d*f;
            
            p[5].x = p[4].x+Math.cos(a+Math.PI)*e;
            p[5].y = p[4].y+Math.sin(a+Math.PI)*e;

            p[6].x = p[4].x-Math.cos(b+Math.PI)*e;
            p[6].y = p[4].y-Math.sin(b+Math.PI)*e;
            */
            //p[7].x = p[5].x+Math.cos(a+Math.PI/2)*e;
            //p[7].y = p[5].y+Math.sin(a+Math.PI/2)*e;


            
            //if(Math.PI < b-a)c = Math.PI*0.5;
            //else c = -Math.PI*0.5;


            var ax2:Number = 150;
            var ay2:Number = 0;
            var ax:Number = 0;//x2+x3;
            var ay:Number = -r;//y2+y3;
            ax = Math.cos(rad)*ax2 -Math.sin(rad)*ay2;
            ay = Math.sin(rad)*ax2 +Math.cos(rad)*ay2; 
            //p[5].x = p[1].x+ax;
            //p[5].y =p[1].y+ay;
            
            //回転後X = cos(rot)*元x - sin(rot)*元y;
            //回転後Y = sin(rot)*元x + cos(rot)*元y

            drawLines();
            angle(p[1],p[4]);
            angle(p[4],p[1]);
            angle(p[1],p[2]);
        }

    }
}
import flash.text.TextField;
import flash.display.*;
import flash.events.*;

class Point2 extends Sprite{
    private var tytle:TextField = new TextField();
    private static var cnt:int=0;
    private var _col:uint;
    private var _id:int;
    private var _origin:Point2;
    public function Point2(x:Number=0,y:Number=0,col:uint=0x000000):void{
        _id = cnt;
        cnt++;
        
        this.x = x;
        this.y = y;
        
        _col=col;
        tytle.y = -20;
        init();
        
    }
    private function init(e:Event=null):void{
        this.removeEventListener(Event.ADDED_TO_STAGE,init);
        tytle.text = _id.toString();
        tytle.selectable = false;
        this.addChild(tytle);
        draw();
        
    }

    public function draw(col:uint=0x000000):void{
        if(col!=0x000000)_col = col;
        this.graphics.clear();
        this.graphics.lineStyle(0,_col);
        this.graphics.drawCircle(0,0,3);
    }
    public function set text(n:String):void{
        tytle.text = n;
    }
    public function get text():String{
        return tytle.text;
    }

    public function get id():int{
        return _id;
    }
    public function set origin(o:Point2):void{
        _origin = o;
        
    }
    
    private var _x:Number;
    private var _y:Number;
    public function get X():Number{
        if(_origin==null)return _x;
        return _x+_origin.Y;
    }
    public function get Y():Number{
        if(_origin==null)return _y;
        return _y+_origin.Y;
    }
    public function set X(n:Number):void{
        _x = n;
        this.x = this.X;
    }
    public function set Y(n:Number):void{
        _y = n;
        this.y = this.Y;
    }







}