代码制作含节点的贝塞尔曲线
时间: 2024-01-27 09:04:31 浏览: 12
以下是一个简单的实现带节点的贝塞尔曲线的 Python 代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成数据点
x = np.array([0, 1, 2, 3, 4, 5, 6])
y = np.array([0, 3, 1, 2, 1, 4, 3])
# 节点数
n = len(x) - 1
# 控制点
P = np.zeros((n+1, 2))
P[0] = [x[0], y[0]]
for i in range(1, n):
P[i] = [2*x[i]-P[i-1][0], 2*y[i]-P[i-1][1]]
P[n] = [x[n], y[n]]
# 插值函数
def B(t, i, n):
if n == 0:
if i == 0 and t == 0:
return 1
else:
return 0
return (1-t)*B(t, i, n-1) + t*B(t, i-1, n-1)
# 生成曲线上的点
t = np.linspace(0, 1, 100)
curve = np.zeros((len(t), 2))
for i in range(len(t)):
curve[i] = [sum([P[j][0]*B(t[i], j, n) for j in range(n+1)]),
sum([P[j][1]*B(t[i], j, n) for j in range(n+1)])]
# 绘制结果
plt.plot(x, y, 'o', label='data points')
plt.plot(curve[:,0], curve[:,1], label='Bézier curve')
plt.legend()
plt.show()
```
代码中,我们首先生成了一些数据点,然后根据这些点计算出了贝塞尔曲线上的控制点。接下来,我们定义了一个递归函数 `B()`,用于计算贝塞尔曲线上的点。最后,我们将数据点和曲线上的点绘制出来,得到了如下的结果:
![Bezier Curve with Nodes](https://i.imgur.com/7W5Mj4g.png)