【processing】ランダムウォークのテスト


以前、プロセシングのコードをはてなブログで動かしてみました。
demacassette2.hateblo.jp

今度は、セルオートマトンによるランダムウォークを試したいと思います。セルオートマトンって?ランダムウォークって?という説明は後回し!まずは結果からです。



なんなく表示できるんですね。すごいな。これが何を示してるのかは、ランダムウォークでググってもらえば色々出てくるのでそちらを参照。

https://ja.wikipedia.org/wiki/ランダムウォーク
f:id:demacassette:20160224010629p:plain:w300

簡単に言えば、ある点が時事刻々と上下左右のいずれかに1ステップずつ進んでいくを繰り返しているものです。2次元上でのランダムウォークは、分子の動きに似ていることから、物理系のシミュレーションモデルにしばしば適用されるそうです。また株価の予測などをする際に、次の値動きは上昇下降ともに独立事象で、ほぼ予測不可能であるということを表現するような場面でも用いられるようです。詳しい解説や応用先は追い追いやっていきます。


こんなに簡単にプロセシングでの結果が表現できるとは思ってませんでした。私の統計ツール的基本言語はRだと思っていましたが、表現の美しさやウェブコンテンツとの互換性を考えるとプロセシングは、やっぱり凄いなと。今後は、QGISと並行してプロセシングも勉強して使えるモノにしていきたいと思います。


今回使用したコードはどこからか拝借しましたが、ド忘れしてしまいました。参照できずすいません。。。




(参考)使用したコード(はてなブログで表現できるver)

<script src="http://cloud.github.com/downloads/processing-js/processing-js/processing-1.3.6.min.js"></script>
<script type="application/processing" data-processing-target="pjs" >//
// All Examples Written by Casey Reas and Ben Fry
// unless otherwise stated.

//Main code  from here

class Walker
{
  private int x;
  private int y;
  
  Walker(int x,int y)
  {
    this.x=x;
    this.y=y;
    stroke(0);
  }
  
  void render()
  {
    //definiting the color before
    colorMode(RGB,256);
    stroke(0,0,0);
    point(x,y);

  }
  
  void update()
  {
    int vx = (int(random(3))-1)*2;
    int vy = (int(random(3))-1)*2;
    x += vx;
    y += vy;
    
    x=constrain(x,0,width);
    y=constrain(y,0,height);
    //println(random(3));
  }
  
}


Walker walker;

void setup()
{
  size(300,300);
  
  walker = new Walker(width/2,height/2);
  frameRate(50);
}

void draw()

{
  for(int i= 0;i<10;i++)
  {
    walker.update();
    walker.render();

  }
}

//End of code 

</script><canvas id="pjs"/>