python bezier 曲线

1.手写bezier公式,生成bezier代码:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 import bezier
 4 b_xs = []
 5 b_ys = []
 6 
 7 
 8 # xs表示原始数据
 9 # n表示阶数
10 # k表示索引
11 def one_bezier_curve(a, b, t):
12     return (1 - t) * a + t * b
13 
14 
15 def n_bezier_curve(xs, n, k, t):
16     if n == 1:
17         return one_bezier_curve(xs[k], xs[k + 1], t)
18     else:
19         return (1 - t) * n_bezier_curve(xs, n - 1, k, t) + t * n_bezier_curve(xs, n - 1, k + 1, t)
20 
21 
22 def bezier_curve(xs, ys, num, b_xs, b_ys):
23     n = 5  # 采用5次bezier曲线拟合
24     t_step = 1.0 / (num - 1)
25     # t_step = 1.0 / num
26     print(t_step)
27     t = np.arange(0.0, 1 + t_step, t_step)
28     print(len(t))
29     for each in t:
30         b_xs.append(n_bezier_curve(xs, n, 0, each))
31         b_ys.append(n_bezier_curve(ys, n, 0, each))
32 
33 
34 def func():
35     xs = [1.0, 2.1, 3.0, 4.0, 5.0, 6.0]
36     ys = [0, 1.1, 2.1, 1.0, 0.2, 0]
37     num = 20
38 
39     bezier_curve(xs, ys, num, b_xs, b_ys)  # 将计算结果加入到列表中
40     print(b_xs, b_ys)
41     plt.figure()
42     plt.plot(b_xs, b_ys, 'r')  # bezier曲线
43     # plt.plot(xs, ys)  # 原曲线
44     # plt.show()
45 
46 func()

2.使用python3 内置bezier包,完成bezier曲线

1 a = np.array([[1.0, 2.1, 3.0, 4.0, 5.0, 6.0], [0, 1.1, 2.1, 1.0, 0.2, 0]])
2 curve = bezier.Curve(a, degree=5)
3 # print(curve)
4 s_vals = np.linspace(0.0, 1.0, 30)
5 data = curve.evaluate_multi(s_vals)
6 x33 = data[0]
7 y33 = data[1]
8 plt.plot(x33, y33, 'y', linewidth=2.0, linestyle="-", label="y2")
9 plt.show()

猜你喜欢

转载自www.cnblogs.com/yang220/p/12024532.html