节点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科学出版社

BGP.TO日本和新加坡服务器进行促销,日本服务器6.5折

BGP.TO目前针对日本和新加坡服务器进行促销,其中日本东京服务器6.5折,而新加坡服务器7.5折起。这是一家专门的独立服务器租售网站,提供包括中国香港、日本、新加坡和洛杉矶的服务器租用业务,基本上都是自有硬件、IP资源等,国内优化直连线路,机器自动化部署上架,并提供产品的基本管理功能(自助开关机重启重装等)。新加坡服务器 $93.75/月CPU:E3-1230v3内存:16GB硬盘:480GB ...

Gcore(75折)迈阿密E5-2623v4 CPU独立服务器

部落分享过多次G-core(gcorelabs)的产品及评测信息,以VPS主机为主,距离上一次分享商家的独立服务器还在2年多前,本月初商家针对迈阿密机房限定E5-2623v4 CPU的独立服务器推出75折优惠码,活动将在9月30日到期,这里再分享下。G-core(gcorelabs)是一家总部位于卢森堡的国外主机商,主要提供基于KVM架构的VPS主机和独立服务器租用等,数据中心包括俄罗斯、美国、日...

HostKvm($4.25/月),俄罗斯CN2带宽大升级,俄罗斯/香港高防限量5折优惠进行中

HostKvm是一家成立于2013年的国外VPS服务商,产品基于KVM架构,数据中心包括日本、新加坡、韩国、美国、俄罗斯、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。本月,商家旗下俄罗斯、新加坡、美国、香港等节点带宽进行了大幅度升级,俄罗斯机房国内电信/联通直连,CN2线路,150Mbps(原来30Mbps)带宽起,目前俄罗斯和香港高防节点5折骨折码继续优惠中...

qq图片代码为你推荐
印章制作用美图秀秀怎么做印章效果啊?ov单片机汇编语言中 CY AC OV 分别是什么意思?视频截图软件怎么把视频截成动图?还有一般剪辑视频什么的用什么软件比较好?人人时光机求徐智勇的时光机的歌词,百度上全是周杰轮跟五月天的,我要粤语啊深圳公交车路线深圳公交车路线拂晓雅阁推荐一些好玩的贴图论坛1433端口怎么去看1433端口百度手写百度手写显示迅雷云点播账号求一个迅雷云点播vip的账号,只是看的,绝不动任何手脚。mate8价格现在买华为mate8高配划算吗
org域名 cc域名 过期备案域名查询 香港vps99idc oneasiahost 表单样式 42u标准机柜尺寸 realvnc 绍兴高防 毫秒英文 cdn加速原理 域名和空间 东莞服务器 个人免费主页 华为云服务登录 西安服务器托管 阿里云免费邮箱 游戏服务器出租 服务器防火墙 lamp什么意思 更多