节点qq图片代码

qq图片代码  时间:2021-02-26  阅读:()
B-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascadeB-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascadeOpenOpenOpenOpenCascadeCascadeCascadeCascade中的中的中的中的BBBB样条曲线库样条曲线库样条曲线库样条曲线库eryar@163163163163.
com摘要Abstract:简要介绍OpenCascade中的B样条曲线库BSplCLib的使用方法,并且结合源程序来对OpenCascade中的B样条曲线的组成部分如节点矢量、重复度等概念进行介绍,以及通过对计算B样条基函数的算法进行分析,加深对B样条曲线概念的理解.
关键字KeyWord:BSplineCurve、OpenCascade、KnotVector、Multiplicity一、概述Overview1919191946464646年由Schoenberg提出了B样条理论,给出了B样条的差分表达式;1972197219721972年deBoor和Cox分别独立给出了关于B样条的标准算法.
Gordon和Riesenfeld又把B样条理论用于形状描述,最终提出了B样条方法.
用B样条基替代了Bernstein基,构造出B样条曲线,这种方法继承了Bezier方法的一切优点,克服了Bezier方法存在的缺点,较成功地解决了局部控制问题,又轻而易举地在参数连续性基础上解决了连接问题,从而使自由曲线曲面形状的描述问题得到较好解决.
p次B样条曲线的定义为:∑==n0iip,iP)u(N)u(C其中:Pi是控制顶点(controlpoint);Ni,p(u)是定义在非周期节点矢量上的p次B样条基函数;有很多方法可以用来定义B样条基函数以及证明它的一些重要性质.
例如,可以采用截尾幂函数的差商定义,开花定义,以及由deBoor和Cox等人提出的递推公式等来定义.
我们这里采用的是递推定义方法,因为这种方法在计算机实现中是最有效的.
令U={u0000,u1111,…,um}是一个单调不减的实数序列,即uiandmustbeKnotsLength(KnotSequence,Periodic).
voidBSplCLib::Knots(constTColStd_Array1111OfReal&SeqKnots,TColStd_Array1111OfReal&knots,TColStd_Array1111OfInteger&mult,//constStandard_BooleanPeriodic)constStandard_Boolean){Standard_Realval=SeqKnots(1111);Standard_Integerkk=1111;knots(kk)=val;mult(kk)=1111;for(Standard_Integerjj=2222;jj==+,,1,0,01准均匀B样曲线(quasi-uniformB-Splinecurve):其节点序列中两端节点具有重复度k+1111,而所有内节点均匀分布,具有重复度1111.
分段Bezier曲线(piecewiseBeziercurve):其节点序列中两端节点重复度与准均匀B样条曲线的相同,所不同的是所有内节点重复度为k.
非均匀B样条曲线(generalnon-uniformB-Splinecurve):这是对任意分布的节点序列,只要在数学上成立,即节点序列非递减,都可取.
在基础类模块(ModuleFoundationClasses)的工具箱(ToolkitTKMath)中的包(GeomAbs)中有对B样样条曲线类型的定义,源程序如下所示://!
Thisenumerationisusedtonotespecificcurveform.
enumGeomAbs_BSplKnotDistribution{GeomAbs_NonUniform,GeomAbs_Uniform,GeomAbs_QuasiUniform,GeomAbs_PiecewiseBezier};而类BSplCLib主要是用来管理节点和重复度的,所有将节点和重复度也进行了分类.
根据节点矢量是否均匀分布,将节点分配方式(KnotDistribution)分为:均匀(BSplCLib_Uniform)和非均匀(BSplCLib_NonUniform).
源程序如下所示:enumBSplCLib_KnotDistribution{BSplCLib_NonUniform,BSplCLib_Uniform};根据重复度数组将重复度的分配方式分为如下三种类型:BSplCLib_Constant:重复度都相同;BSplCLib_QuasiConstant:首、尾节点的重复度与内部节点的重复度不同;BSplClib_NonConstant:其它情况;源程序如下所示:enumBSplCLib_MultDistribution{BSplCLib_NonConstant,BSplCLib_Constant,BSplCLib_QuasiConstant};判断节点矢量和重复度矢量类型分别由下列函数实现:B-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascadeBSplCLib::KnotForm();BSplCLib::MultForm();具体的判断方法可以查看源程序.
将节点分布方式与重复度的分布方式进行组合,可以得出B样条曲线的那几种类型.
B-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascade五、B样条基函数的计算EvaluatetheB-SplineBasisB样条基函数的计算主要使用了B样条基了函数的递推公式(Cox-deBoor公式)的局部支撑性质,如下所示:)u(Nuuuu)u(Nuuuu)u(N0uuu1)u(N1p,1i1i1pi1pi1p,iipiip,i1ii0,i+++++++++=0000时,Ni,p(u)是两个p-1111次基函数的线性组合;计算一组基函数需要事先指定节点矢量U和次数p;半开区间[ui,ui+1111)称为第i个节点区间(knotspan),它的长度可以为零,因为相邻节点可以是相同的;计算p次基函数的过程可以生成一个如下形式的三角形陈列:4,03,12,23,01,32,11,22,00,31,10,21,00,10,0NNNNNNNNNNNNNNB样条有局部支撑性,即若u不在区间[ui,ui+p+1111),则Ni,p(u)=0000.
可从下面的三角形中看出N1111,3333是N1111,0000、N2222,0000、N3333,0000和N4444,0000的线性组合,而N1111,0000在区间[u1111,u2222)上非零,N2222,0000在区间[u2222,u3333)上非零,N3333,0000在区间[u3333,u4444)上非零,N4444,0000在区间[u4444,u5555)上非零,所以N1111,3333仅在区间[u1111,u5555)上非零.
在任意给定的节点区间[uj,uj+1111)内,最多有p+1111个是非零的,它们是Nj-p,p、Nj-p+1111、…、Nj,p.
例如,在[u3333,u4444)上,零次基函数中只有N3333,0000是非零的,一次基函数只有N2222,1111和N3333,1111是非零的,非零的三次基函数只有N0000,3333、N1111,3333、N2222,3333、N3333,3333.
这个性质如下图所示:B-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascade上面两幅图中右边的图中所示的推算过程表明,给定节点序列U及B样条曲线的次数p,给出任意一个u值,找出其所在的节点区间[ui,ui+1111)上,最多有Ni-p,p,Ni-p+1111,p,…,Ni,p个非零的基函数.
例如我们根据递推公式写出二次基函数的一般形式,如下所示:当给定的u值在区间[u3333,u4444)上即(i=3333)时,根据上面的三角形,得出下列重要结论:0)()(0)()(0)()(1,41,131,11,231,11,2======++uNuNuNuNuNuNii即这两项不需要计算.
另外一个重要结论就是图中用相同颜色框中的部分是相同的,也就是下面程序中的变量temp表示的内容.
我们引入下面符号:B-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascade由二次基函数推出的三个公式可写为:上述推导过程为《TheNURBSBook》中的算法,算法代码如下所示:理解了变量temp的意义之后,整个程序就很好理解了.
将OpenCascade中计算基函数的算法是不同的,将其源程序摘抄如下所示://function:BuildBSplineMatrixB-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascade//purpose:BuildstheBsplineMatrixStandard_IntegerBSplCLib::EvalBsplineBasis//(constStandard_IntegerSide,//=1rigthside,-1leftside(constStandard_Integer,//=1rigthside,-1leftsideconstStandard_IntegerDerivativeRequest,constStandard_IntegerOrder,constTColStd_Array1OfReal&FlatKnots,constStandard_RealParameter,Standard_Integer&FirstNonZeroBsplineIndex,math_Matrix&BsplineBasis){//thematrixmusthaveatleastDerivativeRequest+1//rowandOrdercolumns//theresultarestoredinthefollowingwayin//theBsplinematrix//LetibetheFirstNonZeroBsplineIndexand//tbetheparametervalue,ktheorderofthe//knotvector,rtheDerivativeRequest:////B(t)B(t)B(t)//ii+1i+k-1////(1)(1)(1)//B(t)B(t)B(t)//ii+1i+k-1//////////(r)(r)(r)//B(t)B(t)B(t)//ii+1i+k-1//Standard_IntegerReturnCode,ii,pp,qq,ss,NumPoles,LocalRequest;//,Index;B-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascadeStandard_RealNewParameter,Inverse,Factor,LocalInverse,Saved;//,*FlatKnotsArray;ReturnCode=0;FirstNonZeroBsplineIndex=0;LocalRequest=DerivativeRequest;if(DerivativeRequest>=Order){LocalRequest=Order-1;}if(BsplineBasis.
LowerCol()!
=1||BsplineBasis.
UpperCol()=Order){LocalRequest=Order-1;}for(qq=2;qq=Order){LocalRequest=Order-1;}对B样条基数计算结果矩阵BsplineBasis存储空间进行检查.
若存储空间不足,则会退出,程序代码如下所示:if(BsplineBasis.
LowerCol()!
=1||BsplineBasis.
UpperCol()px[Ihi]){Ilc=Ihi+1;return;}Standard_IntegerIm;while(Ihi-Ilc!
=1){Im=(Ihi+Ilc)>>1;if(X>px[Im])Ilc=Im;elseIhi=Im;}}确定参数所在区间[ui,ui+1111)后,可得到第一个非零基函数的索引值为i-p;FirstNonZeroBsplineIndex=ii-Order+1;基函数计算的主要算法代码如下所示:BsplineBasis(1,1)=1.
0e0;for(qq=2;qq#include#include#include#include#pragmacomment(lib,"TKernel.
lib")#pragmacomment(lib,"TKMath.
lib")#pragmacomment(lib,"TKG2d.
lib")intmain(intargc,char*argv[]){//Knotvector:[0,0,0,1,2,3,4,4,5,5,5]TColStd_Array1OfRealknotSeq(1,11);knotSeq.
Init(0);knotSeq.
SetValue(1,0);knotSeq.
SetValue(2,0);knotSeq.
SetValue(3,0);knotSeq.
SetValue(4,1);knotSeq.
SetValue(5,2);knotSeq.
SetValue(6,3);knotSeq.
SetValue(7,4);knotSeq.
SetValue(8,4);B-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascadeknotSeq.
SetValue(9,5);knotSeq.
SetValue(10,5);knotSeq.
SetValue(11,5);cout<<"KnotSequence:[";for(Standard_Integeri=1;i<=knotSeq.
Length();i++){cout<Value(i)<<"";}cout<<"]"<BSplCLib::Knots(knotSeq,knots,mults);cout<<"Knots:[";for(Standard_Integeri=1;i<=knots.
Length();i++){cout<Value(i)<<"";}cout<<"]"<Length();i++){cout<Value(i)<<"";}cout<<"]"<"<"<5;Standard_IntegeriOrder=2+1;Standard_IntegeriFirstNonZeroIndex=0;B-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascademath_MatrixbSplineBasis(1,1,1,iOrder,0);BSplCLib::EvalBsplineBasis(1,0,iOrder,knotSeq,rValue,iFirstNonZeroIndex,bSplineBasis);cout<<"FirstNon-ZeroBasisindex:"<程序输出为:KnotSequence:[00012344555]Knots:[012345]Multiplicity:[311123]Knotsisuniform.
FirstNon-ZeroBasisindex:3math_MatrixofRowNumber=1andColNumber=3math_Matrix(1,1)=0.
125math_Matrix(1,2)=0.
75math_Matrix(1,3)=0.
125Pressanykeytocontinue.
.
.
B-SplineB-SplineB-SplineB-SplineCurveCurveCurveCurveLibraryLibraryLibraryLibraryininininOpenOpenOpenOpenCascadeCascadeCascadeCascade七、结论Conclusion通过学习《TheNURBSBook》并给合OpenCascade的源程序,理论联系实际,使对NURBS的学习更轻松.
根据BBBB样条基的递推公式,B样条曲线的局部性是通过节点来具体实现的.
与Bezier曲线不同的就是增加了节点这个参数.
根据Cox-deBoor递推公式亲自推导出一次、二次、三次B样条基函数,可以加深对B样条曲线的理解.
计算给定节点矢量、次数及参数,计算参数所在区间上所有非零基函数算法的步骤为:通过二分法查找出参数所在的节点区间;根据B样条基的局部支撑性,计算出所在节点区间上所有非零基函数;八、致谢Acknowledgments感谢晓天的支持与鼓励.
九、参考文献Bibliography1.
赵罡,穆国旺,王拉柱译LesPiegl,WayneTillerTheNURBSBook(SecondEdition)2010201020102010清华大学出版社2.
莫容,常智勇计算机辅助几何造型技术2009200920092009科学出版社3.
王仁宏,李崇君,朱春钢计算几何教程2008200820082008科学出版社

virmach:AMD平台小鸡,赌一把,单车变摩托?$7.2/年-512M内存/1核/10gSSD/1T流量,多机房可选

virmach送来了夏季促销,价格低到爆炸,而且在低价的基础上还搞首年8折,也就是说VPS低至7.2美元/年。不过,这里有一点要说明:你所购买的当前的VPS将会在09/30/2021 ~ 04/30/2022进行服务器转移,而且IP还会改变,当前的Intel平台会换成AMD平台,机房也会变动(目前来看以后会从colocrossing切换到INAP和Psychz),采取的是就近原则,原来的水牛城可能...

老薛主机入门建站月付34/月,年付345元,半价香港VPS主机

老薛主机怎么样?老薛主机这个商家有存在有一些年头。如果没有记错的话,早年老薛主机是做虚拟主机业务的,还算不错在异常激烈的市场中生存到现在,应该算是在众多商家中早期积累到一定的用户群的,主打小众个人网站业务所以能持续到现在。这不,站长看到商家有在进行夏季促销,比如我们很多网友可能有需要的香港vps主机季度及以上可以半价优惠,如果有在选择不同主机商的香港机房的可以看看老薛主机商家的香港vps。点击进入...

酷番云-618云上秒杀,香港1核2M 29/月,高防服务器20M 147/月 50M 450/月,续费同价!

官方网站:点击访问酷番云官网活动方案:优惠方案一(限时秒杀专场)有需要海外的可以看看,比较划算29月,建议年付划算,月付续费不同价,这个专区。国内节点可以看看,性能高IO为主, 比较少见。平常一般就100IO 左右。优惠方案二(高防专场)高防专区主要以高防为主,节点有宿迁,绍兴,成都,宁波等,节点挺多,都支持防火墙自助控制。续费同价以下专场。 优惠方案三(精选物理机)西南地区节点比较划算,赠送5...

qq图片代码为你推荐
windows优化大师怎么用Windows优化大师怎么用邮箱打不开怎么办126邮箱打不开怎么办自助建站自助建站哪个平台最好?不兼容安卓手机软件不兼容怎么办?iphone越狱后怎么恢复iPhone越狱后怎么恢复?mate8价格华为mate8 128g售价多少钱虚拟专用网虚拟专用网适用于什么行业发邮件怎么发怎么发邮箱blogcn怎样设置BLOGCN的访问密码blogcnblogcn的博客可以搬家到哪些网站?
网址域名注册 长沙服务器租用 域名查询软件 域名备案中心 免费名片模板 大容量存储 圣诞促销 宁波服务器 合租空间 免费个人空间 网站cdn加速 200g硬盘 hostloc 徐正曦 申请网页 银盘服务是什么 双线空间 工信部icp备案查询 购买空间 七牛云存储 更多