三次贝塞尔(Bezier)曲线

基本定义

三次贝塞尔曲线是由4个控制点定义的参数曲线,是计算机图形学中最常用的贝塞尔曲线形式。

数学公式

给定控制点 ( P_0, P_1, P_2, P_3 ),三次贝塞尔曲线的参数方程为:

其中:

  • ( t ) 是参数,从0到1变化
  • 各项系数是伯恩斯坦基函数:

重要特性

  1. 端点性质

    • ( B(0) = P_0 ),曲线起点在第一个控制点
    • ( B(1) = P_3 ),曲线终点在最后一个控制点
  2. 端点切线

    • 起点切线方向:( P_1 - P_0 )
    • 终点切线方向:( P_3 - P_2 )
  3. 凸包性:曲线完全位于控制点的凸包内

  4. 仿射不变性:对控制点进行仿射变换等价于对曲线进行同样变换

矩阵表示

三次贝塞尔曲线可以用矩阵形式表示:

求导公式

一阶导数(切线方向):

二阶导数:

应用示例(代码)

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

def cubic_bezier(t, P0, P1, P2, P3):
    """计算三次贝塞尔曲线上的点"""
    return (1-t)**3 * P0 + 3*(1-t)**2*t * P1 + 3*(1-t)*t**2 * P2 + t**3 * P3

# 控制点
P0 = np.array([0, 0])
P1 = np.array([1, 3])
P2 = np.array([4, 2])
P3 = np.array([5, 0])

# 生成曲线点
t_values = np.linspace(0, 1, 100)
curve_points = np.array([cubic_bezier(t, P0, P1, P2, P3) for t in t_values])

# 绘图
plt.figure(figsize=(8, 6))
plt.plot(curve_points[:, 0], curve_points[:, 1], 'b-', label='贝塞尔曲线')
plt.plot([P0[0], P1[0], P2[0], P3[0]], 
         [P0[1], P1[1], P2[1], P3[1]], 'ro--', label='控制点')
plt.legend()
plt.grid(True)
plt.axis('equal')
plt.show()

应用场景

  1. 字体设计:TrueType字体使用二次贝塞尔曲线,而PostScript字体使用三次贝塞尔曲线
  2. 计算机图形学:路径绘制、动画轨迹
  3. 工业设计:汽车、飞机等曲面设计
  4. UI设计:平滑的过渡动画

与二次贝塞尔曲线的比较

特性 二次贝塞尔曲线 三次贝塞尔曲线
控制点数 3个 4个
多项式次数 2次 3次
灵活性 较低,只能形成抛物线 更高,可以形成S形曲线
应用 简单曲线 复杂曲线设计

三次贝塞尔曲线因其灵活性和平滑性,成为矢量图形和曲线设计中最重要的工具之一。

相关推荐
王能2 个月前
Android三阶贝塞尔曲线应用——根据指定点画出完美的贝塞尔
android·贝塞尔曲线·图表·顶点
haing20192 个月前
计算点到三次 Bézier 曲线最短距离及对应参数 u 的方法(转化为五次多项式)
bezier曲线·数值解法·最短距离·五次多项式
haing20194 个月前
已知两个平面点的坐标、切线方向、曲率,构造三阶Bezier曲线的方法
平面·曲率·bezier曲线·g2连续
Huntto6 个月前
匀速二阶贝塞尔曲线(二)
贝塞尔曲线
Huntto6 个月前
匀速二阶贝塞尔曲线
贝塞尔曲线
码农客栈1 年前
贝塞尔曲线学习
贝塞尔曲线
别给迷住了1 年前
WPF 绘制过顶点的圆滑曲线(样条,贝塞尔)
wpf·贝塞尔曲线·样条曲线·圆滑曲线·过顶点·beziersegment
艾恩小灰灰2 年前
探索CSS中的贝塞尔曲线cubic-bezier()函数:掌握自定义动画曲线的艺术
前端·css·css3·贝塞尔曲线·css动画·cubic-bezier·css函数
Jurio.2 年前
多项式和Bezier曲线拟合
python·bezier曲线