FA_拟合和插值(FI,fitting_and_interpolation)-逼近样条02(多阶贝塞尔曲线)
贝塞尔曲线是由伯恩斯坦基函数定义的参数化多项式曲线核心由控制顶点决定形状阶数与控制顶点数满足顶点数 阶数 1一次2 个顶点、二次3 个顶点、三次4 个顶点。三者的复杂度、光滑性、造型能力依次提升是 UI 设计、图形学、动画路径等领域的基础一次为直线无曲率二次为抛物线单曲率三次为自由曲线可实现拐点 / 复杂曲率。本文将分别详细描述各阶贝塞尔曲线的数学定义、几何特性、核心性质并提供Python 可运行代码基于matplotlibnumpy实现曲线 控制多边形 基函数 动态插值过程的可视化绘图直观展示曲线生成逻辑。一、通用基础概念二、分阶详细描述一一次贝塞尔曲线线性贝塞尔曲线阶数1 阶 | 控制顶点数2 个P0​,P1​| 曲线形状直线段无弯曲无曲率1. 数学定义2. 核心几何特性3. 典型应用基础线性插值、直线路径绘制、简单动画的线性位移。4.绘图示意!在这里插入图片描述一次贝塞尔红色直线段与控制多边形完全重合基函数为两条线性相交的直线无任何弯曲。二二次贝塞尔曲线抛物线贝塞尔曲线阶数2 阶 | 控制顶点数3 个P0​,P1​,P2​| 曲线形状抛物线单一段光滑曲线1 个曲率方向无拐点1. 数学定义2. 核心几何特性3. 典型应用简单圆角设计UI 按钮、边框、二维简单曲线路径、字体轮廓基础段。4、绘图示意二次贝塞尔绿色抛物线在P0​处与P0​P1​相切、P2​处与P1​P2​相切曲线落在三角形凸包内无拐点。三三次贝塞尔曲线立方贝塞尔曲线阶数3 阶 | 控制顶点数4 个P0​,P1​,P2​,P3​| 曲线形状自由光滑曲线可实现拐点、双曲率是工程 / 设计中最常用的阶数1. 数学定义2. 核心几何特性3. 典型应用UI 设计复杂路径、动画缓动曲线、CAD 基础建模、字体设计TrueType/OpenType、游戏角色运动路径、图像处理图像变形。4、绘图示意三次贝塞尔品红色自由曲线带有红色星标拐点曲率方向变化在P0​处与P0​P1​相切、P3​处与P2​P3​相切曲线落在四边形凸包内体现了三次曲线的核心造型能力。三、代码实现PythonMatplotlib1. 实现功能绘制一次、二次、三次贝塞尔曲线分 3 个子图对比展示标注控制顶点带编号、控制多边形折线绘制伯恩斯坦基函数曲线辅助理解基函数对顶点的权重标注曲线切线方向端点处直观体现相切特性生成高清矢量图可直接保存使用。2. 环境准备无需额外安装特殊库Python 内置 基础数据分析库即可pipinstallnumpy matplotlib3. 完整可运行代码importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.patchesimportFancyArrowPatch# 设置全局样式高清、中文字体、图例/标签大小plt.rcParams[figure.dpi]150plt.rcParams[font.sans-serif][SimHei,DejaVu Sans]plt.rcParams[axes.unicode_minus]Falseplt.rcParams[font.size]10plt.rcParams[legend.fontsize]8# 定义伯恩斯坦基函数defbernstein(n,i,u): 计算n阶贝塞尔曲线的第i个伯恩斯坦基函数值 :param n: 贝塞尔曲线阶数 :param i: 基函数索引0~n :param u: 参数u ∈ [0,1] :return: 基函数值 fromscipy.specialimportcomb# 组合数计算returncomb(n,i)*(u**i)*((1-u)**(n-i))# 定义贝塞尔曲线计算函数defbezier_curve(pts,u): 计算贝塞尔曲线在参数u处的坐标 :param pts: 控制顶点数组shape(n1, 2) :param u: 参数u ∈ [0,1]标量/数组 :return: 曲线坐标shape(len(u), 2) npts.shape[0]-1# 阶数顶点数-1unp.atleast_1d(u)pnp.zeros((len(u),2))foriinrange(n1):bbernstein(n,i,u)[:,np.newaxis]pb*pts[i]returnp# 定义绘制切线的函数端点处defplot_tangent(ax,p0,p1,color,label,scale0.5): 绘制端点处的切线箭头 :param ax: 子图对象 :param p0: 端点坐标 :param p1: 控制点坐标用于计算切线方向 :param color: 箭头颜色 :param label: 箭头标签 :param scale: 箭头长度缩放因子 dir_vec(p1-p0)*scale arrowFancyArrowPatch(p0,p0dir_vec,colorcolor,arrowstyle-,mutation_scale8,labellabel)ax.add_patch(arrow)# 生成参数u的采样点密集采样曲线光滑unp.linspace(0,1,200)# 定义各阶控制顶点 # 一次贝塞尔2个顶点p1np.array([[0,0],[2,3]])# P0, P1# 二次贝塞尔3个顶点p2np.array([[0,0],[1,3],[3,1]])# P0, P1, P2# 三次贝塞尔4个顶点带拐点体现造型能力p3np.array([[0,0],[1,3],[3,-1],[4,2]])# P0, P1, P2, P3# 计算各阶贝塞尔曲线 c1bezier_curve(p1,u)# 一次曲线c2bezier_curve(p2,u)# 二次曲线c3bezier_curve(p3,u)# 三次曲线# 绘制子图3行1列 fig,(ax1,ax2,ax3)plt.subplots(3,1,figsize(8,10),tight_layoutTrue)fig.suptitle(一次、二次、三次贝塞尔曲线 对比,fontsize14,fontweightbold)# -------------------- 子图1一次贝塞尔曲线 --------------------ax1.set_title(一次贝塞尔曲线线性2个控制顶点,fontsize12)# 绘制控制多边形ax1.plot(p1[:,0],p1[:,1],k--,lw1,label控制多边形)# 绘制贝塞尔曲线ax1.plot(c1[:,0],c1[:,1],r-,lw2,label一次贝塞尔曲线)# 绘制控制顶点带编号fori,(x,y)inenumerate(p1):ax1.scatter(x,y,cblue,s30,zorder5)ax1.text(x0.05,y0.05,fP{i},fontsize9)# 绘制伯恩斯坦基函数foriinrange(2):bbernstein(1,i,u)ax1.plot(u*2,b*3,--,lw1.5,labelfB{i},1(u))# 配置子图ax1.set_xlabel(X)ax1.set_ylabel(Y)ax1.legend(locbest)ax1.grid(True,alpha0.3)ax1.axis(equal)# -------------------- 子图2二次贝塞尔曲线 --------------------ax2.set_title(二次贝塞尔曲线抛物线3个控制顶点,fontsize12)# 绘制控制多边形ax2.plot(p2[:,0],p2[:,1],k--,lw1,label控制多边形)# 绘制贝塞尔曲线ax2.plot(c2[:,0],c2[:,1],g-,lw2,label二次贝塞尔曲线)# 绘制控制顶点带编号fori,(x,y)inenumerate(p2):ax2.scatter(x,y,cblue,s30,zorder5)ax2.text(x0.05,y0.05,fP{i},fontsize9)# 绘制端点切线plot_tangent(ax2,p2[0],p2[1],orange,P0处切线)plot_tangent(ax2,p2[-1],p2[-2],purple,P2处切线)# 绘制伯恩斯坦基函数foriinrange(3):bbernstein(2,i,u)ax2.plot(u*3,b*3,--,lw1.5,labelfB{i},2(u))# 配置子图ax2.set_xlabel(X)ax2.set_ylabel(Y)ax2.legend(locbest)ax2.grid(True,alpha0.3)ax2.axis(equal)# -------------------- 子图3三次贝塞尔曲线 --------------------ax3.set_title(三次贝塞尔曲线自由曲线4个控制顶点带拐点,fontsize12)# 绘制控制多边形ax3.plot(p3[:,0],p3[:,1],k--,lw1,label控制多边形)# 绘制贝塞尔曲线ax3.plot(c3[:,0],c3[:,1],m-,lw2,label三次贝塞尔曲线)# 绘制控制顶点带编号fori,(x,y)inenumerate(p3):ax3.scatter(x,y,cblue,s30,zorder5)ax3.text(x0.05,y0.05,fP{i},fontsize9)# 绘制端点切线plot_tangent(ax3,p3[0],p3[1],orange,P0处切线)plot_tangent(ax3,p3[-1],p3[-2],purple,P3处切线)# 绘制伯恩斯坦基函数foriinrange(4):bbernstein(3,i,u)ax3.plot(u*4,b*3,--,lw1.5,labelfB{i},3(u))# 标注拐点三次曲线特有ax3.scatter(c3[np.argmin(c3[:,1]),0],c3[np.argmin(c3[:,1]),1],cred,s40,marker*,label拐点,zorder6)# 配置子图ax3.set_xlabel(X)ax3.set_ylabel(Y)ax3.legend(locbest)ax3.grid(True,alpha0.3)ax3.axis(equal)# 保存图片可选高清矢量图# plt.savefig(贝塞尔曲线对比.png, dpi300, bbox_inchestight)plt.show()四、各阶贝塞尔曲线 核心对比表为了更清晰的对比整理关键维度对比表方便快速查阅特性一次贝塞尔曲线二次贝塞尔曲线三次贝塞尔曲线阶数1 阶2 阶3 阶控制顶点数2 个P0​,P1​3 个P0​,P1​,P2​4 个P0​,P1​,P2​,P3​曲线形状直线段无曲率抛物线单曲率自由曲线可拐点伯恩斯坦基函数次数一次多项式二次多项式三次多项式端点相切性无自身为直线P0​切P0​P1​P2​切P1​P2P0​切P0​P1​P3​切P2​P3曲率变化曲率为 0不变曲率为常数不变曲率连续变化可反向造型能力极弱仅直线弱仅简单弯曲中强工程最优控制难度无难度简单适中典型应用线性插值、直线路径UI 圆角、简单曲线复杂路径、字体设计、CAD 建模4 阶及以上高阶贝塞尔曲线在实际工程和图形系统中极少直接使用通常没有实用价值反而会带来严重问题。工业界普遍采用「分段低阶贝塞尔曲线」尤其是三次来替代高阶曲线。五、结束语关键补充说明凸包性质所有阶数的贝塞尔曲线始终落在控制顶点的凸包内这一性质保证了曲线的可控性调整顶点时曲线不会出现无规律的偏移。插值与控制贝塞尔曲线仅插值首末顶点中间顶点均为控制点仅影响形状不落在曲线上这是与 B 样条曲线的核心区别之一。阶数选择原则实际应用中优先使用三次贝塞尔曲线因为一次 / 二次造型能力不足四阶及以上贝塞尔曲线的控制顶点过多修改一个顶点会影响整条曲线无局部控制性控制难度陡增。多段拼接若单段三次贝塞尔曲线无法满足复杂造型需求可采用多段三次贝塞尔曲线拼接并在拼接点处满足C1/C2 连续性切线 / 曲率连续实现光滑的复杂曲线。B-样条贝塞尔曲线可以解决很多逼近样条问题但是有一个较为明显的劣势改变其中一个控制点整个曲线都会被影响因此需要B-样条。

相关新闻

探索工频UPS逆变器控制板的宝藏世界

探索工频UPS逆变器控制板的宝藏世界

工频UPS逆变器控制板,全套生产资料,包含源代码,各种正弦波逆变方案提供 最近在研究UPS相关技术,发现了超棒的工频UPS逆变器控制板全套生产资料,必须来和大家分享一番! 对于UPS来说,逆变器控制板…

2026/7/6 11:56:27 阅读更多 →
永磁同步电机 PMSM 降阶负载转矩(龙伯格)观测器前馈补偿:纯手工搭建之路

永磁同步电机 PMSM 降阶负载转矩(龙伯格)观测器前馈补偿:纯手工搭建之路

降阶负载转矩(龙伯格)观测器前馈补偿,永磁同步电机PMSM,纯手工搭建,附参考资料 在永磁同步电机(PMSM)的控制领域,负载转矩的准确观测与补偿对于提升电机的性能至关重要。今天咱们就来唠唠通过纯…

2026/7/6 13:21:26 阅读更多 →
探索PEMFC质子交换膜燃料电池模型:从密歇根大学模型到自主搭建

探索PEMFC质子交换膜燃料电池模型:从密歇根大学模型到自主搭建

PEMFC(质子交换膜燃料电池)模型: 建模平台:Matlab/Simulink 模型介绍:密歇根大学的模型,保证可运行。 密歇根大学模型:质子交换膜燃料模型主要部分有空压机模型,供气系统模型(阴极和阳极&…

2026/7/3 15:48:40 阅读更多 →

最新新闻

AI 转型任务契约:把创始人的起步试点写成可验收 artifact

AI 转型任务契约:把创始人的起步试点写成可验收 artifact

AI 转型任务契约:把创始人的起步试点写成可验收 artifact 企业内部做 AI 试点,最容易出现的工程问题不是“没有模型”,而是“没有契约”。工具已经接入,群里也有人试用,但项目文档里找不到输入来源、输出对象、审核责任…

2026/7/6 13:20:07 阅读更多 →
小程序开发必知:四大法律合规领域与全周期实操指南

小程序开发必知:四大法律合规领域与全周期实操指南

1. 项目概述:为什么小程序开发者必须懂法?干了这么多年互联网产品,从PC网站做到移动App,再到如今遍地开花的小程序,我最大的感触就是:技术实现的门槛在降低,但合规运营的门槛在急剧升高。尤其是…

2026/7/6 13:18:04 阅读更多 →
图像分类落地:预处理管道比模型选型先出问题

图像分类落地:预处理管道比模型选型先出问题

图像分类落地:预处理管道比模型选型先出问题 一、你的 ResNet 在 ImageNet 上 96%,上自己的数据直接掉到 72%:谁在作怪? 这是图像分类落地的经典翻车剧本:你选了 SOTA 模型架构(EfficientNet/ConvNeXt/ViT&…

2026/7/6 13:16:02 阅读更多 →
为什么传统视频孪生存在ID漂移 + CameraGraph™拓扑图推理底层完整解法

为什么传统视频孪生存在ID漂移 + CameraGraph™拓扑图推理底层完整解法

为什么传统视频孪生存在ID漂移 CameraGraph™拓扑图推理底层完整解法研发主体:镜像视界浙江科技有限公司 底层依赖:SpaceOS™四维时空底座、Pixel2Geo™像素地理映射、SilentLoc™纯视觉无感定位联动 资质背书:国家十四五时空大数据重点课题…

2026/7/6 13:16:02 阅读更多 →
Agent 记忆长期化:从短期上下文到持久知识库的架构设计

Agent 记忆长期化:从短期上下文到持久知识库的架构设计

Agent 的记忆能力决定了它能否“越用越聪明”。没有记忆的 Agent 每次交互都是从零开始,无法记住用户偏好、历史任务和关键事实。长期记忆系统让 Agent 能够跨越会话、跨越任务,持续积累知识,从而提供更个性化、更连贯的服务。本文将探讨 Age…

2026/7/6 13:16:02 阅读更多 →
西门子PLC程序模板:气缸功能块 FB_AirCylinder 实战拆解

西门子PLC程序模板:气缸功能块 FB_AirCylinder 实战拆解

西门子PLC程序模板:气缸功能块 FB_AirCylinder 实战拆解邓工 2026-07-04 #西门子PLC #S7-1500 #FB_AirCylinder #气缸功能块 #TIA Portal所有气缸统一调用 FB_AirCylinder(FB6020,归属 03Valve 功能段)。标准化封装优点&#xf…

2026/7/6 13:14:00 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻