hey all,

working on getting a grid to expand into a circle.

I would like to:

   - place items in a grid
   - calculate angle from centerpoint(or any desired point)
   - have the items align into a circle at the nearest point, *keeping the
   same angle*


here's my progress:
http://lab.freestyleinteractive.com/jared/maths/radius.html

the start and end is pretty close to what i want, but i'd like the items to
rearrange keeping the same angle,
so an item that was on the top left would stay on the top left area and an
item to the right in the grid would stay to the right in a circle.

hope this makes sense.

code is below, thanks for any help!

private function init():void{
            //create and center container clip
            mainClip = new MovieClip(); //container clip for all items
            addChild(mainClip);
            mainClip.x = stage.stageWidth / 2;
            mainClip.y = stage.stageHeight / 2;

            createParticles();

            //draw circle around centerpoint for visual reference
            mainClip.graphics.lineStyle(2, 0xffffff, .5);
            mainClip.graphics.drawCircle(0, 0, 100);
            //
            stage.addEventListener(MouseEvent.CLICK, expand);

}

private function createParticles():void{
            for(var i:int = 0; i<maxParticles; i++){

                var particle:Particle = new Particle();//just a sprite with
some properties
               //create grid, calculate original X & Y positons;
                particle.i = i;
                particle.x = (particle.width + 5) * (i % 20);
                particle.y = (particle.height + 5) * Math.floor(i / 20);
                particle.ox = particle.x;
                particle.oy = particle.y;
                //calculate angle from the 0 point;
                var rad:Number = Math.atan2(mainClip.x-particle.y,
mainClip.y-particle.x);
                var angle:Number = rad * 180 / Math.PI;
                particle.angle = angle;
                mainClip.addChild(particle);
                //put all particles in an array to be referenced below
                particlesArr.push(particle);
            }

            //code below is to recenter the grid on the centerpoint instead
of top left
            var tmpw:Number = mainClip.width;
            var tmph:Number = mainClip.height;
            //loop through to offset the grid so it's even within the page
            for(i = 0; i<particlesArr.length; i++){
                var p:Particle = particlesArr[i];
                p.x -= tmpw* 0.5;
                p.y -= tmph* 0.5;
                p.ox = p.x;
                p.oy = p.y
            }

                addEventListener(Event.ENTER_FRAME, moveAll);
        }


        private function expand(e:MouseEvent):void{
            isGrid = !isGrid;

            for each (var p in particlesArr) {
                p.tgtx = Math.cos(p.angle)*mag;
                p.tgty = Math.sin(p.angle)*mag;
            }

        }


        private function moveAll(e:Event):void{
            var mainTgtX:Number;
            var mainTgtY:Number;

            if(!isGrid){
                for each (var p in particlesArr) {
                    p.x += (p.tgtx - p.x) /20;
                    p.y += (p.tgty - p.y) /20;
                }

            }else {

               for each (p in particlesArr) {
                    p.x += (p.ox - p.x) /20;
                    p.y += (p.oy- p.y) /10;
                }

            }
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to