您好,欢迎访问三七文档
NURBS曲线——描述高次曲线的一种参数数学方法姓名:***研究方向:工业机器人导师:***教授描述曲线的各种方法一、幂基曲线二、Bezier曲线三、B样条曲线四、非均匀有理B样条曲线(NURBS曲线)NURBS曲线的基本几何算法(插入、细化、去除、升阶、降阶)幂基曲线n次曲线的幂基表示形式是:C(u)=系数ai传递很少的关于曲线形状的直观几何印象Horner(霍纳)算法:递推,多项式求和的算法,计算幂基曲线上的点(0=u=1)Bezier曲线求Bezier曲线上的点:法一:所有基函数(AllBernstein)和对应点相乘并求和,算法PointOnBezierCurve。Bernstein的递推定义:法二:deCasteljau(德·卡斯戴尧)算法,即线性插值的方法三次Bezier曲线线性插值为了描述或拟合一些复杂的形状,需要采用高次曲线;Bezier曲线不具有局部性,所以我们需要采用分段多项式表示的曲线来解决fi(u)为基函数B样条曲线B样条基函数:(递推定义)U=[u0,u1,u2,……um]是一个单调不减的实数序列,ui为节点,U称为节点矢量,Ni,p(u)表示第i个p次(p+1)阶B样条基函数计算B样条基函数计算p次所有非零基函数的算法BasisFuns计算单个基函数的算法OneBasisFunB样条基函数导数B样条的基函数的求导公式反复对上式两端求导,得到一般的求导公式计算单个基函数k阶导数的过程DersOneBasisFun计算并存储对应于k=0的三角形表加载三角形表中包含p-k次基函数那一列,然后按照上述过程递推计算计算所有p次基函数的值及它们各阶导数的算法DersBasisFuns2计算并存储k=0的如下矩阵计算基函数Ni,p的各阶导数时,加载对应的直角三角形边上和内部对应的p-k次那一列,然后按照前述过程计算、、B样条曲线定义上的B样条基函数计算B样条曲线上的对应点(算法CurvePoint)1.找到u所在的节点区间(算法FindSpan)2.计算此区间上所有非零基函数的值(算法BasisFuns)3.将非零基函数的值与相应的控制点相乘再求和。B样条曲线的导矢公式两个算法CurveDerivsAlg1和CurveDerivsAlg2CurveDerivsAlg1:类似计算B样条一点的算法用到算法DersBasisFuns2CurveDerivsAlg2:先通过算法CurveDerivCpts计算导曲线的控制点,再和AllBasisFun结合计算计算导曲线控制点由和得到其中递推过程:NURBS曲线定义给定一组控制点Pi和权因子Wi,构造带权控制点,四维空间定义的B样条曲线用透视变换可得三维空间的NURBS曲线算法CurvePointPw算法RatCurveDerivs比较Bezier曲线局部修改性差特征多边形顶点个数决定曲线的阶次NURBS曲线局部修改性强曲线的阶次由控制参量p决定基本几何算法插入将插入U,则形成新的节点矢量节点插入实质上只是向量空间基底的改变,而曲线在几何和参数化方面均不改变。通过节点插入,能够计算曲线上的点及导矢,进行曲线细分,增加控制点数使形状控制更灵活。算法CurveKnotIns通过节点插入计算NURBS上一个点:CurvePntByCornerCut,计算导曲线某一点及其各阶导矢的算法:deBoorBspline节点细化将NURBS曲线分解为Bezier曲线段节点去除(节点消去,knotremoval)对三重曲线的节点消去三次升阶1.利用算法DecomposeCurve中的方法提取曲线的第i个Bezier段2.升阶第i个曲线段;3.消去可以消去的连接第i-1段和第i段的节点降价DegreeElevateCurve从B样条曲线提取出第i个Bezier段;对第i个Bezier段降价;消去连接第i-1段和第i段不必要的节点。总结Bezier曲线不具有局部控制性插入、细化、升阶算法都是在NURBS曲线不变的前提下,通过改变控制点,使得形状控制更加灵活;去除和降价算法有误差,曲线有偏差。不足:不知如何应用B样条曲线。谢谢
本文标题:B样条总结
链接地址:https://www.777doc.com/doc-4778932 .html