about nature of code part1
TRANSCRIPT
自然現象のシミュレーション (part1)
これは、とある僕っ娘 SE (4 月から ) が
NATURE OF CODE で学んだ 知識を
垂れ流すスライドです。
ろっさむ
TwitterID : @4_mio_11
Mail : mio041100505@ gmail.com
おはようございます。ろっさむと申します。
20 歳です。普段は専門学生してます。こんにちは。ろっさむと申します。
二十歳です。一応女です。
メインでは C++ 、あとは諸々。
おはようございます。ろっさむと申します。
20 歳です。普段は専門学生してます。今回のテーマ「実世界で起こる自然現象に注目し、その現象をシミュレートするためにはどのようにコードを書けばよいか」
・ 2014/9/25 発売
・ Web 上では英語版がフリーで公開されている。http://natureofcode.com/book/introduction/
・大体 3800 円前後
・ Processing でコード記述
おはようございます。ろっさむと申します。
20 歳です。普段は専門学生してます。Processing もいいんだけど僕 C++ も勉強中なので…
Processing のコード→ C++ に変換
序章:ランダムウォークについて
ランダムウォークとは…
無作為 ( ランダム ) に進む運動。
これを使うと、気体の中の分子の動きから人間の行動まで、現実世界に起こる様々な現象をモデル化することができる。
後々解説します(
これで小刻みに動き始めます。
オブジェクト指向プログラミングを復習する。
ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。
ランダムウォークを題材として、 ランダム性、確率、パーリンノイズの基本を見ていく。
オブジェクト指向プログラミングを復習する。
ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。
ランダムウォークを題材として、 ランダム性、確率、パーリンノイズの基本を見ていく。
おはようございます。ろっさむと申します。
20 歳です。普段は専門学生してます。
かる~~~く、ふわっふわとオブジェクト指向の説明
醤油ラーメンのレシピを元に作成
豚骨ラーメンのレシピを元に作成
・ラーメン==インスタンス
・テーブル==メモリ
オブジェクト指向プログラミングを復習する。
ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。
ランダムウォークを題材として、 ランダム性、確率、パーリンノイズの基本を見ていく。
オブジェクト指向プログラミングを復習する。
ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。
ランダムウォークを題材として、 ランダム性、確率、パーリンノイズの基本を見ていく。
オーバーサンプリング問題( 既に訪れた場所に何度も戻ってくるような現象 )
避けるための戦略の1つとしてときどきステップサイズ ( 移動距離 ) を
過大にする方法。
こうするとランダム・ウォーカーは特定の場所をランダムに探し回りながらも
定期的に大きくジャンプするのでオーバーサンプリングの量を減らすことが出来る。
オブジェクト指向プログラミングを復習する。
ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。
ランダムウォークを題材として、 ランダム性、確率、パーリンノイズの基本を見ていく。
オブジェクト指向プログラミングを復習する。
ランダムウォークを使って、「オブジェクトの動作を制御するルールをどのように定義するか」を考える。
ランダムウォークを題材として、 ランダム性、確率、パーリンノイズの基本を見ていく。
一様分布
• すべての事象の起こる確率が等しい現象 のモデル
• サイコロがいい例である… ( 1も6もどちらも 出る確率は同じ )
確率と非一様分布
• 数値の選択肢を配列にいれ、確率を高くしたい選択肢の要素数を複数にする。「 stuff[0] = 1; stuff[1] = 1; stuff[2] = 2;... 」
• まずランダム値を求め、
このランダム値の範囲に従って事象を発生させる。
random_device と mt19937 とxorshift
・ random_device は一様分布で、
指定した範囲内で数字を生み出せる。
マウス位置等から数字を生み出しているらしい。
・ mt19937 はメルセンヌツイスターを実装したものとなっている。
・ xorshift はゲームでよく使われる乱数生成器で速度が早い。
ただし C++ では標準化されていないので自分で実装する。
メルセンヌツイスター
めっちゃ周期長い。めっちゃ速い。
パーリンノイズ
• 「パーリンノイズ」と呼ばれるアルゴリズムは自然な秩序を持った一連の擬似ランダム値を生成するアルゴリズムである。より有機的な見た目になる。
• パーリンノイズの一般的な使い方としては
・一次元のノイズではスムーズな値を使用してオブジェクトの 位置を割り当て、さまようような動きを作成。
・二次元のノイズではピクセル平面上のスムーズな値を使って 雲のようなパターンを作成。
例えば風の力をモデリングするとき、その強さをパーリンノイズで制御できる。同様にフラクタルツリーのパターンでは
枝と枝の間の角度に、流れ場のシミュレーションではグリッドに沿って移動するオブジェクトの速度や方向にそれぞれパーリンノイズを使用できる。
パーリンノイズを使うと雲や風景、また大理石のようなパターン化されたテクスチャなど、自然な性質を持つ
さまざまなエフェクトを生成できる。よって、ゲームや映画などに特に有効とされる。
パーリンノイズ解説サイトhttp://postd.cc/understanding-perlin-noise/
パーリンノイズを C++ でhttp://siv3d.hateblo.jp/entry/2013/03/03/220041
ほっとさんによるパーリンノイズhttps://gist.github.com/hotwatermorning/f23841dcee3f77b1419a
おはようございます。ろっさむと申します。
20 歳です。普段は専門学生してます。
ご静聴有難うございました。