贝塞尔曲线python代码实现
时间: 2025-01-02 14:38:22 浏览: 20
### Python 实现贝塞尔曲线
对于不同阶数的贝塞尔曲线,在Python中有多种方式可以实现。下面提供了一个通用的方法来计算任意阶次的贝塞尔曲线上的一系列点。
#### 计算一维空间内的贝塞尔曲线坐标
为了简化理解,先展示如何在一维空间内通过给定的时间参数`\( t \)`(范围0到1),以及一系列控制点的位置来求解该位置处的值:
```python
def bernstein_poly(i, n, t):
"""
The Bernstein polynomial of n, i as a function of t.
"""
return comb(n, i) * (t**(n-i)) * (1 - t)**i
def bezier_curve(points, num=100):
"""Given a set of control points, returns the
bezier curve defined by the control points.
:param points: List of control points coordinates.
:type points: list of float tuples
:param num: Number of points to generate on the curve.
:return: Points on the Bezier Curve.
"""
N = len(points)
t = np.linspace(0, 1, num=num)
curve = np.zeros((num, 2))
for i in range(N):
curve += np.outer(bernstein_poly(i, N-1, t), points[i])
return curve
```
上述代码片段展示了如何利用伯恩斯坦多项式\[ ^{N-1}C_i\cdot t^{N-1-i}\cdot(1-t)^i \][^1] 来构建贝塞尔曲线方程,并返回由指定数量离散点构成的连续路径。
#### 绘制二维平面中的贝塞尔曲线
接下来是一个完整的例子,它不仅实现了上面提到的功能,还能够可视化这些数据点形成的图形:
```python
import numpy as np
from scipy.special import comb
import matplotlib.pyplot as plt
# 定义几个控制点
control_points = [(0, 0), (0.5, 1), (1, 0)]
# 使用前面定义好的函数获取Bezier曲线上的多个点
curve = bezier_curve(control_points)
# 将结果转换成适合绘图的形式
x_values, y_values = zip(*curve)
plt.figure(figsize=(8, 6))
plt.plot(x_values, y_values, label='Bezier Curve', color='blue')
for point in control_points:
plt.scatter(point[0], point[1], marker="o", s=100, edgecolors='black')
plt.title('Quadratic Bezier Curve Example with Control Points')
plt.legend()
plt.grid(True)
plt.show()
```
这段脚本会创建一个窗口显示一条基于三个控制点绘制出来的二次贝塞尔曲线图像[^2]。
阅读全文