http://next1.cc.it-hiroshima.ac.jp/MULTIMEDIA/numeanal1/node16.html
http://www5d.biglobe.ne.jp/~stssk/maze/spline.html
http://www.f-kmr.com/numana/spline.pdf#search='B%E3%82%B9%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E9%96%A2%E6%95%B0'
一方で、Bスプライン関数の係数を場合分けによって決定するものが公開されています。(次数が決まれば係数が決まるとか...)
しかし、いったいなぜこのような場合分けと係数になるのでしょうか、素直に未知数を消していけば出てくるのですか?
よくわからないので教えてください。以下は場合分けの方法です。
; ################################################################
; TYPE MACRO #define NULL 0 ; DATA MACRO #const DIM_MAX 10 #const End_Point DIM_MAX-1 ; ################################################################ ; DATA count = 0 // mouse(x, y) musx = 0 musy = 0 ; ################################################################ ; CODE screen 0, ginfo_dispx, ginfo_dispy, 0, 0, 0 mes "" + DIM_MAX + " この座標を決めてください" repeat stick k, NULL, 1 : if k != 256 { wait 1 : continue } musx(count) = mousex musy(count) = mousey count++ repeat count boxf musx(cnt)-5, musy(cnt)-5, musx(cnt)+4, musy(cnt)+4 loop if count == DIM_MAX { break } loop gosub *MainObjDraw ; ################################################################ stop ; ################################################################ ; CODE(SUB) ; ---------------------------------------------------------------- *MainObjDraw ; ---------------------------------------------------------------- div = 0.0002 * DIM_MAX t = -1.0 repeat if t >= DIM_MAX : break x = 0.0 y = 0.0 j = -2 repeat if j > DIM_MAX+1 : break k = j if j < 0 : k = 0 if j > End_Point : k = End_Point tt = t - j if tt < 0.0 : tt = -tt if tt < 1.0 { a = (3.0 * tt * tt * tt -6.0 * tt * tt + 4.0) / 6.0 } else : if(tt < 2.0) { a = tt - 2.0 a = -a * a * a / 6.0 } else : a = 0.0 x + a * musx(k) y + a * musy(k) j++ loop t + div pset x, y loop return ; ################################################################