Smoothstep関数
多項式は単純に見えるが奥が深い。今回紹介するSmoothstep関数を用いると、代数的な式で点同士を(程よく)滑らかに繋ぐことができる。線型補間(Linear Interpolation)では変化が急すぎて辛いときに便利で、ゲーム等で用いられる地形生成などを陰で支えている。*1
定義
一般に定義してもいいが、正規化したものだけを考える。整数に対して
次のSmoothstep関数とは、
なる多項式
であって
を満たすものを言う。以下にが小さいときの具体的な式を挙げれば
となる。特にのときは線型補間そのものなので、この拡張だと思っても良い。
![]()
愚直に計算してみる
取りあえずなので、
と書き直す。
と展開すれば、まずである。また
に対しライプニッツ則より
となる。ただしはポッホハンマー記号で、
と定める。
と置けば二項係数を用いて
を得る。行列で書き下せば、
となる。微妙に見たことありそうで無いが、逆行列は小さい順に
と計算できる。一番右上の数字が求めたいの最高次係数にちゃんとなっていることを確認できる。次は予想なので誰か証明して下さい。
予想
は、組
が
の分割(
)全体を動くとき、
の総和となる。
例えばのとき、
の分割は
であり、その重複度は
なので
を得る。()
積分表示を求めてみる
明示的にを表示することが難しくても、積分表示を求めることは簡単にでき、多項式なので頑張れば計算もできる。条件より
と表すことが出来る。よってこれを積分して
が求める積分表示である。ベータ関数を思い出せば
が分かる。より
が従う。
ちなみに、この表示から適当なに対し
が分かるので、の増減等は直ぐに分かる。特に
は
を中心とした偶関数になるので、
つまりを得る。
参考文献
グラフはhttp://graph.tk/で生成しました。