Unityと数学と音楽の学習帳

Unityと数学、音楽の同時学習を目的としたブログ(個人的メモ帳:勉強中なので正確性はない)

いかにして問題を解くか、次元解析、スケーリング、アロメトリー、対数、ネイピア数と一次近似

© Unity Technologies Japan/UCL
f:id:cqbosinko:20190222003224p:plain

考える生物の形状を問わず立方体だとして考えると

  • 体長^2=面積 m^2
  • 体長^3=体積 m^3
  • 1立方メートル(m^3)=1リットル

動物の体はほぼ水で出来ている。水の比重はほぼ1なので体積が1リットルの物は1キログラムと考えられる。なので体積を体重に置き換えると
1{ m }^{ 3 }=1ℓ=1㎏\quad \quad \Rightarrow \quad \quad 体長\propto { 体重 }^{ \frac { 1 }{ 3 }  }\quad \quad \Rightarrow \quad \quad 体長\propto \sqrt [ 3 ]{ 体重 }
このロジックで行くと体重55kgの立方体人間の体長は { \left( 55kg\times 1000g \right)  }^{ \frac { 1 }{ 3 }  }=38.029cm になる。
このスクショの右側のユニティちゃんが体長1m、その周りを囲う立方体が1{ m }^{ 3 }、その左のテクスチャが貼られた立方体が一辺38cmになっている。
本来ユニティちゃんの身長はSDで無い場合、およそ1.5mぐらいと考えられるが。そういう部分を差し引いても大体、体積に対して、このロジックが正しいと感覚的に感じるのではないだろうか。

表面積と体積との関係は逆数になる

参考資料:「ゾウの時間 ネズミの時間 サイズの生物学 サイズとエネルギー消費量 表面積と体積」より

\displaystyle \frac { 表面積 }{ 体積 } =\frac { { n }^{ 2 } }{ { n }^{ 3 } } =\frac { 1 }{ n } ={ n }^{ -1 }

球形状の場合

 \frac { 4\pi { r }^{ 2 } }{ \frac { 4 }{ 3 } \pi { r }^{ 3 } } \quad \xrightarrow { アロメトリーで考える } \quad \frac { a{ r }^{ 2 } }{ b{ r }^{ 3 } } \quad \rightarrow \quad \frac { a }{ b } \cdot \frac { 1 }{ r } \quad \propto \quad c{ r }^{ -1 }

\propto は 比例記号(proportional)と呼ばれるもので「比例する」という意味になる

この最右辺の式はアロメトリー式になっている事に注目。この場合、cは抽象化した倍数。rは長さを表しているので、長さの逆数と比例するみたいになる

特撮におけるミニチュア撮影

<参考資料>
ja.wikipedia.org
wired.jp

ウィキペディア内で記載されている、「ハリウッドのSFXスタジオで目安とされている模型のスケールと撮影速度の対応表」に関して
これは一覧表になっていますが一般化できます。映画のフィルムは秒間24コマ、つまり24FPSなので計算式は

24\times \sqrt { \frac { 1 }{ \left( スケール \right)  }  }

になります。この論理的根拠は重力加速度(Acceleration)の式を次元解析で考えると導ける

a=4.9t^2

これを単位の次元で考えると

加速度 = 長さ ×(時間)^2

加速度 ∝ 長さ ×(時間)^2

(時間)^2 ∝ 加速度 / 長さ

加速度は普遍と考えると

(時間)^2 ∝ 1 / スケール

時間 ∝ sqrt( 1 / スケール )

これに秒間24フレームを掛けると撮影速度が算出できる。この考えを応用すると、まずユニティのレイアウト空間に正しい寸法(サイズ)でオブジェクト配置する事で正しい物理挙動が得られる事は当然として、その上でゲーム的なリアクションやカリカチュアライズを施す際に、どれぐらいのタイムスケールや加速度、質量でモノを動かせばよいのか「計算してデザイン」する事が可能となるのではないか?

対数計算のコツ

例:桁で分離して考える

\begin{eqnarray} \log _{ 10 }{ 12 }  & = & \log _{ 10 }{ 10 } +\log _{ 10 }{ 1.2 }  \\ \quad  & = & 1+\log _{ 10 }{ 1.2 }  \\ \quad  & = & 1+0.07918... \end{eqnarray}\quad \Rightarrow \quad { 10 }^{ 1.0079 }\simeq 12

\begin{eqnarray} \log _{ 10 }{ 90 }  & = & \log _{ 10 }{ 10 } +\log _{ 10 }{ 9 }  \\ \quad  & = & 1+\log _{ 10 }{ 9 }  \\ \quad  & = & 1+0.9542... \end{eqnarray}\quad \Rightarrow \quad { 10 }^{ 1.95 }\simeq 90

\begin{eqnarray} \log _{ 10 }{ 512 }  & = & \log _{ 10 }{ 100 } +\log _{ 10 }{ 5.12 }  \\ \quad  & = & 2+0.7092 \end{eqnarray}\quad \Rightarrow \quad { 10 }^{ 2.7092 }\simeq 512

対数計算のコツ

\ln { 2=0.69314718 } \\ \ln { 4=1.386294361 } =\ln { { 2 }^{ 2 } } =2\times \ln { 2 } \\ \ln { 8=2.079441542 } =\ln { { 2 }^{ 3 } } =3\times \ln { 2 }

 \ln { 3=1.098612289 } \\ \ln { { 3 }^{ 2 }=\ln { 9 } =2.199224577 } =2\times \ln { 3 } \\ \ln { { 3 }^{ 3 }=\ln { 27 }  } =3\times \ln { 3 }

{ e }^{ 2.3025...\times n }\simeq { 10 }^{ n }

n=1で10
n=2で100
n=3で1000に近似する
この考えは以下のように整理できる

\Rightarrow \quad \ln { { { 10 }^{ n } } } \simeq 2.3025...\times n\quad \Rightarrow \quad \frac { n\ln { { { 10 } } }  }{ n } \simeq 2.3025...\quad \Rightarrow \quad \ln { { { 10 } } } \simeq 2.3025...

アロメトリー式

資料:
ja.wikipedia.org

y=a{ x }^{ n }

これは対数でも書き表せる

\Leftrightarrow \quad \log { y } =\log { a } +n\log { x }

対数グラフで見た時、xが1の時、aの点を通り、傾きがnの直線になる

調和平均の式の求め方

f:id:cqbosinko:20180111221949p:plain
数直線で考えると上記になる。この数直線のxを求めると考える

\frac { 1 }{ x } =\frac { \frac { 1 }{ a } +\frac { 1 }{ b }  }{ 2 } \Leftrightarrow \frac { 2 }{ x } =\frac { 1 }{ a } +\frac { 1 }{ b } \Leftrightarrow 2=\frac { x }{ a } +\frac { x }{ b } \Leftrightarrow 2ab=bx+ax\Leftrightarrow 2ab=\left( a+b \right) x\Leftrightarrow x=\frac { 2ab }{ a+b }

双曲線のグラフと調和数列のグラフは同じものと言える

f:id:cqbosinko:20180111225803p:plain

調和数列は例えば音楽の倍音によるハーモニーのような心地よい感情を想起させたりする(波状のものに相性がいい)
おそらくゲームバランスのパラメーター調整などで使った方が良いと予想される

対数関数について

(資料書籍:ふたたびの微分積分P167 底の変換公式)

\log _{ a }{ b } =m の時、\displaystyle m=\frac { \log _{ c }{ b }  }{ \log _{ c }{ a }  } となる

これを証明すると以下になる。まず各対数関数から、それぞれ以下の指数関数が導ける

\log _{ a }{ b } =m\quad \Rightarrow \quad { a }^{ m }=b\\ \log _{ c }{ a } =n\quad \Rightarrow \quad c^{ n }=a\\ \log _{ c }{ b } =o\quad \Rightarrow \quad c^{ o }=b

{ a }^{ m }=bに対してそれぞれの指数関数を代入すると

\Rightarrow \quad \left( { c^{ n } } \right) ^{ m }={ c^{ o } }\quad \Rightarrow \quad c^{ mn }={ c^{ o } }\quad \Rightarrow \quad \overbrace { mn=o }^{ 指数部分に注目して考えればこうなる } \quad \Rightarrow \quad m=\frac { o }{ n } \quad \Leftrightarrow \quad \log _{ a }{ b } =\frac { \log _{ c }{ b }  }{ \log _{ c }{ a }  }

と考える事が出来る。この時、cは底を揃えるためのもので、実際は何を使ってもいい。極端に言えば計算を運用しやすいネイピア数にして置くと色々便利であると言える

\therefore \quad c^{ m }={ c^{ \frac { o }{ n }  } }

実際の計算例で考えてみる

\log _{ 4 }{ 64 } =3 の式があったとして、「底の変換公式」を利用してみると

\frac { \log _{ 2 }{ 64 }  }{ \log _{ 2 }{ 4 }  } =\frac { 6 }{ 2 } =3\quad \Leftrightarrow \quad { 4 }^{ 3 }={ 4 }^{ \frac { 6 }{ 2 }  }\\ \frac { \log _{ 4 }{ 64 }  }{ \log _{ 4 }{ 4 }  } =\frac { 3 }{ 1 } =3\quad \Leftrightarrow \quad { 4 }^{ 3 }={ 4 }^{ \frac { 3 }{ 1 }  }\\ \frac { \log _{ 5 }{ 64 }  }{ \log _{ 5 }{ 4 }  } =\frac { 2.5840... }{ 0.86135... } =2.999...\simeq 3\quad \Leftrightarrow \quad { 4 }^{ 3 }\simeq { 4 }^{ \frac { 2.5840... }{ 0.86135... }  }

この時、「底の変換公式」の分母の真数が基準(底、ベース)となる。式の構造として底が共通同士の指数比に持っていく為に対数関数を利用していると考えると良い

成長とネイピア数の関係について

TODO