※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


FAVORITE BY
:
:
:
勉強になった
:
:
分かりやすい!
:
math.random勉強になります
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
algorithmrandom
:
random
:
Math数学は奥が深イイ
:
:
:
良サンプル。
:
:
:
勉強になる
:
:
:
chart
:
:
:
randomalgorithmとても勉強になりました。
:
ランダム
:
ランダムパターンいろいろ
:
これがしたかった
:
:
これはすばらしい。勉強させてもらいます。
:
:
ためになります
:
:
:
algorithmランダムランダム
:
これはいいさんぷる
:
ランダムパターン
:
:
:
randomrandom patterns
:
ランダムパターンへー!これは勉強になるなあ
:
:
random
:
正規乱数を一様乱数の和で近似する
:
勉強になる
:
oh! cool randamman!
FORKED

ランダムパターンの種類を色々紹介するよ! forked from: ランダムパターンの種類を色々紹介するよ! [diff(1)]

  1. // forked from tail_y's ランダムパターンの種類を色々紹介するよ!
  2. package {
  3.     
  4.     /*
  5.       ランダムパターンの種類を色々紹介するよ! 
  6.       →キーで色々見れるよ。
  7.       
  8.       今回は仕組みが違うから出さなかったけど、このほかにも、ゲーム制作でよく使うものとして
  9.       前回出た結果と同じものの確率が減っていく、抽選ランダムというものもあるよ。
  10.      */
  11.     
  12.     import flash.display.Sprite;
  13.     import flash.display.StageQuality;
  14.     import flash.events.Event;
  15.     import flash.events.KeyboardEvent;
  16.     import flash.text.TextField;
  17.     public class RandomPattern extends Sprite
  18.     {
  19.         public static const STAGE_W:uint = 465;
  20.         public static const STAGE_H:uint = 465;
  21.         
  22.         public static const CHART_W:uint = 300;
  23.         public static const CHART_H:uint = 300;
  24.         
  25.         private var _randomFunction:Function;     // ランダム実験する関数を入れるよ
  26.         private var _titleTf:TextField;
  27.         private var _captionTf:TextField;
  28.         private var _chart:RandomChart;
  29.         
  30.         private var _calc:Boolean = false;
  31.         private var _patternNum:int = -1;
  32.         
  33.         public function RandomPattern()
  34.         {
  35.             addEventListener(Event.ADDED_TO_STAGE, init);    // flexBuilderとの互換性。
  36.         }
  37.                 
  38.         public function init(event:Event):void{
  39.     
  40.              // キャプチャを止めます
  41.             Wonderfl.disable_capture();
  42.              
  43.             // SWF設定
  44.             stage.frameRate = 24
  45.             stage.quality = StageQuality.HIGH;
  46.             var bg:Sprite = new Sprite();
  47.             bg.graphics.beginFill(0xffffff);
  48.             bg.graphics.drawRect(00, STAGE_W, STAGE_H);
  49.             addChild(bg);
  50.             
  51.             // ランダム用関数
  52.             _randomFunction = null;
  53.             
  54.             // タイトル表示
  55.             _titleTf = new TextField();
  56.             _titleTf.width = STAGE_W;
  57.             _titleTf.height = 20;
  58.             _titleTf.text = "ランダムパターンのテストと紹介をするよ!";
  59.             addChild(_titleTf);
  60.             
  61.             // 説明文表示
  62.             _captionTf = new TextField();
  63.             _captionTf.width = STAGE_W;
  64.             _captionTf.height = 80;
  65.             _captionTf.y = 25;
  66.             _captionTf.text = "キーの左右で、ランダムの種類を切り替えるよ。\n下のグラフに、ランダムの分布結果が出るよ";
  67.             addChild(_captionTf);
  68.             
  69.             // グラフを用意
  70.             _chart = new RandomChart(CHART_W, CHART_H);
  71.             _chart.x = 82;
  72.             _chart.y = 100;
  73.             addChild(_chart);
  74.             
  75.             // キーイベント
  76.             stage.addEventListener(KeyboardEvent.KEY_DOWN, key);
  77.             
  78.             // フレームイベント
  79.             stage.addEventListener(Event.ENTER_FRAME, frame);
  80.         }
  81.         private function key(event:KeyboardEvent):void{    // キーイベント
  82.             // キーの左右で切り替え
  83.             if (event.keyCode == 39) changeRandomList(1);
  84.             if (event.keyCode == 37) changeRandomList(-1);
  85.         }
  86.         private function changeRandomList(lr:int):void{    // ランダムの関数を切り替えて、グラフをリセットするよ。
  87.             if (_patternNum == -1) _patternNum = 0;
  88.             else _patternNum = (_patternNum + lr + _patternList.length)%_patternList.length;
  89.             var pattern:Object = _patternList[_patternNum];
  90.             _titleTf.text = pattern.name;
  91.             _captionTf.text = pattern.caption;
  92.             _randomFunction = pattern.func;
  93.             _chart.reset();    // リセット;
  94.             _calc = true;    // 計算ループ開始
  95.         }
  96.         
  97.         private function frame(event:Event):void{    // フレームイベント
  98.             if (_calc) calcChart();
  99.         }
  100.         private function calcChart():void{    // ランダムを計算して、グラフに反映
  101.             for (var i:int = 0; i < 500; i++){
  102.                 _chart.addValue(_randomFunction());
  103.                 if (_chart.isMax()){    // どこかが一番上まで行ったら
  104.                     _calc = false;    // 計算ループ終了
  105.                     break;
  106.                 }
  107.             }
  108.         }
  109.         
  110.         // =======================================================以下がランダム関数
  111.         
  112.         private var _patternList:Array = [
  113.             {name:"普通のランダム",    func:normalRandom,    caption:"0~1の出現率が一定になる。\n上に行くにしたがってバラつきが出るのは全共通。"},
  114.             {name:"平方ランダム1",    func:powerRandom,    caption:"ランダムを2乗したもの。\n0付近が露骨に多くなるのが特徴。"},
  115.             {name:"平方ランダム2",    func:powerRandom2,    caption:"ランダムを2回出し、それをかけたもの。\n前のものより、0の露骨さが減り、なめらかになる。"},
  116.             {name:"平方根ランダム",    func:sqrtRandom,    caption:"ランダムをルートで囲ったもの。\n0に近づくにつれ、綺麗に出現度が減る。\n使いやすい。"},
  117.             {name:"2ランダムの和",    func:plusRandom2,    caption:"ランダムを2回出し、足したもの。\n中央付近が高い3角形になる。\nサイコロを2個振ると合計6付近が出やすいのはこのため。"},
  118.             {name:"3ランダムの和",    func:plusRandom3,    caption:"ランダムを3回出し、足したもの。\n中央付近が高い、正規分布に似た形になる。\n自然物などをそれっぽく見せるのに有用。"},
  119.             {name:"指定割合ランダム",    func:oddsRandom_0,
  120.                 caption:"ゲームによく使われる整数指定のランダム。\n指定した数の割合でランダムを出してくれる。\n今回の指定は[5, 10, 10, 20, 10, 8, 5, 0, 10, 20]\n戻り値が整数なのでグラフ上は飛び飛びになる。"},
  121.             {name:"変形4平方ランダム balance=0.5 velvet=0.3",    func:transRandom4_0,
  122.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=0.5 velvet=0.3を指定すると、中央の高い正規分布風に。"},
  123.             {name:"変形4平方ランダム balance=0.3 velvet=0.2",    func:transRandom4_1,
  124.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=0.3 velvet=0.6を指定すると、左側にずれたドーム型分布に。"},
  125.             {name:"変形4平方ランダム balance=1.0 velvet=0.5",    func:transRandom4_2,
  126.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=1.0 velvet=0.5を指定すると、1付近がなだらかに高い分布に。"},
  127.         ]
  128.         
  129.         // 普通のランダム。
  130.         public function normalRandom():Number{
  131.             return Math.random();
  132.         }
  133.         
  134.         // 平方ランダム。
  135.         public function powerRandom():Number{
  136.             return Math.pow(Math.random(), 2);
  137.         }
  138.         
  139.         // 平方ランダムその2。
  140.         public function powerRandom2():Number{
  141.             return Math.random()*Math.random();
  142.         }
  143.         
  144.         // 平方根ランダム。
  145.         public function sqrtRandom():Number{
  146.             return Math.sqrt(Math.random());
  147.         }
  148.         
  149.         // 2ランダムの和。
  150.         public function plusRandom2():Number{
  151.             return (Math.random()+Math.random())/2
  152.         }
  153.         
  154.         // 3ランダムの和。
  155.         public function plusRandom3():Number{
  156.             return (Math.random()+Math.random()+Math.random())/3
  157.         }
  158.         
  159.         // 指定割合ランダム
  160.         public function oddsRandom_0():Number{
  161.             var odds:Array = [5101020108501020];
  162.             return oddsRandom(odds) / odds.length;    // グラフ描画の関係上、1以下の数にして返す。
  163.         }
  164.         /* 
  165.             指定割合ランダム
  166.             指定された配列の割合に沿って整数値を返す。
  167.         */
  168.         public static function oddsRandom(arg:Array):int{
  169.             if (arg.length == 0return 0;
  170.             var maxNum:Number = 0;
  171.             var i:int;
  172.             for (i = 0; i < arg.length; i++){
  173.                 if (isNaN(arg[i])) continue;
  174.                 maxNum += arg[i];
  175.             }
  176.             var mainRandom:Number = int(Math.random()*maxNum);
  177.             for (i = 0; i < arg.length; i++){
  178.                 if (isNaN(arg[i])) continue;
  179.                 
  180.                 mainRandom -= arg[i];
  181.                 if (mainRandom < 0){
  182.                     return i;
  183.                 }
  184.             }
  185.             return -1;    // 数値なしError
  186.         }
  187.         
  188.         // 変形4平方ランダム。balance=0.5 velvet=0.3
  189.         public function transRandom4_0():Number{
  190.             return transRandom4(0.50.3);
  191.         }
  192.         // 変形4平方ランダム。balance=0.3 velvet=0.6
  193.         public function transRandom4_1():Number{
  194.             return transRandom4(0.30.6);
  195.         }
  196.         // 変形4平方ランダム。balance=1.0 velvet=0.5
  197.         public function transRandom4_2():Number{
  198.             return transRandom4(1.00.5);
  199.         }
  200.         /* 
  201.            変形4平方ランダム。
  202.            値に沿ってrandomの割合を変換して返す。
  203.            中心点に設定した部分が一番確率が高く、両脇の確率がほぼ0になる。
  204.            
  205.            balance - 中心点の位置。0~1で指定する。省略すれば0.5
  206.            velvet  - なだらかさ。0~1で指定する。
  207.                 0で尖った形(人←こんなん)、0.2で3角形、0.3で正規分布に近く、
  208.                 0.5~0.7でドーム型、0.9で台形になり、1は普通のランダムと同じ一様な分布となる
  209.                 省略すれば0.3
  210.          */
  211.         public function transRandom4(balance:Number = 0.5, velvet:Number = 0.3):Number{
  212.             var ans:Number;
  213.             var sqrtFunctionY:Number;
  214.             var reBalance:Number;
  215.             var x:Number;
  216.             x = Math.random();
  217.             if (x < balance){
  218.                 sqrtFunctionY = sqrt4(x / balance) * balance;
  219.             }else{
  220.                 reBalance = 1 - balance;
  221.                 sqrtFunctionY= -sqrt4((1 - x)/reBalance) * reBalance + 1;
  222.             }
  223.             ans = sqrtFunctionY*(1 - velvet) + x * velvet;
  224.             return ans;
  225.         }
  226.         private function sqrt4(arg:Number):Number{
  227.             return Math.sqrt(Math.sqrt(arg));
  228.         }
  229.     }
  230. }
  231.     import flash.display.Sprite;
  232.     
  233. class RandomChart extends Sprite{
  234.     
  235.     private var _w:int;
  236.     private var _h:int;
  237.     private var _rate:Number;
  238.     private var _isMax:Boolean = false;
  239.     
  240.     private var _valueList:Array;
  241.     private var _markerList:Array;
  242.     
  243.     function RandomChart(w:int, h:int, rate:Number = 1){
  244.         _w = w;
  245.         _h = h;
  246.         _rate = rate;
  247.         _markerList = [];
  248.         for (var i:int = 0; i < _w; i++){
  249.             var marker:Marker = new Marker();
  250.             _markerList.push(marker);
  251.             addChild(marker);
  252.             marker.x = i;
  253.         }
  254.         graphics.lineStyle(0, 0xffaa22);
  255.         graphics.moveTo(00);
  256.         graphics.lineTo(0, h);
  257.         graphics.lineTo(w, h);
  258.         
  259.         reset();
  260.     }
  261.     
  262.     public function reset():void{
  263.         _isMax = false;
  264.         _valueList = [];
  265.         for (var i:int = 0; i < _w; i++){
  266.             _valueList.push(0);
  267.             moveMarkerY(i);
  268.         }
  269.     }
  270.     
  271.     public function addValue(value:Number):void{
  272.         var num:int = int(value * _w);
  273.         _valueList[num]+=_rate;
  274.         moveMarkerY(num);
  275.         if (_h <= _valueList[num]) _isMax = true;
  276.     }
  277.     private function moveMarkerY(num:int):void{
  278.         var marker:Marker = _markerList[num];
  279.         marker.y = _h - _valueList[num];
  280.     }
  281.     
  282.     public function isMax():Boolean{
  283.         return _isMax;
  284.     }
  285. }
  286. class Marker extends Sprite{
  287.     function Marker(){
  288.         graphics.beginFill(0x88cc22, 0.4);
  289.         graphics.drawRect(-3, -366);
  290.         graphics.endFill();
  291.     }
  292. }
noswf

ランダムパターンの種類を色々紹介するよ! forked from: ランダムパターンの種類を色々紹介するよ! [diff(2)]

  1. // forked from tail_y's ランダムパターンの種類を色々紹介するよ!
  2. package {
  3.     
  4.     /*
  5.       ランダムパターンの種類を色々紹介するよ! 
  6.       →キーで色々見れるよ。
  7.       
  8.       今回は仕組みが違うから出さなかったけど、このほかにも、ゲーム制作でよく使うものとして
  9.       前回出た結果と同じものの確率が減っていく、抽選ランダムというものもあるよ。
  10.      */
  11.     
  12.     import flash.display.Sprite;
  13.     import flash.display.StageQuality;
  14.     import flash.events.Event;
  15.     import flash.events.KeyboardEvent;
  16.     import flash.text.TextField;
  17.     public class RandomPattern extends Sprite
  18.     {
  19.         public static const STAGE_W:uint = 465;
  20.         public static const STAGE_H:uint = 465;
  21.         
  22.         public static const CHART_W:uint = 300;
  23.         public static const CHART_H:uint = 300;
  24.         
  25.         private var _randomFunction:Function;     // ランダム実験する関数を入れるよ
  26.         private var _titleTf:TextField;
  27.         private var _captionTf:TextField;
  28.         private var _chart:RandomChart;
  29.         
  30.         private var _calc:Boolean = false;
  31.         private var _patternNum:int = -1;
  32.         
  33.         public function RandomPattern()
  34.         {
  35.             addEventListener(Event.ADDED_TO_STAGE, init);    // flexBuilderとの互換性。
  36.         }
  37.                 
  38.         public function init(event:Event):void{
  39.     
  40.              // キャプチャを止めます
  41.             Wonderfl.disable_capture();
  42.              
  43.             // SWF設定
  44.             stage.frameRate = 24
  45.             stage.quality = StageQuality.HIGH;
  46.             var bg:Sprite = new Sprite();
  47.             bg.graphics.beginFill(0xffffff);
  48.             bg.graphics.drawRect(00, STAGE_W, STAGE_H);
  49.             addChild(bg);
  50.             
  51.             // ランダム用関数
  52.             _randomFunction = null;
  53.             
  54.             // タイトル表示
  55.             _titleTf = new TextField();
  56.             _titleTf.width = STAGE_W;
  57.             _titleTf.height = 20;
  58.             _titleTf.text = "ランダムパターンのテストと紹介をするよ!";
  59.             addChild(_titleTf);
  60.             
  61.             // 説明文表示
  62.             _captionTf = new TextField();
  63.             _captionTf.width = STAGE_W;
  64.             _captionTf.height = 80;
  65.             _captionTf.y = 25;
  66.             _captionTf.text = "キーの左右で、ランダムの種類を切り替えるよ。\n下のグラフに、ランダムの分布結果が出るよ";
  67.             addChild(_captionTf);
  68.             
  69.             // グラフを用意
  70.             _chart = new RandomChart(CHART_W, CHART_H);
  71.             _chart.x = 82;
  72.             _chart.y = 100;
  73.             addChild(_chart);
  74.             
  75.             // キーイベント
  76.             stage.addEventListener(KeyboardEvent.KEY_DOWN, key);
  77.             
  78.             // フレームイベント
  79.             stage.addEventListener(Event.ENTER_FRAME, frame);
  80.         }
  81.         private function key(event:KeyboardEvent):void{    // キーイベント
  82.             // キーの左右で切り替え
  83.             if (event.keyCode == 39) changeRandomList(1);
  84.             if (event.keyCode == 37) changeRandomList(-1);
  85.         }
  86.         private function changeRandomList(lr:int):void{    // ランダムの関数を切り替えて、グラフをリセットするよ。
  87.             if (_patternNum == -1) _patternNum = 0;
  88.             else _patternNum = (_patternNum + lr + _patternList.length)%_patternList.length;
  89.             var pattern:Object = _patternList[_patternNum];
  90.             _titleTf.text = pattern.name;
  91.             _captionTf.text = pattern.caption;
  92.             _randomFunction = pattern.func;
  93.             _chart.reset();    // リセット;
  94.             _calc = true;    // 計算ループ開始
  95.         }
  96.         
  97.         private function frame(event:Event):void{    // フレームイベント
  98.             if (_calc) calcChart();
  99.         }
  100.         private function calcChart():void{    // ランダムを計算して、グラフに反映
  101.             for (var i:int = 0; i < 500; i++){
  102.                 _chart.addValue(_randomFunction());
  103.                 if (_chart.isMax()){    // どこかが一番上まで行ったら
  104.                     _calc = false;    // 計算ループ終了
  105.                     break;
  106.                 }
  107.             }
  108.         }
  109.         
  110.         // =======================================================以下がランダム関数
  111.         
  112.         private var _patternList:Array = [
  113.             {name:"普通のランダム",    func:normalRandom,    caption:"0~1の出現率が一定になる。\n上に行くにしたがってバラつきが出るのは全共通。"},
  114.             {name:"平方ランダム1",    func:powerRandom,    caption:"ランダムを2乗したもの。\n0付近が露骨に多くなるのが特徴。"},
  115.             {name:"平方ランダム2",    func:powerRandom2,    caption:"ランダムを2回出し、それをかけたもの。\n前のものより、0の露骨さが減り、なめらかになる。"},
  116.             {name:"平方根ランダム",    func:sqrtRandom,    caption:"ランダムをルートで囲ったもの。\n0に近づくにつれ、綺麗に出現度が減る。\n使いやすい。"},
  117.             {name:"2ランダムの和",    func:plusRandom2,    caption:"ランダムを2回出し、足したもの。\n中央付近が高い3角形になる。\nサイコロを2個振ると合計6付近が出やすいのはこのため。"},
  118.             {name:"3ランダムの和",    func:plusRandom3,    caption:"ランダムを3回出し、足したもの。\n中央付近が高い、正規分布に似た形になる。\n自然物などをそれっぽく見せるのに有用。"},
  119.             {name:"指定割合ランダム",    func:oddsRandom_0,
  120.                 caption:"ゲームによく使われる整数指定のランダム。\n指定した数の割合でランダムを出してくれる。\n今回の指定は[5, 10, 10, 20, 10, 8, 5, 0, 10, 20]\n戻り値が整数なのでグラフ上は飛び飛びになる。"},
  121.             {name:"変形4平方ランダム balance=0.5 velvet=0.3",    func:transRandom4_0,
  122.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=0.5 velvet=0.3を指定すると、中央の高い正規分布風に。"},
  123.             {name:"変形4平方ランダム balance=0.3 velvet=0.2",    func:transRandom4_1,
  124.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=0.3 velvet=0.6を指定すると、左側にずれたドーム型分布に。"},
  125.             {name:"変形4平方ランダム balance=1.0 velvet=0.5",    func:transRandom4_2,
  126.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=1.0 velvet=0.5を指定すると、1付近がなだらかに高い分布に。"},
  127.         ]
  128.         
  129.         // 普通のランダム。
  130.         public function normalRandom():Number{
  131.             return Math.random();
  132.         }
  133.         
  134.         // 平方ランダム。
  135.         public function powerRandom():Number{
  136.             return Math.pow(Math.random(), 2);
  137.         }
  138.         
  139.         // 平方ランダムその2。
  140.         public function powerRandom2():Number{
  141.             return 1-(Math.random()*Math.random());
  142.         }
  143.         
  144.         // 平方根ランダム。
  145.         public function sqrtRandom():Number{
  146.             return Math.sqrt(Math.random());
  147.         }
  148.         
  149.         // 2ランダムの和。
  150.         public function plusRandom2():Number{
  151.             return (Math.random()+Math.random())/2
  152.         }
  153.         
  154.         // 3ランダムの和。
  155.         public function plusRandom3():Number{
  156.             return (Math.random()+Math.random()+Math.random())/3
  157.         }
  158.         
  159.         // 指定割合ランダム
  160.         public function oddsRandom_0():Number{
  161.             var odds:Array = [5101020108501020];
  162.             return oddsRandom(odds) / odds.length;    // グラフ描画の関係上、1以下の数にして返す。
  163.         }
  164.         /* 
  165.             指定割合ランダム
  166.             指定された配列の割合に沿って整数値を返す。
  167.         */
  168.         public static function oddsRandom(arg:Array):int{
  169.             if (arg.length == 0return 0;
  170.             var maxNum:Number = 0;
  171.             var i:int;
  172.             for (i = 0; i < arg.length; i++){
  173.                 if (isNaN(arg[i])) continue;
  174.                 maxNum += arg[i];
  175.             }
  176.             var mainRandom:Number = int(Math.random()*maxNum);
  177.             for (i = 0; i < arg.length; i++){
  178.                 if (isNaN(arg[i])) continue;
  179.                 
  180.                 mainRandom -= arg[i];
  181.                 if (mainRandom < 0){
  182.                     return i;
  183.                 }
  184.             }
  185.             return -1;    // 数値なしError
  186.         }
  187.         
  188.         // 変形4平方ランダム。balance=0.5 velvet=0.3
  189.         public function transRandom4_0():Number{
  190.             return transRandom4(0.50.3);
  191.         }
  192.         // 変形4平方ランダム。balance=0.3 velvet=0.6
  193.         public function transRandom4_1():Number{
  194.             return transRandom4(0.30.6);
  195.         }
  196.         // 変形4平方ランダム。balance=1.0 velvet=0.5
  197.         public function transRandom4_2():Number{
  198.             return transRandom4(1.00.5);
  199.         }
  200.         /* 
  201.            変形4平方ランダム。
  202.            値に沿ってrandomの割合を変換して返す。
  203.            中心点に設定した部分が一番確率が高く、両脇の確率がほぼ0になる。
  204.            
  205.            balance - 中心点の位置。0~1で指定する。省略すれば0.5
  206.            velvet  - なだらかさ。0~1で指定する。
  207.                 0で尖った形(人←こんなん)、0.2で3角形、0.3で正規分布に近く、
  208.                 0.5~0.7でドーム型、0.9で台形になり、1は普通のランダムと同じ一様な分布となる
  209.                 省略すれば0.3
  210.          */
  211.         public function transRandom4(balance:Number = 0.5, velvet:Number = 0.3):Number{
  212.             var ans:Number;
  213.             var sqrtFunctionY:Number;
  214.             var reBalance:Number;
  215.             var x:Number;
  216.             x = Math.random();
  217.             if (x < balance){
  218.                 sqrtFunctionY = sqrt4(x / balance) * balance;
  219.             }else{
  220.                 reBalance = 1 - balance;
  221.                 sqrtFunctionY= -sqrt4((1 - x)/reBalance) * reBalance + 1;
  222.             }
  223.             ans = sqrtFunctionY*(1 - velvet) + x * velvet;
  224.             return ans;
  225.         }
  226.         private function sqrt4(arg:Number):Number{
  227.             return Math.sqrt(Math.sqrt(arg));
  228.         }
  229.     }
  230. }
  231.     import flash.display.Sprite;
  232.     
  233. class RandomChart extends Sprite{
  234.     
  235.     private var _w:int;
  236.     private var _h:int;
  237.     private var _rate:Number;
  238.     private var _isMax:Boolean = false;
  239.     
  240.     private var _valueList:Array;
  241.     private var _markerList:Array;
  242.     
  243.     function RandomChart(w:int, h:int, rate:Number = 1){
  244.         _w = w;
  245.         _h = h;
  246.         _rate = rate;
  247.         _markerList = [];
  248.         for (var i:int = 0; i < _w; i++){
  249.             var marker:Marker = new Marker();
  250.             _markerList.push(marker);
  251.             addChild(marker);
  252.             marker.x = i;
  253.         }
  254.         graphics.lineStyle(0, 0xffaa22);
  255.         graphics.moveTo(00);
  256.         graphics.lineTo(0, h);
  257.         graphics.lineTo(w, h);
  258.         
  259.         reset();
  260.     }
  261.     
  262.     public function reset():void{
  263.         _isMax = false;
  264.         _valueList = [];
  265.         for (var i:int = 0; i < _w; i++){
  266.             _valueList.push(0);
  267.             moveMarkerY(i);
  268.         }
  269.     }
  270.     
  271.     public function addValue(value:Number):void{
  272.         var num:int = int(value * _w);
  273.         _valueList[num]+=_rate;
  274.         moveMarkerY(num);
  275.         if (_h <= _valueList[num]) _isMax = true;
  276.     }
  277.     private function moveMarkerY(num:int):void{
  278.         var marker:Marker = _markerList[num];
  279.         marker.y = _h - _valueList[num];
  280.     }
  281.     
  282.     public function isMax():Boolean{
  283.         return _isMax;
  284.     }
  285. }
  286. class Marker extends Sprite{
  287.     function Marker(){
  288.         graphics.beginFill(0x88cc22, 0.4);
  289.         graphics.drawRect(-3, -366);
  290.         graphics.endFill();
  291.     }
  292. }
noswf
  1. // forked from tail_y's ランダムパターンの種類を色々紹介するよ!
  2. package {
  3.     
  4.     /*
  5.       ランダムパターンの種類を色々紹介するよ! 
  6.       →キーで色々見れるよ。
  7.       
  8.       今回は仕組みが違うから出さなかったけど、このほかにも、ゲーム制作でよく使うものとして
  9.       前回出た結果と同じものの確率が減っていく、抽選ランダムというものもあるよ。
  10.      */
  11.     
  12.     import flash.display.Sprite;
  13.     import flash.display.StageQuality;
  14.     import flash.events.Event;
  15.     import flash.events.KeyboardEvent;
  16.     import flash.text.TextField;
  17.     public class RandomPattern extends Sprite
  18.     {
  19.         public static const STAGE_W:uint = 465;
  20.         public static const STAGE_H:uint = 465;
  21.         
  22.         public static const CHART_W:uint = 300;
  23.         public static const CHART_H:uint = 300;
  24.         
  25.         private var _randomFunction:Function;     // ランダム実験する関数を入れるよ
  26.         private var _titleTf:TextField;
  27.         private var _captionTf:TextField;
  28.         private var _chart:RandomChart;
  29.         
  30.         private var _calc:Boolean = false;
  31.         private var _patternNum:int = -1;
  32.         
  33.         public function RandomPattern()
  34.         {
  35.             addEventListener(Event.ADDED_TO_STAGE, init);    // flexBuilderとの互換性。
  36.         }
  37.                 
  38.         public function init(event:Event):void{
  39.     
  40.              // キャプチャを止めます
  41.             Wonderfl.disable_capture();
  42.              
  43.             // SWF設定
  44.             stage.frameRate = 24
  45.             stage.quality = StageQuality.HIGH;
  46.             var bg:Sprite = new Sprite();
  47.             bg.graphics.beginFill(0xffffff);
  48.             bg.graphics.drawRect(00, STAGE_W, STAGE_H);
  49.             addChild(bg);
  50.             
  51.             // ランダム用関数
  52.             _randomFunction = null;
  53.             
  54.             // タイトル表示
  55.             _titleTf = new TextField();
  56.             _titleTf.width = STAGE_W;
  57.             _titleTf.height = 20;
  58.             _titleTf.text = "ランダムパターンのテストと紹介をするよ!";
  59.             addChild(_titleTf);
  60.             
  61.             // 説明文表示
  62.             _captionTf = new TextField();
  63.             _captionTf.width = STAGE_W;
  64.             _captionTf.height = 80;
  65.             _captionTf.y = 25;
  66.             _captionTf.text = "キーの左右で、ランダムの種類を切り替えるよ。\n下のグラフに、ランダムの分布結果が出るよ";
  67.             addChild(_captionTf);
  68.             
  69.             // グラフを用意
  70.             _chart = new RandomChart(CHART_W, CHART_H);
  71.             _chart.x = 82;
  72.             _chart.y = 100;
  73.             addChild(_chart);
  74.             
  75.             // キーイベント
  76.             stage.addEventListener(KeyboardEvent.KEY_DOWN, key);
  77.             
  78.             // フレームイベント
  79.             stage.addEventListener(Event.ENTER_FRAME, frame);
  80.         }
  81.         private function key(event:KeyboardEvent):void{    // キーイベント
  82.             // キーの左右で切り替え
  83.             if (event.keyCode == 39) changeRandomList(1);
  84.             if (event.keyCode == 37) changeRandomList(-1);
  85.         }
  86.         private function changeRandomList(lr:int):void{    // ランダムの関数を切り替えて、グラフをリセットするよ。
  87.             if (_patternNum == -1) _patternNum = 0;
  88.             else _patternNum = (_patternNum + lr + _patternList.length)%_patternList.length;
  89.             var pattern:Object = _patternList[_patternNum];
  90.             _titleTf.text = pattern.name;
  91.             _captionTf.text = pattern.caption;
  92.             _randomFunction = pattern.func;
  93.             _chart.reset();    // リセット;
  94.             _calc = true;    // 計算ループ開始
  95.         }
  96.         
  97.         private function frame(event:Event):void{    // フレームイベント
  98.             if (_calc) calcChart();
  99.         }
  100.         private function calcChart():void{    // ランダムを計算して、グラフに反映
  101.             for (var i:int = 0; i < 500; i++){
  102.                 _chart.addValue(_randomFunction());
  103.                 if (_chart.isMax()){    // どこかが一番上まで行ったら
  104.                     _calc = false;    // 計算ループ終了
  105.                     break;
  106.                 }
  107.             }
  108.         }
  109.         
  110.         // =======================================================以下がランダム関数
  111.         
  112.         private var _patternList:Array = [
  113.             {name:"普通のランダム",    func:normalRandom,    caption:"0~1の出現率が一定になる。\n上に行くにしたがってバラつきが出るのは全共通。"},
  114.             {name:"平方ランダム1",    func:powerRandom,    caption:"ランダムを2乗したもの。\n0付近が露骨に多くなるのが特徴。"},
  115.             {name:"平方ランダム2",    func:powerRandom2,    caption:"ランダムを2回出し、それをかけたもの。\n前のものより、0の露骨さが減り、なめらかになる。"},
  116.             {name:"平方根ランダム",    func:sqrtRandom,    caption:"ランダムをルートで囲ったもの。\n0に近づくにつれ、綺麗に出現度が減る。\n使いやすい。"},
  117.             {name:"2ランダムの和",    func:plusRandom2,    caption:"ランダムを2回出し、足したもの。\n中央付近が高い3角形になる。\nサイコロを2個振ると合計6付近が出やすいのはこのため。"},
  118.             {name:"3ランダムの和",    func:plusRandom3,    caption:"ランダムを3回出し、足したもの。\n中央付近が高い、正規分布に似た形になる。\n自然物などをそれっぽく見せるのに有用。"},
  119.             {name:"指定割合ランダム",    func:oddsRandom_0,
  120.                 caption:"ゲームによく使われる整数指定のランダム。\n指定した数の割合でランダムを出してくれる。\n今回の指定は[5, 10, 10, 20, 10, 8, 5, 0, 10, 20]\n戻り値が整数なのでグラフ上は飛び飛びになる。"},
  121.             {name:"変形4平方ランダム balance=0.5 velvet=0.3",    func:transRandom4_0,
  122.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=0.5 velvet=0.3を指定すると、中央の高い正規分布風に。"},
  123.             {name:"変形4平方ランダム balance=0.3 velvet=0.2",    func:transRandom4_1,
  124.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=0.3 velvet=0.6を指定すると、左側にずれたドーム型分布に。"},
  125.             {name:"変形4平方ランダム balance=1.0 velvet=0.5",    func:transRandom4_2,
  126.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=1.0 velvet=0.5を指定すると、1付近がなだらかに高い分布に。"},
  127.         ]
  128.         
  129.         // 普通のランダム。
  130.         public function normalRandom():Number{
  131.             return Math.random();
  132.         }
  133.         
  134.         // 平方ランダム。
  135.         public function powerRandom():Number{
  136.             return Math.pow(Math.random(), 2);
  137.         }
  138.         
  139.         // 平方ランダムその2。
  140.         public function powerRandom2():Number{
  141.             return Math.random()*Math.random();
  142.         }
  143.         
  144.         // 平方根ランダム。
  145.         public function sqrtRandom():Number{
  146.             return Math.sqrt(Math.random());
  147.         }
  148.         
  149.         // 2ランダムの和。
  150.         public function plusRandom2():Number{
  151.             return (Math.random()+Math.random())/2
  152.         }
  153.         
  154.         // 3ランダムの和。
  155.         public function plusRandom3():Number{
  156.             return (Math.random()+Math.random()+Math.random())/3
  157.         }
  158.         
  159.         // 指定割合ランダム
  160.         public function oddsRandom_0():Number{
  161.             var odds:Array = [5101020108501020];
  162.             return oddsRandom(odds) / odds.length;    // グラフ描画の関係上、1以下の数にして返す。
  163.         }
  164.         /* 
  165.             指定割合ランダム
  166.             指定された配列の割合に沿って整数値を返す。
  167.         */
  168.         public static function oddsRandom(arg:Array):int{
  169.             if (arg.length == 0return 0;
  170.             var maxNum:Number = 0;
  171.             var i:int;
  172.             for (i = 0; i < arg.length; i++){
  173.                 if (isNaN(arg[i])) continue;
  174.                 maxNum += arg[i];
  175.             }
  176.             var mainRandom:Number = int(Math.random()*maxNum);
  177.             for (i = 0; i < arg.length; i++){
  178.                 if (isNaN(arg[i])) continue;
  179.                 
  180.                 mainRandom -= arg[i];
  181.                 if (mainRandom < 0){
  182.                     return i;
  183.                 }
  184.             }
  185.             return -1;    // 数値なしError
  186.         }
  187.         
  188.         // 変形4平方ランダム。balance=0.5 velvet=0.3
  189.         public function transRandom4_0():Number{
  190.             return transRandom4(0.50.3);
  191.         }
  192.         // 変形4平方ランダム。balance=0.3 velvet=0.6
  193.         public function transRandom4_1():Number{
  194.             return transRandom4(0.30.6);
  195.         }
  196.         // 変形4平方ランダム。balance=1.0 velvet=0.5
  197.         public function transRandom4_2():Number{
  198.             return transRandom4(1.00.5);
  199.         }
  200.         /* 
  201.            変形4平方ランダム。
  202.            値に沿ってrandomの割合を変換して返す。
  203.            中心点に設定した部分が一番確率が高く、両脇の確率がほぼ0になる。
  204.            
  205.            balance - 中心点の位置。0~1で指定する。省略すれば0.5
  206.            velvet  - なだらかさ。0~1で指定する。
  207.                 0で尖った形(人←こんなん)、0.2で3角形、0.3で正規分布に近く、
  208.                 0.5~0.7でドーム型、0.9で台形になり、1は普通のランダムと同じ一様な分布となる
  209.                 省略すれば0.3
  210.          */
  211.         public function transRandom4(balance:Number = 0.5, velvet:Number = 0.3):Number{
  212.             var ans:Number;
  213.             var sqrtFunctionY:Number;
  214.             var reBalance:Number;
  215.             var x:Number;
  216.             x = Math.random();
  217.             if (x < balance){
  218.                 sqrtFunctionY = sqrt4(x / balance) * balance;
  219.             }else{
  220.                 reBalance = 1 - balance;
  221.                 sqrtFunctionY= -sqrt4((1 - x)/reBalance) * reBalance + 1;
  222.             }
  223.             ans = sqrtFunctionY*(1 - velvet) + x * velvet;
  224.             return ans;
  225.         }
  226.         private function sqrt4(arg:Number):Number{
  227.             return Math.sqrt(Math.sqrt(arg));
  228.         }
  229.     }
  230. }
  231.     import flash.display.Sprite;
  232.     
  233. class RandomChart extends Sprite{
  234.     
  235.     private var _w:int;
  236.     private var _h:int;
  237.     private var _rate:Number;
  238.     private var _isMax:Boolean = false;
  239.     
  240.     private var _valueList:Array;
  241.     private var _markerList:Array;
  242.     
  243.     function RandomChart(w:int, h:int, rate:Number = 1){
  244.         _w = w;
  245.         _h = h;
  246.         _rate = rate;
  247.         _markerList = [];
  248.         for (var i:int = 0; i < _w; i++){
  249.             var marker:Marker = new Marker();
  250.             _markerList.push(marker);
  251.             addChild(marker);
  252.             marker.x = i;
  253.         }
  254.         graphics.lineStyle(0, 0xffaa22);
  255.         graphics.moveTo(00);
  256.         graphics.lineTo(0, h);
  257.         graphics.lineTo(w, h);
  258.         
  259.         reset();
  260.     }
  261.     
  262.     public function reset():void{
  263.         _isMax = false;
  264.         _valueList = [];
  265.         for (var i:int = 0; i < _w; i++){
  266.             _valueList.push(0);
  267.             moveMarkerY(i);
  268.         }
  269.     }
  270.     
  271.     public function addValue(value:Number):void{
  272.         var num:int = int(value * _w);
  273.         _valueList[num]+=_rate;
  274.         moveMarkerY(num);
  275.         if (_h <= _valueList[num]) _isMax = true;
  276.     }
  277.     private function moveMarkerY(num:int):void{
  278.         var marker:Marker = _markerList[num];
  279.         marker.y = _h - _valueList[num];
  280.     }
  281.     
  282.     public function isMax():Boolean{
  283.         return _isMax;
  284.     }
  285. }
  286. class Marker extends Sprite{
  287.     function Marker(){
  288.         graphics.beginFill(0x88cc22, 0.4);
  289.         graphics.drawRect(-3, -366);
  290.         graphics.endFill();
  291.     }
  292. }
noswf
  1. // forked from tail_y's ランダムパターンの種類を色々紹介するよ!
  2. package {
  3.     
  4.     /*
  5.       ランダムパターンの種類を色々紹介するよ! 
  6.       →キーで色々見れるよ。
  7.       
  8.       今回は仕組みが違うから出さなかったけど、このほかにも、ゲーム制作でよく使うものとして
  9.       前回出た結果と同じものの確率が減っていく、抽選ランダムというものもあるよ。
  10.      */
  11.     
  12.     import flash.display.Sprite;
  13.     import flash.display.StageQuality;
  14.     import flash.events.Event;
  15.     import flash.events.KeyboardEvent;
  16.     import flash.text.TextField;
  17.     public class RandomPattern extends Sprite
  18.     {
  19.         public static const STAGE_W:uint = 465;
  20.         public static const STAGE_H:uint = 465;
  21.         
  22.         public static const CHART_W:uint = 300;
  23.         public static const CHART_H:uint = 300;
  24.         
  25.         private var _randomFunction:Function;     // ランダム実験する関数を入れるよ
  26.         private var _titleTf:TextField;
  27.         private var _captionTf:TextField;
  28.         private var _chart:RandomChart;
  29.         
  30.         private var _calc:Boolean = false;
  31.         private var _patternNum:int = -1;
  32.         
  33.         public function RandomPattern()
  34.         {
  35.             addEventListener(Event.ADDED_TO_STAGE, init);    // flexBuilderとの互換性。
  36.         }
  37.                 
  38.         public function init(event:Event):void{
  39.     
  40.              // キャプチャを10秒遅らせます
  41.              Wonderfl.capture_delay( 20 );
  42.              
  43.             // SWF設定
  44.             stage.frameRate = 24
  45.             stage.quality = StageQuality.HIGH;
  46.             var bg:Sprite = new Sprite();
  47.             bg.graphics.beginFill(0xffffff);
  48.             bg.graphics.drawRect(00, STAGE_W, STAGE_H);
  49.             addChild(bg);
  50.             
  51.             // ランダム用関数
  52.             _randomFunction = null;
  53.             
  54.             // タイトル表示
  55.             _titleTf = new TextField();
  56.             _titleTf.width = STAGE_W;
  57.             _titleTf.height = 20;
  58.             _titleTf.text = "ランダムパターンのテストと紹介をするよ!";
  59.             addChild(_titleTf);
  60.             
  61.             // 説明文表示
  62.             _captionTf = new TextField();
  63.             _captionTf.width = STAGE_W;
  64.             _captionTf.height = 60;
  65.             _captionTf.y = 25;
  66.             _captionTf.text = "キーの左右で、ランダムの種類を切り替えるよ。\n下のグラフに、ランダムの分布結果が出るよ";
  67.             addChild(_captionTf);
  68.             
  69.             // グラフを用意
  70.             _chart = new RandomChart(CHART_W, CHART_H);
  71.             _chart.x = 82;
  72.             _chart.y = 100;
  73.             addChild(_chart);
  74.             
  75.             // キーイベント
  76.             stage.addEventListener(KeyboardEvent.KEY_DOWN, key);
  77.             
  78.             // フレームイベント
  79.             stage.addEventListener(Event.ENTER_FRAME, frame);
  80.         }
  81.         private function key(event:KeyboardEvent):void{    // キーイベント
  82.             // キーの左右で切り替え
  83.             if (event.keyCode == 39) changeRandomList(1);
  84.             if (event.keyCode == 37) changeRandomList(-1);
  85.         }
  86.         private function changeRandomList(lr:int):void{    // ランダムの関数を切り替えて、グラフをリセットするよ。
  87.             if (_patternNum == -1) _patternNum = 0;
  88.             else _patternNum = (_patternNum + lr + _patternList.length)%_patternList.length;
  89.             var pattern:Object = _patternList[_patternNum];
  90.             _titleTf.text = pattern.name;
  91.             _captionTf.text = pattern.caption;
  92.             _randomFunction = pattern.func;
  93.             _chart.reset();    // リセット;
  94.             _calc = true;    // 計算ループ開始
  95.         }
  96.         
  97.         private function frame(event:Event):void{    // フレームイベント
  98.             if (_calc) calcChart();
  99.         }
  100.         private function calcChart():void{    // ランダムを計算して、グラフに反映
  101.             for (var i:int = 0; i < 500; i++){
  102.                 _chart.addValue(_randomFunction());
  103.                 if (_chart.isMax()){    // どこかが一番上まで行ったら
  104.                     _calc = false;    // 計算ループ終了
  105.                     break;
  106.                 }
  107.             }
  108.         }
  109.         
  110.         // =======================================================以下がランダム関数
  111.         
  112.         private var _patternList:Array = [
  113.             {name:"普通のランダム",    func:normalRandom,    caption:"0~1の出現率が一定になる。\n上に行くにしたがってバラつきが出るのは全共通。"},
  114.             {name:"平方ランダム1",    func:powerRandom,    caption:"ランダムを2乗したもの。\n0付近が露骨に多くなるのが特徴。"},
  115.             {name:"平方ランダム2",    func:powerRandom2,    caption:"ランダムを2回出し、それをかけたもの。\n前のものよに、0の露骨さが減り、なめらかになる。"},
  116.             {name:"平方根ランダム",    func:sqrtRandom,    caption:"ランダムをルートで囲ったもの。\n0に近づくにつれ、綺麗に出現度が減る。\n使いやすい。"},
  117.             {name:"2ランダムの和",    func:plusRandom2,    caption:"ランダムを2回出し、足したもの。\n中央付近が高い3角形になる。\nサイコロを2個振ると合計6付近が出やすいのはこのため。"},
  118.             {name:"3ランダムの和",    func:plusRandom3,    caption:"ランダムを3回出し、足したもの。\n中央付近が高い、正規分布に似た形になる。\n自然物などをそれっぽく見せるのに有用。"},
  119.             {name:"指定割合ランダム",    func:oddsRandom_0,
  120.                 caption:"ゲームによく使われる整数指定のランダム。\n指定した数の割合でランダムを出してくれる。\n今回の指定は[5, 10, 10, 20, 10, 8, 5, 0, 10, 20]\n戻り値が整数なのでグラフ上は飛び飛びになる。"},
  121.             {name:"変形4平方ランダム balance=0.5 velvet=0.3",    func:transRandom4_0,
  122.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=0.5 velvet=0.3を指定すると、中央の高い正規分布風に。"},
  123.             {name:"変形4平方ランダム balance=0.3 velvet=0.2",    func:transRandom4_1,
  124.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=0.3 velvet=0.6を指定すると、左側にずれたドーム型分布に。"},
  125.             {name:"変形4平方ランダム balance=1.0 velvet=0.5",    func:transRandom4_2,
  126.                 caption:"ちょっと自由なランダム分布が作れるオリジナル関数。\nbalance=1.0 velvet=0.5を指定すると、1付近がなだらかに高い分布に。"},
  127.         ]
  128.         
  129.         // 普通のランダム。
  130.         public function normalRandom():Number{
  131.             return Math.random();
  132.         }
  133.         
  134.         // 平方ランダム。
  135.         public function powerRandom():Number{
  136.             return Math.pow(Math.random(), 2);
  137.         }
  138.         
  139.         // 平方ランダムその2。
  140.         public function powerRandom2():Number{
  141.             return Math.random()*Math.random();
  142.         }
  143.         
  144.         // 平方根ランダム。
  145.         public function sqrtRandom():Number{
  146.             return Math.sqrt(Math.random());
  147.         }
  148.         
  149.         // 2ランダムの和。
  150.         public function plusRandom2():Number{
  151.             return (Math.random()+Math.random())/2
  152.         }
  153.         
  154.         // 3ランダムの和。
  155.         public function plusRandom3():Number{
  156.             return (Math.random()+Math.random()+Math.random())/3
  157.         }
  158.         
  159.         // 指定割合ランダム
  160.         public function oddsRandom_0():Number{
  161.             var odds:Array = [5101020108501020];
  162.             return oddsRandom(odds) / odds.length;    // グラフ描画の関係上、1以下の数にして返す。
  163.         }
  164.         /* 
  165.             指定割合ランダム
  166.             指定された配列の割合に沿って整数値を返す。
  167.         */
  168.         public static function oddsRandom(arg:Array):int{
  169.             if (arg.length == 0return 0;
  170.             var maxNum:Number = 0;
  171.             var i:int;
  172.             for (i = 0; i < arg.length; i++){
  173.                 if (isNaN(arg[i])) continue;
  174.                 maxNum += arg[i];
  175.             }
  176.             var mainRandom:Number = int(Math.random()*maxNum);
  177.             for (i = 0; i < arg.length; i++){
  178.                 if (isNaN(arg[i])) continue;
  179.                 
  180.                 mainRandom -= arg[i];
  181.                 if (mainRandom < 0){
  182.                     return i;
  183.                 }
  184.             }
  185.             return -1;    // 数値なしError
  186.         }
  187.         
  188.         // 変形4平方ランダム。balance=0.5 velvet=0.3
  189.         public function transRandom4_0():Number{
  190.             return transRandom4(0.50.3);
  191.         }
  192.         // 変形4平方ランダム。balance=0.3 velvet=0.6
  193.         public function transRandom4_1():Number{
  194.             return transRandom4(0.30.6);
  195.         }
  196.         // 変形4平方ランダム。balance=1.0 velvet=0.5
  197.         public function transRandom4_2():Number{
  198.             return transRandom4(1.00.5);
  199.         }
  200.         /* 
  201.            変形4平方ランダム。
  202.            値に沿ってrandomの割合を変換して返す。
  203.            中心点に設定した部分が一番確率が高く、両脇の確率がほぼ0になる。
  204.            
  205.            balance - 中心点の位置。0~1で指定する。省略すれば0.5
  206.            velvet  - なだらかさ。0~1で指定する。
  207.                 0で尖った形(人←こんなん)、0.2で3角形、0.3で正規分布に近く、
  208.                 0.5~0.7でドーム型、0.9で台形になり、1は普通のランダムと同じ一様な分布となる
  209.                 省略すれば0.3
  210.          */
  211.         public function transRandom4(balance:Number = 0.5, velvet:Number = 0.3):Number{
  212.             var ans:Number;
  213.             var sqrtFunctionY:Number;
  214.             var reBalance:Number;
  215.             var x:Number;
  216.             x = Math.random();
  217.             if (x < balance){
  218.                 sqrtFunctionY = sqrt4(x / balance) * balance;
  219.             }else{
  220.                 reBalance = 1 - balance;
  221.                 sqrtFunctionY= -sqrt4((1 - x)/reBalance) * reBalance + 1;
  222.             }
  223.             ans = sqrtFunctionY*(1 - velvet) + x * velvet;
  224.             return ans;
  225.         }
  226.         private function sqrt4(arg:Number):Number{
  227.             return Math.sqrt(Math.sqrt(arg));
  228.         }
  229.     }
  230. }
  231.     import flash.display.Sprite;
  232.     
  233. class RandomChart extends Sprite{
  234.     
  235.     private var _w:int;
  236.     private var _h:int;
  237.     private var _rate:Number;
  238.     private var _isMax:Boolean = false;
  239.     
  240.     private var _valueList:Array;
  241.     private var _markerList:Array;
  242.     
  243.     function RandomChart(w:int, h:int, rate:Number = 1){
  244.         _w = w;
  245.         _h = h;
  246.         _rate = rate;
  247.         _markerList = [];
  248.         for (var i:int = 0; i < _w; i++){
  249.             var marker:Marker = new Marker();
  250.             _markerList.push(marker);
  251.             addChild(marker);
  252.             marker.x = i;
  253.         }
  254.         graphics.lineStyle(0, 0xffaa22);
  255.         graphics.moveTo(00);
  256.         graphics.lineTo(0, h);
  257.         graphics.lineTo(w, h);
  258.         
  259.         reset();
  260.     }
  261.     
  262.     public function reset():void{
  263.         _isMax = false;
  264.         _valueList = [];
  265.         for (var i:int = 0; i < _w; i++){
  266.             _valueList.push(0);
  267.             moveMarkerY(i);
  268.         }
  269.     }
  270.     
  271.     public function addValue(value:Number):void{
  272.         var num:int = int(value * _w);
  273.         _valueList[num]+=_rate;
  274.         moveMarkerY(num);
  275.         if (_h <= _valueList[num]) _isMax = true;
  276.     }
  277.     private function moveMarkerY(num:int):void{
  278.         var marker:Marker = _markerList[num];
  279.         marker.y = _h - _valueList[num];
  280.     }
  281.     
  282.     public function isMax():Boolean{
  283.         return _isMax;
  284.     }
  285. }
  286. class Marker extends Sprite{
  287.     function Marker(){
  288.         graphics.beginFill(0x88cc22, 0.4);
  289.         graphics.drawRect(-3, -366);
  290.         graphics.endFill();
  291.     }
  292. }
noswf
Get Adobe Flash Player