Someone who is good with Math/Triq Plz Help

Hey guys,

Im just messing around with AS3 and math and right now I have a program that generates cosine waves BUT it is out of phase for some reason.

package  {    
    import flash.display.MovieClip;    
    import flash.events.Event;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.sensors.Accelerometer;
    import flash.events.AccelerometerEvent;
    import flash.utils.*;
    import flash.events.TimerEvent;
    
    public class Curves extends MovieClip {
        
        //GlobalSpeed
        public static var GlobalSpeed:int = 8;
        
        //Blitting variables
        public var CANVAS_BD:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000);
        public var CANVAS_BITMAP:Bitmap = new Bitmap(CANVAS_BD);
        public var BACKGROUND_BD:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000);
        public var DOTSHEET1:DotSheet = new DotSheet();
        
        //DotsArray properties
        public var DotDiameter:int = 2;//Should be a factor of stage.stageHeight
        public var DotSpacingFactor:int = 1;//Value of 1 will have Dots touching
        public var DotSpacing:int = DotSpacingFactor * DotDiameter;//Distance between Dots Y values
        public var MaxVerticalDots:int = stage.stageHeight/(DotSpacing);//Max dots that can be fit vertically on screen with spacing included
        public var DotsArray:Array = new Array(2 * (MaxVerticalDots + 1));//+1 for one Dot to be off screen


        //Cosine/sine function: Rotated -90 degrees into f(y)
        public var MAX_AMP:Number = 64;
        public var MIN_AMP:Number = 16;
        public var MAX_FREQ:Number = 128;
        public var MIN_FREQ:Number = 16;
        public var MAX_PHASE:Number = 0;
        public var MIN_PHASE:Number = 0;
        public var GlobalAmplitudeFactor:Number = MIN_AMP;
        public var GlobalFrequencyFactor:Number = MIN_FREQ;
        public var GlobalPhaseFactor:Number = MIN_PHASE;
        public var LeftFunctionOffset:int = stage.stageWidth/4;
        public var RightFunctionOffset:int = 3 * stage.stageWidth/4;
        
        //Modulation variables
        public var AmpModTimer:Timer = new Timer(2000, 0);
        public var FreqModTimer:Timer = new Timer(2000, 0);
        public var PhaseModTimer:Timer = new Timer(2000, 0);


        //Populate DotsArray with Dots and set (x/y)
        public function SetUpDotsArray() {
            for(var i = 0; i < DotsArray.length; i++) {
                if(i == 0 || i == 1) {
                    DotsArray* = new Dot(DotDiameter/2, 0xFFFFFF);
                    DotsArray*.y = -DotSpacing;
                }
                if(i > 1) {
                    DotsArray* = new Dot(DotDiameter/2, 0xFFFF00);
                    DotsArray*.y = DotsArray[i - 2].y - DotSpacing;
                }
                addChild(DotsArray*);
            }
        }
        
        public var AMP_HAS_PEAKED:Boolean = false;
        
        public function ModulateAmplitude(e:TimerEvent) {
            if(!(AMP_HAS_PEAKED)) {
                if(GlobalAmplitudeFactor >= MAX_AMP) {
                    AMP_HAS_PEAKED = true;
                }
                GlobalAmplitudeFactor *= 2;
            }
            if(AMP_HAS_PEAKED) {
                if(GlobalAmplitudeFactor <= MIN_AMP) {
                    AMP_HAS_PEAKED = false;
                }
                GlobalAmplitudeFactor /= 2;
            }
        }
        
        public var FREQ_HAS_PEAKED:Boolean = false;
        
        public function ModulateFrequency() {
            trace(GlobalFrequencyFactor);
            if(!(FREQ_HAS_PEAKED)) {
                if(GlobalFrequencyFactor >= MAX_FREQ) {
                    FREQ_HAS_PEAKED = true;
                }
                GlobalFrequencyFactor *= 1.01;
            }
            if(FREQ_HAS_PEAKED) {
                if(GlobalFrequencyFactor <= MIN_FREQ) {
                    FREQ_HAS_PEAKED = false;
                }
                GlobalFrequencyFactor /= 1.01;
            }
        }
        
        public var PHASE_HAS_PEAKED:Boolean = false;
        
        public function ModulatePhase(e:TimerEvent) {
            //trace(GlobalPhaseFactor);
            if(!(PHASE_HAS_PEAKED)) {
                if(GlobalPhaseFactor >= MAX_PHASE) {
                    PHASE_HAS_PEAKED = true;
                }
                GlobalPhaseFactor += 1;
            }
            if(PHASE_HAS_PEAKED) {
                if(GlobalPhaseFactor <= MIN_PHASE) {
                    PHASE_HAS_PEAKED = false;
                }
                GlobalPhaseFactor -= 1;
            }
        }
        
        public function SetDotCoordinates(d:Dot) {
            //First Dot, DotsArray[0], is treated differently
            if(DotsArray.indexOf(d) == 0 || DotsArray.indexOf(d) == 1) {
                //When zero needs to come back up top
                if(d.y - DotDiameter/2 >= stage.stageHeight) {
                    //It's y value should follow that of the last element in the array
                    d.y = DotsArray[DotsArray.length - 1].y - DotSpacing;
                    //trace(getTimer());
                }
            }
            //All dots greater than zero
            if(DotsArray.indexOf(d) > 1) {
                if(d.y - DotDiameter/2 >= stage.stageHeight) {
                    d.y = DotsArray[DotsArray.indexOf(d) - 2].y - DotSpacing - GlobalSpeed;
                }
            }
            //When Dot is not on screen, assign its function factors
            if(d.y < 0) {
                d.AmplitudeFactor = GlobalAmplitudeFactor;
                d.FrequencyFactor = GlobalFrequencyFactor;
                d.PhaseFactor = GlobalPhaseFactor;
            }
            if(DotsArray.indexOf(d) % 2 == 0) {
                d.x = d.AmplitudeFactor * Math.cos((d.y + d.PhaseFactor)/d.FrequencyFactor) + LeftFunctionOffset;
            }
            if(DotsArray.indexOf(d) % 2 > 0) {
                d.x = d.AmplitudeFactor * Math.cos((d.y + d.PhaseFactor)/d.FrequencyFactor) + RightFunctionOffset;
            }
        }
        
        public function DrawLines() {
            graphics.clear();
            for(var h = 0; h < DotsArray.length; h++) {
                if(h % 2 == 0) {
                    graphics.lineStyle(1, 0xFFFF00);
                    graphics.moveTo(DotsArray[h].x, DotsArray[h].y);
                    graphics.lineTo(0, DotsArray[h].y);
                }
                if(h % 2 > 0) {
                    graphics.lineStyle(1, 0xFFFF00);
                    graphics.moveTo(DotsArray[h].x, DotsArray[h].y);
                    graphics.lineTo(stage.stageWidth, DotsArray[h].y);
                }
            }
        }
        
        public function MoveDots() {
            //Set coordinates and move
            for(var j = 0; j < DotsArray.length; j++) {
                SetDotCoordinates(DotsArray[j]);
                DotsArray[j].y += GlobalSpeed;
            }
        }
        
        public function Curves() {
            addEventListener(Event.ENTER_FRAME, MainLoop);
            //AmpModTimer.addEventListener(TimerEvent.TIMER, ModulateAmplitude);
            //FreqModTimer.addEventListener(TimerEvent.TIMER, ModulateFrequency);
            //PhaseModTimer.addEventListener(TimerEvent.TIMER, ModulatePhase);
            //AmpModTimer.start();
            //FreqModTimer.start();
            //PhaseModTimer.start();
            SetUpDotsArray();
        }
        
        public function InputVars() {
            GlobalAmplitudeFactor = Number(AMP.text);
            GlobalFrequencyFactor = Number(FREQ.text);
            GlobalPhaseFactor = Number(PHASE.text);
        }
        
        public function MainLoop(e:Event) {
            MoveDots();
            ModulateFrequency();
            DrawLines();
            //InputVars();
        }


    }
    
}



package  {    
    import flash.display.Shape;
    
    public class Dot extends Shape {
        
        public var AmplitudeFactor:Number;
        public var FrequencyFactor:Number;
        public var PhaseFactor:Number;
        
        public function Dot(radius:int, color:uint) {
            graphics.beginFill(color);
            graphics.drawCircle(0, 0, radius);
            graphics.endFill();
        }


    }
    
}



http://www.swfcabin.com/open/1395960897

Right now it looks like its out of phase but I have the phase set to 0. Any ideas?? Thanks in advance.