FF: Limaçon

by WLAD forked from Limaçon on 2017-2-9 (diff: 267)
I used RegExr to remove white space.

Increased speed and added animation

Click and move white Point
♥0 | Line 196 | Modified 2017-02-09 14:24:41 | MIT License
play

ActionScript3 source code

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

// forked from J.J's Limaçon on 2017-2-9
package  {
    
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.display.Graphics;
    import flash.geom.Point;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.display.Sprite;
    import com.bit101.components.Label;
    import com.bit101.components.PushButton;
    import com.bit101.components.HSlider;
    import com.bit101.components.Component;
    import com.bit101.components.CheckBox;
    import flash.geom.ColorTransform;
    import com.bit101.components.Slider;
    

    [SWF(backgroundColor=0xffffff, width=480, height=480, frameRate=60)]
    public class Pedal extends MovieClip {
        //taylor series

        public var g:Graphics;
        public var h:int;
        public var w:int;
        public var m:Point;
        public var mo:Point;
        public var cm:Point;
        public var sf:Number=6;
        public var points:Array=[];
        public var O:Point;
        public var isDown:Boolean=false;
        public var ObjClicked:Boolean=false;
        public var Htxs:Vector.<Label>;
        public var Vtxs:Vector.<Label>;
        public var a:Object;
        public var c:Object
        public var clickables:Array=[];
        public var q:Object
        public var theta:Number=0;
    
        public var sliderRadius:Slider;       // Radius slider 
        public var slider:Slider;
        public function Pedal() {
            
            
            Htxs=new Vector.<Label>();
            Vtxs=new Vector.<Label>();
            g=this.graphics;
            h=stage.stageHeight;
            w=stage.stageWidth;
            m=new Point();
            mo=new Point();
            cm=new Point();
            O=new Point(w/2,h/2);
            var mc:Sprite=new Sprite();
                
                    var qc:Sprite=new Sprite();
                    qc.graphics.beginFill(0x101010);
                qc.graphics.drawRect(0,0,w,h);
                    qc.addChild(mc);
                    this.addChild(qc)
                var step:Number=10;
                var st:Number = 0;
            var gc:Graphics=qc.graphics;
            gc.lineStyle(1,0xffffff,.1)
            
                    
            for(var i:int;i<6;i++){
                var tx:Label=new Label(this);
                
                tx.text="0";
                 
                
                tx.x=i*(w/6);
                tx.y=O.y;
                Htxs.push(tx);
                }
                
                for(i=0;i<6;i++){
                tx=new Label(this);
                tx.y=i*(w/6);
                tx.x=O.x;
                Vtxs.push(tx);
                }
                
                a={x:0,y:-2*w/6,isClicked:false,update:null};;
                c={x:0,y:-1*w/6,isClicked:false,update:null};
                
            
                
                    
                    c.update=a.update=function (o:Object){
                    
                    o.y=stage.mouseY-O.y;
                    o.x=stage.mouseX-O.x;
                    }
                    
                    c.update=function (o:Object){
                    
                    o.y=stage.mouseY-O.y;
                    
                    }
                clickables.push(a);
                clickables.push(c);
                
                
                
                g=mc.graphics;
                
                
                sliderRadius = new Slider( Slider.HORIZONTAL, this, 170, 10 );    // CREATE RADIUS SLIDER for ORANGE POINT
                sliderRadius.value = 50;
                sliderRadius.minimum = 0;
                sliderRadius.maximum = 400;
                new Label( this, 170, 20, "Radius" );
                
                
                
                    slider=new Slider(Slider.HORIZONTAL,this,10,10);
                    slider.value=25
                    
                    var l:Label=new Label(this,10,20,"speed");
                    var l2:Label=new Label(this,10,40,"Move red and white points")
                //    slider.name="slider"
                    //slider.metaData="fff"
                    //animated.selected=true;
            qc.addEventListener(MouseEvent.MOUSE_DOWN,onMD);
            qc.addEventListener(MouseEvent.MOUSE_UP,onMU);
            
            
            this.addEventListener(Event.ENTER_FRAME,loop);
             
        }
    
        public function onMD(e:MouseEvent){
            
            
                isDown=true;
            m.setTo(stage.mouseX,stage.mouseY);
            
            }
        public function onMU(e:MouseEvent){
                isDown=false;
            ObjClicked=false;
            for each(var o:Object in clickables){o.isClicked=false;}
            O=O.add(mo);
            mo.setTo(0,0);
            }
        
    public function loop(e:Event):void{
        g.clear();
        
        
        
        if(isDown && ObjClicked==false){
            cm.setTo(stage.mouseX,stage.mouseY);
            mo.setTo(cm.x-m.x,cm.y-m.y);
            O=O.add(mo);
            g.moveTo(m.x,m.y);
            g.lineTo(cm.x,cm.y);
             
            }
        
        
        draw();
            for(var i:int;i<6;i++){
                var tx:Label=Htxs[i];
                tx.y=O.y;
                tx.y=Math.max(tx.y,0);
                tx.y=Math.min(tx.y,h-15)
            var xt:Number = (i / 6) *sf-(O.x/w)*sf;
                        tx.text=xt.toFixed(2)+"";
                var tx2:Label=Vtxs[i];
                tx2.x=O.x;
                tx2.x=Math.max(tx2.x,0)
                tx2.x=Math.min(tx2.x,w-15)
                xt = (i / 6) *sf-(O.y/h)*sf;
                xt*=-1;
            tx2.text=xt.toFixed(2)+"";
                        
            }
        
            
            orangeRotation += 0.3;                   // ANIMATE ORANGE POINT
            a.x = Math.cos( orangeRotation ) * sliderRadius.value;
            a.y = Math.sin( orangeRotation ) * sliderRadius.value;
            
            
            drawLim();
            O=O.subtract(mo);
            
            
    }
    
    private var orangeRotation:Number = 0;
    
    public function drawLim(){
    //    trace(slider.value)
        theta+=.02*Math.PI*(slider.value/50); // INCREASE RADIAL VELOCITY
        var rad:Number=c.y;
        g.drawCircle(O.x,O.y,rad)
        var si:Number=Math.sin(theta);
        var co:Number=Math.cos(theta);
        var p={x:co*rad,y:si*rad}
        g.lineStyle(0,0,0)
        g.beginFill(0xff0000,1);              // DRAW RED POINT
        g.drawCircle(p.x+O.x,p.y+O.y,3);
        g.endFill()
        g.lineStyle(1,0xffffff,1)
    g.moveTo(O.x+p.x+si*-500,O.y+p.y-co*-500)
    g.lineTo(O.x+p.x+si*500,O.y+p.y-co*500);
        
        
    
        var aDotn=a.x*si+a.y*-co;
        
    g.drawCircle(O.x+p.x+si*aDotn,O.y+p.y-co*aDotn,2);
        var dir:Point=new Point(p.x+si*aDotn-a.x,p.y-co*aDotn-a.y);
        g.lineStyle(1,0x00f6ff)
        g.moveTo(O.x+a.x+dir.x*-500,O.y+a.y+dir.y*-500)
        g.lineTo(O.x+a.x+dir.x*500,O.y+a.y+dir.y*500)
    
        points.push(new Point(p.x+si*aDotn,p.y-co*aDotn))
        if(points.length>400) points.shift()
        
        g.lineStyle(3,0xff0000);
        g.moveTo(O.x+points[0].x,O.y+points[0].y)
        for (var i:int;i<points.length;i++){
            var ii:Number=(i/points.length)
            var po:Point=points[i]
            g.lineStyle(3,0xff0000,ii);
            g.lineTo(O.x+po.x,O.y+po.y)
        }
        g.lineStyle(0,0,0)
        
        g.beginFill(0xff5a00,1)               // DRAW ORANGE POINT
        g.drawCircle(a.x+O.x,a.y+O.y,5)
        g.beginFill(0xfffffff);               // DRAW WHITE POINT 
        g.drawCircle(c.x+O.x,c.y+O.y,5)
        if(isDown){
        for each(var o:Object in clickables){
    
            var m=new Point(o.x+O.x-stage.mouseX,o.y+O.y-stage.mouseY)
            var d:Number=m.x*m.x+m.y*m.y;
            if(o.isClicked==true && o.update!=null) o.update(o);
            if(d<25) {
                
                    
                if(ObjClicked==false){
                    ObjClicked=true;
                o.isClicked=true;
                    }
            
                }
            }
        }
        
        }
    
    
    public function draw(){
    g.lineStyle(1,0xffffff);
        g.moveTo(0, O.y);
        g.lineTo(w, O.y);
        g.moveTo(O.x, 0);
        g.lineTo(O.x, h);

            
            
        }
    
    
    }
    
    
}