当前位置: 首页 > news >正文

贝塞尔曲线:优雅的数学艺术

贝塞尔曲线:优雅的数学艺术

1. 什么是贝塞尔曲线?

贝塞尔曲线(Bézier Curve)是一种由控制点定义的参数化曲线,广泛应用于计算机图形学、动画设计、字体渲染和工程建模中。它由法国工程师皮埃尔·贝塞尔(Pierre Bézier)在20世纪60年代提出,最初用于汽车车身设计。

核心特点

  • 由控制点定义:曲线形状由一组控制点 P 0 , P 1 , … , P n P_0, P_1, \dots, P_n P0,P1,,Pn 决定。
  • 光滑性:曲线始终位于控制点的凸包内,且具有连续可微性( C ∞ C^\infty C 光滑)。
  • 递归定义:可通过德卡斯特里奥算法(De Casteljau’s algorithm)递归计算。

2. 贝塞尔曲线的数学表达

(1) 一般形式

n n n 阶贝塞尔曲线由 n + 1 n+1 n+1 个控制点定义,其参数方程如下:
B ( t ) = ∑ i = 0 n ( n i ) ( 1 − t ) n − i t i P i , t ∈ [ 0 , 1 ] \mathbf{B}(t) = \sum_{i=0}^n \binom{n}{i} (1-t)^{n-i} t^i \mathbf{P}_i, \quad t \in [0,1] B(t)=i=0n(in)(1t)nitiPi,t[0,1]
其中:

  • P i \mathbf{P}_i Pi 是第 i i i 个控制点(向量)。
  • ( n i ) \binom{n}{i} (in) 是二项式系数(组合数)。

(2) 常见贝塞尔曲线

阶数名称方程
1阶线性贝塞尔曲线 B ( t ) = ( 1 − t ) P 0 + t P 1 \mathbf{B}(t) = (1-t)\mathbf{P}_0 + t\mathbf{P}_1 B(t)=(1t)P0+tP1
2阶二次贝塞尔曲线 B ( t ) = ( 1 − t ) 2 P 0 + 2 ( 1 − t ) t P 1 + t 2 P 2 \mathbf{B}(t) = (1-t)^2 \mathbf{P}_0 + 2(1-t)t \mathbf{P}_1 + t^2 \mathbf{P}_2 B(t)=(1t)2P0+2(1t)tP1+t2P2
3阶三次贝塞尔曲线 B ( t ) = ( 1 − t ) 3 P 0 + 3 ( 1 − t ) 2 t P 1 + 3 ( 1 − t ) t 2 P 2 + t 3 P 3 \mathbf{B}(t) = (1-t)^3 \mathbf{P}_0 + 3(1-t)^2 t \mathbf{P}_1 + 3(1-t)t^2 \mathbf{P}_2 + t^3 \mathbf{P}_3 B(t)=(1t)3P0+3(1t)2tP1+3(1t)t2P2+t3P3

:高阶贝塞尔曲线计算复杂,实际应用中常使用分段低阶曲线(如三次贝塞尔曲线)。


3. MATLAB 实现

我们使用 MATLAB 绘制二次三次贝塞尔曲线,并可视化控制点和曲线变化。

(1) 二次贝塞尔曲线

% 定义控制点
P0 = [0, 0];
P1 = [2, 3];
P2 = [4, 0];% 参数 t ∈ [0,1]
t = linspace(0, 1, 100);% 计算贝塞尔曲线
Bx = (1-t).^2 .* P0(1) + 2*(1-t).*t .* P1(1) + t.^2 .* P2(1);
By = (1-t).^2 .* P0(2) + 2*(1-t).*t .* P1(2) + t.^2 .* P2(2);% 绘制
figure;
plot([P0(1), P1(1), P2(1)], [P0(2), P1(2), P2(2)], 'ro--'); % 控制点连线
hold on;
plot(Bx, By, 'b-', 'LineWidth', 2); % 贝塞尔曲线
title('二次贝塞尔曲线');
legend('控制多边形', '贝塞尔曲线');
grid on;

运行结果
在这里插入图片描述


(2) 三次贝塞尔曲线

% 定义控制点
P0 = [0, 0];
P1 = [1, 4];
P2 = [3, 4];
P3 = [4, 0];% 参数 t ∈ [0,1]
t = linspace(0, 1, 100)';% 计算贝塞尔曲线
B = (1-t).^3 .* P0 + 3*(1-t).^2 .* t .* P1 + 3*(1-t).*t.^2 .* P2 + t.^3 .* P3;% 绘制
figure;
plot([P0(1), P1(1), P2(1), P3(1)], [P0(2), P1(2), P2(2), P3(2)], 'ro--'); % 控制点连线
hold on;
plot(B(:,1), B(:,2), 'b-', 'LineWidth', 2); % 贝塞尔曲线
title('三次贝塞尔曲线');
legend('控制多边形', '贝塞尔曲线');
grid on;

运行结果
在这里插入图片描述


4. 贝塞尔曲线的应用

  1. 计算机图形学:Photoshop 钢笔工具、SVG 路径、3D 建模。
  2. 动画设计:平滑关键帧插值(如 CSS cubic-bezier)。
  3. 字体设计:TrueType 字体使用二次贝塞尔曲线。
  4. 机器人路径规划:生成平滑运动轨迹。

5. 总结

  • 贝塞尔曲线通过控制点定义,具有光滑性凸包性
  • MATLAB 可轻松实现二次、三次贝塞尔曲线,并支持交互式调整。
  • 广泛应用于图形学、动画、工程设计等领域。
http://www.xdnf.cn/news/1034929.html

相关文章:

  • C# 解析 URL URI 中的参数
  • OpenWrt | 解决NTFS格式的硬盘意外断电之后无法再次挂载的问题
  • 轻量免安装 透明背景图标一键提取,系统文件图标随取随用
  • NGINX 四层共享内存区同步模块实战 `ngx_stream_zone_sync_module`
  • qml显示svg矢量图形
  • FreeRTOS的低功耗Tickless模式
  • RLHF调参实战手册:实用Trick、现象排查与解决思路(持续更新)
  • 动态BGP服务器的用途都有什么?
  • Softhub软件下载站实战开发(二):项目基础框架搭建
  • 萌系盲盒陷维权风暴,Dreams委托David律所已立案,速避雷
  • 历史数据分析——贵州茅台
  • LeetCode[106]从中序和后序遍历序列构造二叉树
  • Sngine 4.0.4海外社交平台PHP源码 – 多语言支持短视频和博客订阅(源码下载)
  • [学习] 多项滤波器在信号插值和抽取中的应用:原理、实现与仿真(完整仿真代码)
  • 使用Three.js创建炫酷的3D玻璃质感动态效果
  • 大小端的区别
  • MiniCPM4端侧AI模型
  • 机器学习算法_支持向量机
  • 图数据库(TuGraph)
  • DataX 框架学习笔记
  • GDI 区域检测与边框宽度的关系
  • 实习记录1
  • ImportError: DLL load failed while importing win32api: 找不到指定的模块
  • 18.vue.js的scoped样式隔离?原理和使用?(1)
  • 在线五子棋
  • 【Docker基础】Docker核心概念:命名空间(Namespace)与资源隔离联系
  • 从0开始学习R语言--Day23--稳健回归
  • 电路问题处理:SGMII链路中的AC耦合电容摆放位置
  • 轮廓 裂缝修复 轮廓修复 填补孔洞 源代码
  • 「Flink」Flink项目搭建方法介绍