増加曲線

勘違いされたら困るので念の為書いておくけど増加曲線というのは私の造語で数学用語ではないのでお間違いなく(^^; んで何が言いたいかというと、RPGツクールとかで出てくるパラメタ増加の度合いを曲線で表す奴。平均的なキャラは直線的で早熟なキャラは上に凸なグラフで、晩成なキャラは下に凸になるとか。まあとにかく、口で言ったりフリーハンドで示すのは簡単だが定式化するのはちょい微妙に難しかったり。いやそうでもないか? まあとりあえず目指してみる。
簡単の為にスタートを(0,0)、ゴールを(1,1)としてみる。この2点を通る単調増加関数を生成するのだが・・・どうやって出したか忘れたけど普通に勘で出した気がしたので結果だけ書きます(ぇー
y=a^{\beta}
βの値が1のとき直線で0<β<1で上に凸、1<β<∞で下に凸になります。上と下で分布に偏りがありすぎますが調整は簡単で、微分してみて1を入れるとβになることからβは点(1,1)における接線の傾きになります。だからβ=tan(β’)とかおいておけば0<β’<π/4で上に凸、π/4<β<π/2で下に凸になってくれます。
ちょっとだけ拡張してゴール地点を(1,1)でなく(Nx, Ny)にしたらどうなるか?まあ簡単ですね。ただ単に拡大縮小するのと同じですね。y=f(x)をx方向にNx倍、y方向にNy倍するにはy=Ny・f(x/Nx)とすればよいので
y=N_y (\frac{x}{N_x})^{\beta}
となります。

さらに拡張してみます。
これまでは2点だけでしたがその間にもう1点設けてそこを通るようにします。条件としては、その間の1点は2点の直線上に位置して、曲線は前半が下に凸なら後半は上に凸、逆もしかり。間の1点がゴール点と一致していれば先程のと同じカーブになる。絵に描かないとわからないかもしれないがまあそれは後半にて(何)
まず、中間の点の座標だが、スタートを(0,0)、ゴールを(Nx, Ny)の場合、(αNx, αNy)とする。0≦α≦1である。まず前半(0≦x<αNx)の曲線だが、これは先程の結果がそのまま使える。
y=\alpha N_y(\frac{x}{\alpha N_x})^{\beta}
では後半は?普通に考えればただひっくり返せばいいだけである。というわけで、拡大縮小(y=Nxf(x/Ny))・回転(y=-f(-x))・移動(y=f(x-Mx)+My)を施すだけである。TeX書くのめどいので結果だけ書くと(ぇ
y=N_y(1-(1-\alpha)(\frac{N_x-x}{N_x(1-\alpha)})^{\beta})
となります。さてこの結果は勘で描いたものなので前半と後半の接合点で不自然な形になる可能性もある。そういうわけで1階微分連続性を見てみると・・・てやっぱりTeX書くの面倒ので皆さんやってみてください(ぇー ちゃんと両方とも(αNx, αNy)にてβ(Ny/Nx)になっているはずなので(^^;