flash on 2011-4-4

by okoi
...
@author
♥0 | Line 44 | Modified 2011-04-04 13:59:21 | MIT License
play

ActionScript3 source code

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

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Point;
    import flash.display.Graphics;
    
    [SWF(width = "465", height = "465")]
    
    
    /**
     * ...
     * @author 
     */
    public class Main extends Sprite 
    {
        
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            
            graphics.lineStyle(1, 0);
            for ( var i:Number = 0; i < 360; i++ )
            {
                var pos:Point = GetHeartPosition( i / 360, 100 );
                if ( i == 0 )    graphics.moveTo( 465 / 2 + pos.x, 465 / 2 + pos.y );
                else             graphics.lineTo( 465 / 2 + pos.x, 465 / 2 + pos.y );
            }
            
        }
        
        /**
         * 
         * @param    rate 0 ~ 1
         * @param    radius
         * @return
         */
        public function GetHeartPosition( rate:Number, radius:Number ) : Point 
        {
            var min:Number = 10;
            var max:Number = 130;
            
            var length:Number = (max - min) * 2;
            var half:Number = length / 2;
            
            var y:Number;
            
            if ( rate > 0.5 )
            {
                y = Math.sin( (length * (1-rate)) * Math.PI / 180 ) * radius * -1;
            }else
            {
                y = Math.sin( (length * rate) * Math.PI / 180 ) * radius * -1;
            }
            
            var x:Number = -1 * Math.sin( 360 * rate * Math.PI / 180 ) * radius/2;
            
            return    new Point(x, y);
        }
        
        
    }
    
}