曲线平滑算法:三次Hermite曲线生成

news/2025/2/13 21:30:29/

目录

 1.三次Hermite曲线的参数方程

2. 三次Hermite曲线的绘制


         Hermite曲线是通过给定曲线的两个端点的位置矢量P_{0}P_{1}以及两个端点处的切线矢量R_{0}R_{1}来描述曲线的,如图1所示。这里先对Hermite曲线进行数学公式推导,然后讲述如何绘制Hermite曲线。(这里是算法代码)

图1 Hermite曲线

 1.三次Hermite曲线的参数方程

        三维空间中的自由曲线用三次参数方程表示可以用以下的形式:

\left\{\begin{matrix} x(t)=a_{x}t^{3}+b_{x}t^{2}+c_{x}t+d_{x}\\ y(t)=a_{y}t^{3}+b_{y}t^{2}+c_{y}t+d_{y} \\ z(t)=a_{z}t^{3}+b_{z}t^{2}+c_{z}t+d_{z} \end{matrix}\right.

或者:

Q(t)=at^{3}+bt^{2}+ct+d

其中,参数t的取值范围是t\in [0,1],这是归一化坐标,表示从端点1到端点2的的相对距离。

将以上参数方程改写为矩阵形式为:

Q(t)=\begin{bmatrix} t^{3} &t^{2} & t& 1 \end{bmatrix} \begin{bmatrix} a\\ b\\ c\\ d \end{bmatrix}

若令

T=\begin{bmatrix} t^{3} & t^{2} &t & 1 \end{bmatrix}

C=\begin{bmatrix} a &b &c & d \end{bmatrix}^{T}

Q(t)=T\cdot C

对参数t的一阶导数得:

Q^{'}(t)=\begin{bmatrix} 3t^{2} &2t &1 &0 \end{bmatrix}\cdot C

        假定已知曲线的两个端点的位置矢量P_{0}P_{1}以及两个端点处的切线矢量R_{0}R_{1},如图1所示。注意位置矢量和切线矢量都有x,y等分量。这四个量实际上对应于将t=0好t=1代入Q(t)Q^{'}(t)得到的结果,即:

P_{0}=Q(0)=\begin{bmatrix} 0 & 0& 0 & 0 \end{bmatrix}\cdot C

P_{1}=Q(1)=\begin{bmatrix} 1 & 1 &1 &1 \end{bmatrix}\cdot C

R_{0}=Q^{'}(0)=\begin{bmatrix} 0 & 0& 1 & 0 \end{bmatrix}\cdot C

R_{1}=Q^{'}(1)=\begin{bmatrix} 3 & 2 & 1 & 0 \end{bmatrix}\cdot C

用矩阵方程表示为:

\begin{bmatrix} P_{0}\\ P_{1}\\ R_{0}\\ R_{1} \end{bmatrix}=\begin{bmatrix} 0 & 0& 0& 1\\ 1& 1 &1 & 1\\ 0 & 0& 1 &0 \\ 3& 2& 1 & 0 \end{bmatrix}\cdot C

C=\begin{bmatrix} 0 & 0&0 &1 \\ 1& 1& 1 &1 \\ 0& 0& 1& 0\\ 3& 2 & 1 & 0 \end{bmatrix}^{-1}\begin{bmatrix} P_{0}\\ P_{1}\\ R_{0}\\ R_{1} \end{bmatrix}=\begin{bmatrix} 2 & -2& 1&1 \\ -3& 3 & -2 & -1\\ 0& 0 & 1& 0\\ 1& 0& 0 & 0 \end{bmatrix}\begin{bmatrix} P_{0}\\ P_{1}\\ R_{0}\\ R_{1} \end{bmatrix}

M_{h}=\begin{bmatrix} 2 & -2 & 1 &1 \\ -3& 3 & -2 &-1 \\ 0& 0& 1& 0\\ 1& 0& 0& 0 \end{bmatrix}

G_{h}=\begin{bmatrix} P_{0} & P_{1} & R_{0} & R_{1} \end{bmatrix}^{T}

M_{h}即为Hermite矩阵,为常数,G_{h}为Hermite几何矢量。

C=M_{h}\cdot G_{h}

于是曲线又可以表示为:

Q=T\cdot M_{h}\cdot G_{h}

因为上面的QG_{h}都是三维空间的矢量,有x,y,z三个分量:

G_{hx}=\begin{bmatrix} P_0x & P_{1x} &R_{0x} &R_{1x} \end{bmatrix}^{T}

G_{hy}=\begin{bmatrix} P_0y & P_{1y} &R_{0y} &R_{1y} \end{bmatrix}^{T}

G_{hz}=\begin{bmatrix} P_0z & P_{1z} &R_{0z} &R_{1z} \end{bmatrix}^{T}

于是将曲线Q展开成分量形式如下:

x=T\cdot M_{h}\cdot G_{hx}

y=T\cdot M_{h}\cdot G_{hy}

z=T\cdot M_{h}\cdot G_{hz}

        显然,只要给定G_{h},就可以在0\leq t\leq 1的范围内求出Q(t),形成曲线上点的轨迹。T\cdot M_{h}称之为Hermite基函数。对基函数进行进一步展开,得到四个分量:

F_{0}(t)=2t^{3}-3t^{2}+1

F_{1}(t)=-2t^{3}+3t^{2}

F_{2}(t)=t^{3}-2t^{2}+t

F_{3}(t)=t^{3}-t^{2}

于是曲线上的轨迹点,又可以通过以下公式表示:

x(t)=P_{0x}\cdot F_{0}(t)+P_{1x}\cdot F_{1}(t)+R_{0x}\cdot F_{2}(t)+R_{1x}\cdot F_{3}(t)

y(t)=P_{0y}\cdot F_{0}(t)+P_{1y}\cdot F_{1}(t)+R_{0y}\cdot F_{2}(t)+R_{1y}\cdot F_{3}(t)

z(t)=P_{0z}\cdot F_{0}(t)+P_{1z}\cdot F_{1}(t)+R_{0z}\cdot F_{2}(t)+R_{1z}\cdot F_{3}(t)

2. 三次Hermite曲线的绘制

       这里是代码下载链接:Hermite曲线绘制代码

        三次Hermite曲线的绘制,需要四个参数进行控制,分别是两个端点坐标和两个端点处的切线矢量,比如给定两个点的三维坐标P0(1,4,0)、P1(2,6,0),以及两个端点的切线矢量R0(1,-1,0)、R1(1,-1,0),其绘制的Hermite曲线如下:

图2 两点三次Hermite曲线

         对于多点Hermite平滑,则是从头到尾,逐步取相邻的两个点,分别求出两点之间的Hermite曲线轨迹,比如,6个散点的Hermite曲线绘制的图像如下:

图3 6点三次Hermite曲线


http://www.ppmy.cn/news/46141.html

相关文章

高性能计算HPC照亮AIGC未来:PC集群+Stable Diffusion 打造极致游戏体验

角色设计 | PC集群 | 增强现实 游戏设计 | PC农场 | PC Farm 随着科技的不断进步,虚拟现实、增强现实等技术已经逐渐成为了游戏设计中不可或缺的一部分。而在这些技术的背后,角色设计、PC集群、GAMEAI等方面的不断发展也为游戏的体验提供了更加丰富的可…

海康相机通过MVS达不到标称最大帧率的解决办法

目录 1.相机参数设置1.1 取消相机帧率限制1.2 修改相机图像格式1.3 调整相机曝光时间1.4 检查相机数据包大小(网口相机特有参数)1.5 恢复相机默认参数1.6 相机 ADC 输出位深调整 2.系统环境设置2.1 网口相机设置2.2 USB 相机设置 1.相机参数设置 1.1 取…

IIC协议相关

一.IIC协议初识 IIC(集成电路总线),半双工同步通信方式 *特点 1.简单性和有效性 由于接口直接在组件之上,因此IIC总线占用的空间特别小,减少了电路板的空间和芯片管脚的数量,降低了互联成本,总线的长度可高达25英尺…

Unity打包WebGL: 导入Vue

Unity打包WebGL: 导入Vue 1. 介绍 1.1 任务 记录将Unity项目打包成WebGL,并集成到Vue项目中的过程。 1.2 环境 Unity:2021.3Vue: 2 2. Unity项目 2.1 UI界面 2.2 添加插件 构建WebGL项目需要添加一个.jslib文件,用于Unity脚本函数与JavaScript函数…

ai智能写作软件哪个好-ai智能写作免费

人工智能自动写作软件 人工智能自动写作软件是如今数字营销领域中备受瞩目的一种工具。无论是网络文章、博客、报告、新闻稿或者其他一些营销内容,人工智能自动写作软件可以以相当高的速度和质量将其生成,从而释放人类营销人员的时间和精力。 尽管自动写…

【数据挖掘与商务智能决策】第十二章 XGBoost算法和LightGBM算法

12.1.3 XGBoost算法的简单代码实现 XGBoost模型既可以做分类分析,也可以做回归分析,分别对应的模型为XGBoost分类模型(XGBClassifier)及XGBoost回归模型(XGBRegressor)。 XGBoost模型的安装办法可以采用P…

Idea启动运行报错:Error:java: 无效的源发行版: 13

最近在做Springboot项目时,常常出现上述错误,小编也不知道怎么回事,到网上找了这个方面的解决办法,但是却发现根本解决不了,最终通过小编多次尝试,终于发现,为什么会报这个错误。(应该是Java版本…

javaweb830在线答疑系统dzkfA1A5程序

2.系统用户管理:不管是超级管理员还是普通管理员都需要管理系统用户,包括普通管理员的添加、删除、修改、查询,修改管理员的登录密码,新添加的管理员用户可以登录系统。 3.注册用户管理:游客在前…