#***************************/
# 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