贝塞尔python代码示例
时间: 2025-01-06 20:34:23 浏览: 9
### 关于贝塞尔曲线的Python代码示例
对于希望理解并实现贝塞尔曲线的人来说,下面提供了一个简单的二次贝塞尔曲线的Python实现方法[^2]。
```python
def binomial_coefficient(n, k):
"""Calculate the binomial coefficient."""
result = 1
for i in range(1, min(k, n - k) + 1):
result *= (n + 1 - i) / i
return result
def bernstein_polynomial(i, n, t):
"""Compute Bernstein polynomial value at a given point."""
return binomial_coefficient(n, i) * pow(t, i) * pow((1 - t), (n - i))
def bezier_curve(control_points, num_samples=100):
"""
Calculate points on a Bezier curve.
:param control_points: List of tuples representing the control points.
:param num_samples: Number of samples to generate along the curve.
:return: A list of sampled points as tuples.
"""
degree = len(control_points) - 1
curve_points = []
for sample_index in range(num_samples + 1):
t = float(sample_index) / num_samples
x = sum([bernstein_polynomial(i, degree, t) *
control_point[0] for i, control_point in enumerate(control_points)])
y = sum([bernstein_polynomial(i, degree, t) *
control_point[1] for i, control_point in enumerate(control_points)])
curve_points.append((x, y))
return curve_points
```
上述代码定义了几个辅助函数用于计算二项式系数以及伯恩斯坦多项式的值,并最终通过`bezier_curve()` 函数返回一系列位于由输入参数 `control_points` 定义的贝赛尔曲线上采样的点。此版本适用于任何阶次的贝塞尔曲线,只要提供了适当数量的控制点即可[^1]。
为了可视化这条曲线,在Manim库中有一个很好的例子展示了如何创建一个场景并将贝塞尔曲线加入其中[^3]:
```python
from manim import *
class BezierExample(Scene):
def construct(self):
# Define three control points forming an L shape
points = [LEFT*2, ORIGIN, UP*2]
# Create and add the Bezier curve object into scene
bezier_curve_obj = VMobject().set_color(BLUE).set_points_smoothly(points)
# Animate creation process
self.play(Create(bezier_curve_obj))
# Hold frame before ending animation
self.wait(2)
```
这段脚本利用 Manim 库中的功能实现了动态展示一条基于指定控制点集形成的贝塞尔路径的过程。值得注意的是这里的 `VMobject.set_points_smoothly()` 方法简化了原本手动构建贝塞尔曲线的操作。
阅读全文