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

贝塞尔曲线的切矢量

贝塞尔曲线的切矢量(切线向量)表示曲线在某一点处的方向导数,即曲线在该点的瞬时变化方向。切矢量的计算依赖于贝塞尔曲线的参数方程及其导数。

贝塞尔曲线的定义

一个 n 阶贝塞尔曲线的参数方程为:
B ( t ) = ∑ i = 0 n P i ⋅ B i , n ( t ) , t ∈ [ 0 , 1 ] \mathbf{B}(t) = \sum_{i=0}^n \mathbf{P}_i \cdot B_{i,n}(t), \quad t \in [0,1] B(t)=i=0nPiBi,n(t),t[0,1]
其中:

  • P i \mathbf{P}_i Pi 是控制点,
  • B i , n ( t ) = ( n i ) t i ( 1 − t ) n − i B_{i,n}(t) = \binom{n}{i} t^i (1-t)^{n-i} Bi,n(t)=(in)ti(1t)ni 是伯恩斯坦基多项式。

切矢量的计算

切矢量是贝塞尔曲线的一阶导数 B ′ ( t ) \mathbf{B}'(t) B(t),其表达式为:
B ′ ( t ) = d d t B ( t ) = ∑ i = 0 n P i ⋅ B i , n ′ ( t ) \mathbf{B}'(t) = \frac{d}{dt} \mathbf{B}(t) = \sum_{i=0}^n \mathbf{P}_i \cdot B'_{i,n}(t) B(t)=dtdB(t)=i=0nPiBi,n(t)
其中,伯恩斯坦基多项式的导数为:
B i , n ′ ( t ) = n [ B i − 1 , n − 1 ( t ) − B i , n − 1 ( t ) ] B'_{i,n}(t) = n \left[ B_{i-1,n-1}(t) - B_{i,n-1}(t) \right] Bi,n(t)=n[Bi1,n1(t)Bi,n1(t)]
因此,贝塞尔曲线的切矢量可表示为:
B ′ ( t ) = n ∑ i = 0 n − 1 ( P i + 1 − P i ) B i , n − 1 ( t ) \mathbf{B}'(t) = n \sum_{i=0}^{n-1}(\mathbf{P}_{i+1} - \mathbf{P}_i) B_{i,n-1}(t) B(t)=ni=0n1(Pi+1Pi)Bi,n1(t)

特殊情况

  1. 起点 t = 0 t=0 t=0 的切矢量
    B ′ ( 0 ) = n ( P 1 − P 0 ) \mathbf{B}'(0) = n(\mathbf{P}_1 - \mathbf{P}_0) B(0)=n(P1P0)
    即切矢量方向为 P 1 − P 0 \mathbf{P}_1 - \mathbf{P}_0 P1P0

  2. 终点 ( t = 1 (t=1 (t=1) 的切矢量
    B ′ ( 1 ) = n ( P n − P n − 1 ) \mathbf{B}'(1) = n(\mathbf{P}_n - \mathbf{P}_{n-1}) B(1)=n(PnPn1)
    方向为 P n − P n − 1 \mathbf{P}_n - \mathbf{P}_{n-1} PnPn1

几何意义

  • 切矢量 B ′ ( t ) \mathbf{B}'(t) B(t) 表示曲线在参数 (t$ 处的运动方向。
  • 如果 B ′ ( t ) = 0 \mathbf{B}'(t) = \mathbf{0} B(t)=0(零矢量),则该点可能是尖点或曲线在该点停滞(需进一步分析高阶导数)。

示例(二次贝塞尔曲线)

对于二阶贝塞尔曲线:
B ( t ) = ( 1 − t ) 2 P 0 + 2 t ( 1 − t ) P 1 + t 2 P 2 \mathbf{B}(t) = (1-t)^2 \mathbf{P}_0 + 2t(1-t) \mathbf{P}_1 + t^2 \mathbf{P}_2 B(t)=(1t)2P0+2t(1t)P1+t2P2
其切矢量为:
B ′ ( t ) = 2 ( 1 − t ) ( P 1 − P 0 ) + 2 t ( P 2 − P 1 ) \mathbf{B}'(t) = 2(1-t)(\mathbf{P}_1 - \mathbf{P}_0) + 2t(\mathbf{P}_2 - \mathbf{P}_1) B(t)=2(1t)(P1P0)+2t(P2P1)
t = 0 t=0 t=0 t = 1 t=1 t=1 处:
B ′ ( 0 ) = 2 ( P 1 − P 0 ) , B ′ ( 1 ) = 2 ( P 2 − P 1 ) \mathbf{B}'(0) = 2(\mathbf{P}_1 - \mathbf{P}_0), \quad \mathbf{B}'(1) = 2(\mathbf{P}_2 - \mathbf{P}_1) B(0)=2(P1P0),B(1)=2(P2P1)

Matlab实现

% 定义控制点(示例:3 阶贝塞尔曲线)
P = [0, 0; 1, 2; 3, 1; 4, 3]; % 4 个控制点 → 3 阶贝塞尔曲线% 参数 t 的采样点
t = linspace(0, 1, 100)';% 计算贝塞尔曲线和切矢量
[B, dB] = bezier_curve(P, t);% 绘制初始图形
figure;
hold on;
plot(P(:,1), P(:,2), 'ro-'); % 控制点及控制多边形
% h_curve = plot(B(:,1), B(:,2), 'b-', 'LineWidth', 2); % 贝塞尔曲线
h_tangent = quiver(B(1,1), B(1,2), dB(1,1)/10, dB(1,2)/10, 'r', 'LineWidth', 2, 'MaxHeadSize', 1); % 初始切矢量
title('贝塞尔曲线及其切矢量动画');
xlabel('x');
ylabel('y');
grid on;
axis equal;% 动画显示切矢量
for k = 1:length(t)% 更新切矢量位置set(h_tangent, 'XData', B(k,1), 'YData', B(k,2), 'UData', dB(k,1)/10, 'VData', dB(k,2)/10);% 可选:绘制切矢量的轨迹plot(B(k,1), B(k,2), 'bo', 'MarkerSize', 5);pause(0.05); % 控制动画速度drawnow;
endfunction [B, dB] = bezier_curve(P, t)% P: 控制点矩阵,大小为 (n+1) x 2(二维情况)% t: 参数 t ∈ [0,1]% B: 曲线上的点% dB: 切矢量n = size(P, 1) - 1; % 阶数 = 控制点数 - 1B = zeros(length(t), 2);dB = zeros(length(t), 2);for k = 1:length(t)tk = t(k);% 计算贝塞尔曲线上的点 B(t)B(k, :) = [0, 0];for i = 0:nB(k, :) = B(k, :) + P(i+1, :) * nchoosek(n, i) * tk^i * (1-tk)^(n-i);end% 计算切矢量 dB(t)if n >= 1dB(k, :) = [0, 0];for i = 0:n-1dB(k, :) = dB(k, :) + n * (P(i+2, :) - P(i+1, :)) * nchoosek(n-1, i) * tk^i * (1-tk)^(n-1-i);endendend
end

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

应用

  • 曲线平滑性:若相邻贝塞尔曲线段在连接点的切矢量共线,则曲线在该点光滑(G1 连续)。
  • 运动控制:在动画或路径规划中,切矢量可用于确定物体的运动方向。

通过计算切矢量,可以分析贝塞尔曲线的局部几何性质,并用于优化设计、插值和碰撞检测等场景。

相关文章:

  • Java事务隔离问题详解:脏读、不可重复读与幻读(含解决方案)
  • 【算法 day03】LeetCode 203.移除链表元素 | 707.设计链表 | 206.反转链表
  • 【Elasticsearch】文档(一):新增 删除
  • db2主从同步 逻辑复制 APPLY_THROTTLE参数
  • 【CompletableFuture】基础Future (一)
  • 车载诊断框架 --- TCP window size设置
  • Kubernetes架构解析
  • Rviz2中,在rviz和launch文件中都需要配置urdf文件,二者作用上的区别?
  • 【工具教程】如何批量识别大量图片的文字并重命名图片,图片文件批量文件识别改名的详细操作步骤和注意事项
  • 水果商城管理系统笔记
  • [深度学习]目标检测YOLO v3
  • C语言状态机:从入门到精通
  • 英语~四级CET4考试——入栏需看
  • Chapter12-API testing
  • 「Linux文件及目录管理」文件及目录操作类命令
  • 【Zephyr 系列 26】跨平台测试框架设计:CLI + 自动脚本 + OTA 校验一体化方案
  • 【项目】仿muduo库one thread one loop式并发服务器前置知识准备
  • 【项目实训】【项目博客#06】大模型微调与推理优化(4.21-5.11)
  • ATSAMV71Q21B基于Microchip Studio以及ASF4.0架构使用printf打印float类型
  • Python格式化工具推荐
  • php语言的网站建设/游戏优化是什么意思
  • 口碑好网站建设费用/搭建网站平台
  • 自己做的网站怎么在百度上搜到/搜索引擎关键词的工具
  • b2b行业网站建设/seo公司
  • 东莞网页制作报价/重庆网站关键词排名优化
  • 国内网站开发语言/网络营销logo