グラフ

乱数に重みを付けるためにグラフを描いて計算式を導くといったことを最近していました。こういった0から1までの値のカーブはCGやプログラミングではよく使われていますよね。今回は中学高校の数学の復習がてら書いてみます。

0から1へ到達し、また0に戻っていく曲線グラフ。何かが点滅するアニメーションやパーティクルの透明度なんかに使えそうです。

中学で勉強した二次関数のグラフy = a * x^2の曲線を描いてみます。傾きはy = a * x^2のaです。1×1の正方形に収めるにはxが0.5の時にyが-1である必要があるので、-1 = (0.5^2) * aで、aは-4だとわかります。図のような位置に収めるにはグラフy = -4 * x^2をX方向に0.5、Y方向へ1移動させます。そうすると式は

y = -4 * (x-0.5)^2 + 1

となります。

4乗のy = a * x^4の式を使えば図のような頂上付近が平たくなるカーブになります。式の導き方は先ほどと同じです。

y = -16*(x – 0.5)^4 + 1

ですね。

次は0から1へ到達するグラフです。シェーダーのライティングや、乱数に重みを付けたい、といった時に使えそうです。

0から1へ進んでいきますが、中央付近で緩やかになるカーブの数式を考えてみます。三次関数のグラフy = a * x^3 が使えそうです。-1から1までの範囲を1/2のスケールにして考えます。x = 0.5の時にy = 0.5なので、ここで傾きaを求めます。0.5 = a * 0.5^3と値を入れてみるとa = 4になります。X方向へ0.5、Y方向へ0.5移動させれば図の位置に収まるので、式は

y = 4 * (x -0.5)^3 + 0.5

となります。乱数(0~1)をこの式に通せば中央付近に値が集中します。

5乗にすれば中央付近がより平たくなります。同じ要領で導けば

y = 16 * (x – 0.5)^5 + 0.5

となります。

今度はは少し難しくなりますが、すぐに1に到達した後に緩やかに0へ戻っていくカーブを考えてみます。このカーブはパーティクルの透明度や動きのアニメーションに使えそうです。

曲線の流れは3次関数で、x=0でひとつの恨、x =1の時に重根なので、y = a * x * (x – 1) * (x -1) の式になりそうです。y = 1の時のxの値を知りたいので、式を微分して求めていきます。

y = x * (x – 1) * (x -1)

= x^3 – 2 * x^2 + x

グラフの頂上、傾きが平らになる場所(極値)を知るために式を微分。

y’ = 3 * x^2 – 4 * x + 1

= (3 * x – 1) * (x – 1)

つまりx = 1/3と x = 1の時が極値とわかります。(図の頂上部分のXの値が1/3です)

元の式y = a * x * (x – 1) * (x -1)のxに1/3を入れてみるとa = 6.75とわかります。というわけで

y = 6.75 * x * (x – 1)^2

が図のグラフの数式になります。

ゆっくり上がってすっと下がる左右反転させたグラフは、xに-x+2*a(aは反転させたいX座標)を代入すれば導けます。つまりxにマイナスを掛けて傾きを反転させ、それを反転させたい中心座標までと同じ距離を向こう側に移動させる感じですね。y = 6.75 * x * (x – 1)^2のxに-x + 2 * 0.5を代入すると、

y = 6.75 * (-x + 1) * (-x)^2

となります。

p.s.
高校数学の復習みたいなエントリーでしたが、地味に重要だと思っています。中学高校での勉強がだんだんと仕事につながってきました。使用している画像はGraphing Calculator ProというiPhoneの関数グラフ電卓アプリで、通勤時の暇つぶしに使ったりしてます。

広告

グラフ」への2件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中