# -*- coding: UTF-8 -*- from math import * import numpy as np ############################### # n次ベジエ曲線 # n : 次数 # B : 多角形の頂点座標 # t : 計算したい点の位置 # return : 座標 # coded by Y.Suganuma ################################ def Bezier(n, B, t) : # 初期設定 P = np.array([0, 0,], np.float) # 計算 for i in range(0, n+1) : J = brend(n, i, t) P[0] += B[i][0] * J P[1] += B[i][1] * J return P ############################## # ベジエ基底関数 # 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 range(1, i+1) : x *= t t = 1.0 - t for i1 in range(1, n-i+1) : y *= t return (ni * x * y) ################ # nの階乗の計算 ################ def kaijo(n) : k = 1.0 if n > 1 : for i1 in range(2, n+1) : k *= i1 return k ---------------------------------- # -*- coding: UTF-8 -*- import numpy as np from math import * from function import Bezier, brend, kaijo ############################ # n次ベジエ曲線 # coded by Y.Suganuma ############################ # 設定 step = 0.05 n = 3 B = np.array([[1, 1], [2, 3], [4, 3], [3, 1]], np.float) t = 0.0 # 実行と出力 for i1 in range(0, 21) : P = Bezier(n, B, t) print(t, P[0], P[1]) t += step