#***************************/ # n次ベジエ曲線 */ # coded by Y.Suganuma */ #***************************/ #******************************/ # n次ベジエ曲線 */ # n : 次数 */ # B : 多角形の頂点座標 */ # t : 計算したい点の位置 */ # return : 座標 */ # coded by Y.Suganuma */ #******************************/ def Bezier(n, b, t) # 初期設定 p = [0.0, 0.0] # 計算 for i in 0 ... n+1 j = brend(n, i, t) p[0] += b[i][0] * j p[1] += b[i][1] * j end return p end #******************************/ # ベジエ基底関数 */ # n,i : 次数 */ # t : 計算したい点の位置 */ # return : 結果 */ #******************************/ def brend(n, i, t) x = 1.0 y = 1.0 ni = kaijo(i) * kaijo(n-i) ni = kaijo(n) / ni for i1 in 1 ... i+1 x *= t end t = 1.0 - t for i1 in 1 ... n-i+1 y *= t end return ni * x * y end #****************/ # nの階乗の計算 */ #****************/ def kaijo(n) k = 1.0 if n > 1 for i1 in 2 ... n+1 k *= i1 end end return k end # 設定 step = 0.05 n = 3 b = [[1.0, 1.0], [2.0, 3.0], [4.0, 3.0], [3.0, 1.0]] # 実行と出力 t = 0.0 for i1 in 0 ... 21 p = Bezier(n, b, t) printf("%f %f %f\n", t, p[0], p[1]) t += step end