トップページ > Flash入門 > グラフを描く(2)

sin関数のグラフを描く

1点ずつ描画して関数を描きます

基本的に前ページの内容を使っています。 1点ずつ細かい直線を描画して曲線のグラフに見せます。 スプライトの座標は下方向へ大きくなるので,計算した関数の値に対して上下逆転する点にだけ注意しておきます。

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.display.Graphics;
    import flash.display.*;
 
    //画面サイズと背景色,フレームレートを設定
    [SWF(width = "600", height = "300", frameRate = "60", backgroundColor = "0xffffcc")]  
     
    public class Main extends Sprite 
    {
        //main関数
        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
             
            //スプライトを用意する
            var sp:Sprite = new Sprite();
             
            //位相用の変数
            var pre_phase:Number = 0;
            var next_phase:Number = 0;
             
            //yの値用の変数
            var pre_y:Number = 0;
            var next_y:Number = 0;
             
            //振幅
            var amplitude:Number = 130;
             
            //オフセット
            var offset:Number = 150;
             
            //とりあえずx軸,y軸を描く
            sp.graphics.lineStyle(2, 0x000000);
            sp.graphics.moveTo(0, 150);
            sp.graphics.lineTo(600, 150);
            sp.graphics.moveTo(300, 0);
            sp.graphics.lineTo(300, 300);
                         
            //線種を設定。太さ5,色はうすい青
            sp.graphics.lineStyle(5, 0xccccFF);
             
            for (var i:int = 0; i < 599; i++ )
            {
                //位相を先に用意しておく。2*pi/1周期のpixel数 * i
                pre_phase = 2 * Math.PI / 150 * i;
                next_phase = 2 * Math.PI / 150 * (i + 1);
                 
                //yの値を用意(sprite上では下方向ほど座標が大きい点に注意)
                pre_y = -amplitude * Math.sin(pre_phase) + offset;
                next_y = -amplitude * Math.sin(next_phase) + offset;
                 
                //1点ずつ描く
                sp.graphics.moveTo(i, pre_y);
                sp.graphics.lineTo(i + 1, next_y);
            }
 
            //スプライトを表示
            addChild(sp);
        }   
    }   
}



前へ 次へ