about nature of code part1

27
自自自自自自自自自自自自自 (part1) 自自自 自自自自自自 SE (4 自自自 ) 自 NATURE OF CODE 自自自自 自自自 自自自自自自自自自自自自自自 TwitterID @4_mio_11 Mail mio041100505@ gmail.com

Upload: mio-ku-tani

Post on 09-Aug-2015

485 views

Category:

Presentations & Public Speaking


0 download

TRANSCRIPT

Page 1: About nature of code part1

自然現象のシミュレーション (part1)

これは、とある僕っ娘 SE (4 月から ) が

NATURE OF CODE で学んだ 知識を

垂れ流すスライドです。

ろっさむ 

TwitterID : @4_mio_11

Mail : mio041100505@ gmail.com

Page 2: About nature of code part1

おはようございます。ろっさむと申します。

20 歳です。普段は専門学生してます。こんにちは。ろっさむと申します。

二十歳です。一応女です。

メインでは C++ 、あとは諸々。

Page 3: About nature of code part1

おはようございます。ろっさむと申します。

20 歳です。普段は専門学生してます。今回のテーマ「実世界で起こる自然現象に注目し、その現象をシミュレートするためにはどのようにコードを書けばよいか」

Page 4: About nature of code part1

・ 2014/9/25 発売

・ Web 上では英語版がフリーで公開されている。http://natureofcode.com/book/introduction/

・大体 3800 円前後

・ Processing でコード記述

Page 5: About nature of code part1

おはようございます。ろっさむと申します。

20 歳です。普段は専門学生してます。Processing もいいんだけど僕 C++ も勉強中なので…

Processing のコード→ C++ に変換

Page 6: About nature of code part1

序章:ランダムウォークについて

ランダムウォークとは…

無作為 ( ランダム ) に進む運動。

これを使うと、気体の中の分子の動きから人間の行動まで、現実世界に起こる様々な現象をモデル化することができる。

Page 7: About nature of code part1

後々解説します(

これで小刻みに動き始めます。

Page 8: About nature of code part1

オブジェクト指向プログラミングを復習する。

ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。

ランダムウォークを題材として、  ランダム性、確率、パーリンノイズの基本を見ていく。

Page 9: About nature of code part1

オブジェクト指向プログラミングを復習する。

ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。

ランダムウォークを題材として、  ランダム性、確率、パーリンノイズの基本を見ていく。

Page 10: About nature of code part1

おはようございます。ろっさむと申します。

20 歳です。普段は専門学生してます。

かる~~~く、ふわっふわとオブジェクト指向の説明

Page 11: About nature of code part1

醤油ラーメンのレシピを元に作成

豚骨ラーメンのレシピを元に作成

Page 12: About nature of code part1

・ラーメン==インスタンス

・テーブル==メモリ

Page 13: About nature of code part1

オブジェクト指向プログラミングを復習する。

ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。

ランダムウォークを題材として、  ランダム性、確率、パーリンノイズの基本を見ていく。

Page 14: About nature of code part1

オブジェクト指向プログラミングを復習する。

ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。

ランダムウォークを題材として、  ランダム性、確率、パーリンノイズの基本を見ていく。

Page 15: About nature of code part1

オーバーサンプリング問題( 既に訪れた場所に何度も戻ってくるような現象 )

Page 16: About nature of code part1

避けるための戦略の1つとしてときどきステップサイズ ( 移動距離 ) を

過大にする方法。

こうするとランダム・ウォーカーは特定の場所をランダムに探し回りながらも

定期的に大きくジャンプするのでオーバーサンプリングの量を減らすことが出来る。

Page 17: About nature of code part1

オブジェクト指向プログラミングを復習する。

ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。

ランダムウォークを題材として、  ランダム性、確率、パーリンノイズの基本を見ていく。

Page 18: About nature of code part1

オブジェクト指向プログラミングを復習する。

ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。

ランダムウォークを題材として、  ランダム性、確率、パーリンノイズの基本を見ていく。

Page 19: About nature of code part1

一様分布

• すべての事象の起こる確率が等しい現象 のモデル

• サイコロがいい例である… ( 1も6もどちらも 出る確率は同じ )

Page 20: About nature of code part1

確率と非一様分布

• 数値の選択肢を配列にいれ、確率を高くしたい選択肢の要素数を複数にする。「 stuff[0] = 1; stuff[1] = 1; stuff[2] = 2;... 」

• まずランダム値を求め、

 このランダム値の範囲に従って事象を発生させる。

Page 21: About nature of code part1
Page 22: About nature of code part1

random_device と mt19937 とxorshift

・ random_device は一様分布で、

指定した範囲内で数字を生み出せる。

 マウス位置等から数字を生み出しているらしい。

・ mt19937 はメルセンヌツイスターを実装したものとなっている。

・ xorshift はゲームでよく使われる乱数生成器で速度が早い。

 ただし C++ では標準化されていないので自分で実装する。

Page 23: About nature of code part1

メルセンヌツイスター

めっちゃ周期長い。めっちゃ速い。

Page 24: About nature of code part1

パーリンノイズ

• 「パーリンノイズ」と呼ばれるアルゴリズムは自然な秩序を持った一連の擬似ランダム値を生成するアルゴリズムである。より有機的な見た目になる。

• パーリンノイズの一般的な使い方としては

  ・一次元のノイズではスムーズな値を使用してオブジェクトの     位置を割り当て、さまようような動きを作成。

  ・二次元のノイズではピクセル平面上のスムーズな値を使って     雲のようなパターンを作成。

Page 25: About nature of code part1

例えば風の力をモデリングするとき、その強さをパーリンノイズで制御できる。同様にフラクタルツリーのパターンでは

枝と枝の間の角度に、流れ場のシミュレーションではグリッドに沿って移動するオブジェクトの速度や方向にそれぞれパーリンノイズを使用できる。

パーリンノイズを使うと雲や風景、また大理石のようなパターン化されたテクスチャなど、自然な性質を持つ

さまざまなエフェクトを生成できる。よって、ゲームや映画などに特に有効とされる。

Page 26: About nature of code part1

パーリンノイズ解説サイトhttp://postd.cc/understanding-perlin-noise/

パーリンノイズを C++ でhttp://siv3d.hateblo.jp/entry/2013/03/03/220041

ほっとさんによるパーリンノイズhttps://gist.github.com/hotwatermorning/f23841dcee3f77b1419a

Page 27: About nature of code part1

おはようございます。ろっさむと申します。

20 歳です。普段は専門学生してます。

ご静聴有難うございました。