计算机辅助设计教程曲线与曲面基础知识_第1页
计算机辅助设计教程曲线与曲面基础知识_第2页
计算机辅助设计教程曲线与曲面基础知识_第3页
计算机辅助设计教程曲线与曲面基础知识_第4页
计算机辅助设计教程曲线与曲面基础知识_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机辅助建筑设计第二讲:曲线及曲面基础计算机辅助设计课程简介计算机图形学的相关知识

图形绘制、图形变换、曲线/曲面、图形渲染……Rhino软件及Grasshopper参数化设计BIM及软件应用(Revit)课程主要内容:计算机图形学部分简介:计算机图形学的研究内容庞杂而繁多,凡是与计算机绘图相关的内容都是图形学研究的对象。

本讲义选取有助于建筑专业同学理解及掌握计算机辅助设计相关概念和应用的知识加以介绍。为什么讲述计算机图形学知识:类比:模型-视图-控制器(MVC模式)计算机图形学=表示+绘制+交互基本的计算机绘图知识:

1、各类绘图软件:AutoCAD,SketchUP,Rhino,3DSMax,Photoshops等。2、专用的绘图语言及开发包:OpenGL、DirectX3D等。3、基于PARASOLID、Acis几何引擎的商业CAD软件。3、各类开发语言提供的简单绘图功能。位图(光栅图像)图形(矢量图)基础知识:位图(光栅图像)

光栅图像(Image)与图形(Graphics,Shape,矢量图)对一个视域中的光强变化以有限的精度进行抽样,会产生连续强度表面的一种近似。在计算机存储器中可以用整数的阵列表示,其中每一个整数表示一个亮度。用这种方法编码和存储的图像称为位映射图像(bitmappedimage)。图片来源:《数字设计媒体》WilliamJ.Mitchell著王国泉霍新民译清华大学出版社CBitmapb;CDCd;b.LoadBitmap(IDB_BITMAP1);d.CreateCompatibleDC(pDC);d.SelectObject(&b);pDC->BitBlt(0,0,768,432,&d,1,1,SRCCOPY);unsignedk;for(inti=1;i<100;i=i+5)for(intj=1;j<100;j=j+5){k=pDC->GetPixel(i,j);chars[32];sprintf_s(s,"%d",k);pDC->TextOutW(i*15,j*5+500,CString(s));}1_3_BMP图形(Graphics,Shape)矢量图

图像可能会被看成是不同光强和色彩的点的集合,而对于设计师而言,他们一般会创建高度结构化形式的图,并把他们看成是诸如直线,圆弧、封闭多边形这样一些几何实体的集合。在工程制图中,会使用直尺和圆规一类的绘图工具精确的画出几何实体,并通过几何制图的方法精确的确定他们的关系。同样,计算机图形软件提供了特定的精确处理和准确表示几何实体的工具。图片来源:《数字设计媒体》WilliamJ.Mitchell著王国泉霍新民译清华大学出版社使用CDC类函数绘制基本的图形(不使用任何软件工具,直接写一个运行程序)1、绘制一个简单的矩形DrawRectangleDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)Return;CPenmyPen;myPen.CreatePen(PS_SOLID,10,RGB(255,40,0));pDC->SelectObject(myPen);intw=500;inth=300;pDC->MoveTo(50,50);pDC->LineTo(50+w,50);pDC->LineTo(50+w,50+h);pDC->LineTo(50,50+h);pDC->LineTo(50,50);1-1DrawRectangle//TODO:adddrawcodefornativedatahereCPenmyPen;myPen.CreatePen(PS_SOLID,10,RGB(255,40,0));pDC->SelectObject(myPen);pDC->Ellipse(30,20,500,300);voidCMy1_2_MouseLineView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultm_StartPoint=point;CView::OnLButtonDown(nFlags,point);}voidCMy1_2_MouseLineView::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCPenmyPen;myPen.CreatePen(PS_SOLID,5,RGB(255,40,0));CClientDCdc(this);dc.SelectObject(myPen);dc.MoveTo(m_StartPoint);dc.LineTo(point);CView::OnLButtonUp(nFlags,point);}for(inti=0;i<628*2;i++){inty=100*sin(float(i)/100);pDC->SetPixel(i,y+120,0);//pDC->Ellipse(i-r,y-r+120,i+r,y+r+120);Sleep(10);}voidDrawCurve(doublep[3],CDC*pDC,intp_x,intp_y){doubler=150.0,h=3;doublex[628],y[628],z[628],xe[628],ye[628],ze[628],xs[628],ys[628],zs=200,a,b,c,u,v;intm=0;a=p[0];b=p[1];c=p[2];u=sqrt(a*a+b*b+c*c);v=sqrt(a*a+b*b);for(doublet=0;t<62.8;t=t+0.1){x[m]=r*cos(t);y[m]=r*sin(t);z[m]=h*t;m++;}xe[0]=-b/v*x[0]+a/v*y[0];ye[0]=-a*c/(u*v)*x[0]-b*c/(u*v)*y[0]+v/u*z[0];ze[0]=-a/u*x[0]-b/u*y[0]-c/u*z[0]+u;xs[0]=xe[0]*zs/ze[0]+p_x;ys[0]=ye[0]*zs/ze[0]+p_y;pDC->MoveTo(xs[0],ys[0]);//pDC->Ellipse(xs[0],ys[0],xs[0]+100,xs[0]+100);for(inti=1;i<628;i++){xe[i]=-b/v*x[i]+a/v*y[i];ye[i]=-a*c/(u*v)*x[i]-b*c/(u*v)*y[i]+v/u*z[i];ze[i]=-a/u*x[i]-b/u*y[i]-c/u*z[i]+u;xs[i]=xe[i]*zs/ze[i]+p_x;ys[i]=ye[i]*zs/ze[i]+p_y;pDC->LineTo(int(xs[i]),int(ys[i]));}}在工业设计中遇到的形状,一般可以分为两类:(1)定形形状(第一类形状),通常有平面、二次曲面或其他规则曲面所构成。

(2)自由形状(第二类形状),一般来说,包含了自由曲线和自由曲面,设计时通常由给定的一系列型值点来定义期形状,某些复杂的零件及汽车、飞机的外形曲面均属于这类形状。

一般来说用常规的三视图的方法,对第一类形状是适合的,但是将三维形状在二维平面上描述进行形状信息的传递,即使采用多面视图及其它的表达方法,对某些形状来说,也仍然是难于做好的。

第二类形状所包含的信息更多,用传统的工程图学的方法有一定的困难,在CAGD中则是用数学方法来定义、描述及传递形状信息[Hu1987]。[Hu1987]胡瑞安主编.计算机辅助几何设计[M].华中工学院出版社.1987PrototypeofthedesigntheClay&Sculpture

StudioDesign入口及玻璃幕墙调整方案2入口及玻璃幕墙调整方案2入口细布(方案2)

入口室内效果MuseumofContemporaryArt&PlanningExhibition

ArchitecturebyCoopHimmelb(l)au生成式设计(generativecomponents)来源:Pedit_Spline.dwg内插曲线拟合曲线•Mathematicalrepresentationofphysicalsplines•C2continuous•Interpolateallcontrolpoints•HaveGlobalcontrol(nolocalcontrol)NaturalSplines样条函数是美国数学家I.J.Shoenberg于1946年提出的,但当时并未引起人们的重视。直到60年代,人们才开始认识到样条函数在数据拟合、函数逼近、数值微分与积分等重要作用,并广泛的用于汽车、航空、造船等行业的几何外形设计[]。最初,样条曲线都是借助于物理样条得到的,放样员把富有弹性的细木条(或有机玻璃条),用压铁固定在曲线应该通过的给定型值点处,样条做自然弯曲所绘制出来的曲线就是样条曲线。样条曲线不仅通过各有序型值点,并且在各型值点处的一阶和二阶导数连续,也即该曲线具有连续的、曲率变化均匀的特点。Splines•Popularizedinlate1960sinUSAutoindustry(GM)–R.Riesenfeld(1972)–W.Gordon•Origin:thethinwoodormetalstripsusedinbuilding/shipconstruction•Goal:defineacurveasasetofpiecewisesimplepolynomialfunctionsconnectedtogetherSplines样条PierreBezierforhisfundamentalcontributionRobinForrestforhisinsightBillGordonforhismathematicalcontributionsCarldeBoorandMauriceCoxfortheCox-deBooralgorithmSteveCoonsforhismathematicalgeniusRichRiesenfeldforB-splinesElaineCohen,TomLycheandRichRiesenfeldfortheOsloAlgorithmsLewieKnappforrationalB-splinesKenVersprieforNURBSDr.PierreB´ezier.B´ezierwasanengineerwiththeRenaultcarcompanyandsetoutintheearly1960’stodevelopacurveformulationwhichwouldlenditselftoshapedesign.贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(PierreBézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由PauldeCasteljau(保尔·德·卡斯特里奥)于1959年运用deCasteljau算法开发,以稳定数值的方法求出贝塞尔曲线。Bezier曲线和曲面Bezier曲线定义

给出型值点P0,P1,…,Pn,它们所确定的n次Bezier曲线是:

涉及到的0!及00,按约定均为1。当n=1时是Bernstein多项式,调和函数在n=2时在n=3时①②③④Bezier曲线几何作图方法两个控制点(LinearBezierSpline)

只有两个控制点P、Q的Bezier曲线是什么样子的?不难想像是线段PQ,如下图:

所以由控制点P、Q产生的Bezier曲线的方程是:

C(u)=(1-u)P+uQ

0<=u<=1

曲线上参数为u的点是通过P和Q的线性组合得到的。Bezier二次曲线(QuadraticBezierSpline)如果想得到一条弯曲的曲线,两个控制点是不够的,加上一个控制点R,那么由控制点P、Q和R生成的Bezier曲线又是什么样子的了?假设生成的曲线为C(u),其中0<=u<=1,对应于某个特定的u,C(u)如何计算出来了?我们先在PQ上求一点A(u)

A(u)=(1-u)P+uQ在QR上求一点B(u)

B(u)=(1-u)Q+uR再在生成的线段上求C(u)

C(u)=(1-u)A(u)+uB(u)对应于下图,用这种迭代的方法求出的点C(u)就是Bezier曲线上参数为u的点!将A(u)和B(u)的公式代入C(u)得到:

C(u)=(1-u)A(u)+uB(u)

=(1-u)[(1-u)P+uQ]+

u[(1-u)Q+uR]

=(1-u)^2P+2u(1-u)Q+u^2R

(0<=u<=1)上面的公式给出了从三个控制点P、Q和R,求取参数u对于的曲线上点的方法,如果u=0,则C(0)=P;如果u=1,则C(1)=R,说明曲线通过P和R,与上图的观察是一致的;如果有四个控制点P、Q、R和S,给定一个参数值u,0<=u<=1,如何求u对应的Bezier曲线上的点?还是用上述迭代的方法,最后得到的方程是:

C(u)=(1-u)^3P+3u(1-u)^2Q+3u^2(1-u)R+u^3S绘制出来的曲线如下图所示:Bezier曲线(CubicBezierSpline)deCasteljau算法描述Bezier曲面

若在空间给定(m+1)(n十1)个控制点,Vij,i=0,1,…,m,j=0,1,…,n,令上式曲面为m×n次的Bezier曲面

当m=n=1,公式成为:

设v00,v01,v10,v11四点依次是(0,0,0),(1,0,0),(0,1,0),(0,0,1),则可得P1,1(u,w)的坐标形式的参数方程为:消去参数,就得马鞍面方程:

当m=n=3,曲面成为:Bezier曲线的次数(degree)是有控制点的个数决定的(n+1个控制点),如果增加曲线的变化就需要在这个曲线的附近增加控制点,这会增加曲线的次数。也可以把不同的Bezier曲线连接起来,只要第一条曲线的尾端与第二条曲线的首端连接起来并具有相同的切线方向,至少可以获得G1的连续性。B-Spline需要一系列的控制点,一系列的节点和一系列的系数,每个系数对应一个控制点,从而构造一系列的曲线段连接在一起,满足某个连续条件。Hermite曲线Hermite曲线

Hermite曲线为给定两端点及两端点切向量所得的三次曲线。已知曲线的两个端点坐标P0、P1,和端点处的切线R0、R1,确定的一条曲线。令:则:给定边界条件:结论:只要给定Gh,就可以在[0,1]范围内求出Q(t),即可绘制出Hermite曲线,对于不同的初始条件,Gh是不同的,而T、Mh均是相同的。Hermite.gh曲线与曲面基础知识\B_Spline_Grasshopper\Bezier01_3P.gh曲线与曲面基础知识\B_Spline_Grasshopper\Bezier01_4P.ghB样条曲线B样条曲线(构造具有局部性的调和函数)

给定n+1个控制点P0,P1,…,Pn,它们所确定的p阶B样条曲线是:其中Ni,p(u)递归定义如下:

这里u0,u1,…,un+p,是一个非递减的序列,称为节点,(u0,u1,…,un+p)称为节点向量。定义中可能出现,这时约定为0。贝塞尔基函数用作权重。B-样条基函数也一样,但更复杂。但是它有两条贝塞尔基函数所没有的特性,即(1)定义域被节点细分(subdivided);(2)基函数不是在整个区间非零。实际上,每个B样条基函数在附近一个子区间非零,因此,B-样条基函数具有局部支撑性。1)设U是m+1个非递减数的集合,u0<=u1<=u2<=u3<=…<=um,u0称为节点(knots),集合U称为节点向量(Knotsvector),半开区间[ui,ui+1)称为第i个节点区间。2)节点可以被认为是分隔点,区间[u0,um]被细分为节点区间,所有的B样条基函数被定义在[u0,um]上。3)为了定义B-Spline基函数,还需要一个参数,基函数的次数(degree),第i个P次的B-Spline基函数记为Ni,p(u)。Cox-deBoor递归公式Cox-deBoor递归公式U={0,1,2,3}1)0次基函数是N0,0(u)=1在[0,1),在其它区间是0;N1,0(u)=1

在[1,2)上,在其它区间是0;N2,0(u)=1在[2,3)上,其它区间是0。为了计算Ni,1(u),需要Ni,0(u)和Ni+1,0(u)。因此,我们可以计算N0,1(u),N1,1(u),N2,1(u),N3,1(u)等等。所有这些Ni,1(u)写在第三列。一旦所有Ni,1(u)计算完毕,我们可以计算Ni,2(u)并将其放在第四列。继续这个过程直到所有需要的Ni,p(u)的计算完毕。例:现在计算N0,1(u)和N1,1(u)。要计算N0,1(u),因为i=0和p=1,从定义出发有因为u0=0,u1=1和u2=2,上式变为因为N0,0(u)在[0,1)上非零且N1,0(u)在[1,2)上非零,如果u在[0,1),只有N0,0(u)对N0,1(u)有贡献。因此,如果u

在[0,1)上,N0,1(u)是u,N0,0(u)=u。而如果u

在[1,2)上,N0,1(u)是(2-u),N1,0(u)=(2-u)。相似的计算得到N1,1(u)=(u–1)N1,0(u)+(3-u)N2,0(u),如果u

在[1,2)上,而N1,1(u)=u-1,如果u

在[2,3)上,

N1,1(u)=3–u。下图中,黑色和红色线分别是N0,1(u)和

N1,1(u)。注意N0,1(u)在[0,1)和[1,2)上是非零的,

N1,1(u)在[1,2)和[2,3)上是非零的。一旦获得N0,1(u)和N1,1(u),可以计算N0,2(u)。由定义得到下式:代入节点值得到注意N0,1(u)在[0,1)和[1,2)上非零而N1,1(u)在[1,2)和[2,3)上非零。因此,我们有三种情况要考虑:1.u在[0,1)上:2.u

在[1,2)上3.u在[2,3)上2.u

在[1,2)上:

这种情况,

N0,1(u)和N1,1(u)都对

N0,2(u)有贡献。因此N0,1(u)=2-u

且N1,1(u)=u-1在[1,2)上,得到

1.u

[0,1)上:

这种情况,只有N0,1(u)对N0,2(u)的值有贡献。因此,N0,1(u)是u,得到

3.u

[2,3)上:

这种情况,只有N1,1(u)对

N0,2(u)有贡献。因此N1,1(u)=3-u

在[2,3)上,得到,曲线与曲面基础知识\B_Spline_Grasshopper\B_Spline01.ghfor(intj=0;j<N;j++){if(_u>=ui&_u<=ui1){_result=1;}else{_result=0;}

resultList.Add(_result);_u=_u+step;}A=resultList;for(intj=0;j<N;j++){_result=(_u-ui)/(ui2-ui)*_N01[j]+(ui3-_u)/(ui3-ui1)*_N11[j];

resultList.Add(_result);_u=_u+step;}A=resultList;带重复度的节点如果ui

是重复度k

的节点(即ui=ui+1=...=ui+k-1),那么节点区间[ui,ui+1),[ui+1,ui+2),...,[ui+k-2,ui+k-1)不存在,结果是,Ni,0(u),Ni+1,0(u),...,Ni+k-1,0(u)都是零函数。u0

u1

u2

u3

u4

u5

u6

u7

u8

u9

0000.30.50.50.6111计算Ni,0(u)。注意因为m=9且p=0(0次基函数),我们有n=m-p-1=8。如下表所示,只有四个0次非零基函数:N2,0(u),N3,0(u),N5,0(u)

和N6,0(u).

基函数

范围

方程

备注

N0,0(u)所有

u

0因为[u0,u1)=[0,0)不存在N1,0(u)所有

u

0因为[u1,u2)=[0,0)不存在N2,0(u)[0,0.3)1

N3,0(u)[0.3,0.5)1

N4,0(u)所有

u

0因为[u4,u5)=[0.5,0.5)不存在N5,0(u)[0.5,0.6)1

N6,0(u)[0.6,1)1

N7,0(u)所有

u

0因为[u7,u8)=[1,1)不存在N8,0(u)所有

u

0因为[u8,u9)=[1,1)不存在继续计算1次基函数。因为p

为1,n=m-p-1=7.下表显示了结果:基

N0,1(u)所有

u

0N1,1(u)[0,0.3)1-(10/3)u

N2,1(u)[0,0.3)(10/3)u

[0.3,0.5)2.5(1-2u)N3,1(u)[0.3,0.5)5u-1.5N4,1(u)[0.5,0.6)6-10u

N5,1(u)[0.5,0.6)10u-5[0.6,1)2.5(1-u)N6,1(u)[0.6,1)2.5u-1.5N7,1(u)所有

u

0计算所有的Ni,2(u)。因为p=2,我们有n=m-p-1=6。下表包含了所有的Ni,2(u):

N0,2(u)[0,0.3)(1-(10/3)u)2N1,2(u)[0,0.3)(20/3)(u-(8/3)u2)[0.3,0.5)2.5(1-2u)2

N2,2(u)[0,0.3)(20/3)u2

[0.3,0.5)-3.75+25u-35u2

N3,2(u)[0.3,0.5)(5u-1.5)2

[0.5,0.6)(6-10u)2

N4,2(u)[0.5,0.6)20(-2+7u-6u2)[0.6,1)5(1-u)2

N5,2(u)[0.5,0.6)12.5(2u-1)2

[0.6,1)2.5(-4+11.5u-7.5u2)N6,2(u)[0.6,1)2.5(9-30u+25u2)在节点0.5(2)处,因为它的重复度是2且这些基函数的次数是2,基函数N3,2(u)

在0.5(2)处是C0

连续的。这就是为什么N3,2(u)在0.5(2)处有个尖锐的角。对不在两个端点处的节点,例如0.3,保持了C1

连续性因为它们都是简单节点。曲线与曲面基础知识\B_Spline_Grasshopper\b-Spline_BaseFunction02.gh1.Ni,p(u)是一个在u

上的p

次多项式2.非负性--对所有的i,p

和u,Ni,p(u)是非负的3.局部支撑(LocalSupport)--Ni,p(u)是在[ui,ui+p+1)上的非零多项式。4.在任一区间[ui,ui+1),最多有p+1个p

次的基函数非零,即:Ni-p,p(u),Ni-p+1,p(u),Ni-p+2,p(u),...,

和Ni,p(u)5.单位分解(PartitionofUnity)--所有非零的p

次基函数在区间[ui,ui+1)上的和(sum)是1。6.如果节点数是m+1,基函数的次数是p,而p

次基函数的数目是n+1,,那么m=n+p+1。7.基函数Ni,p(u)是p

次多项式的复合曲线,连接点在[ui,ui+p+1)上的节点处。8.在一个有重复度k的节点处,基函数Ni,p(u)是Cp-k

连续的。

增加重复度减小连续性的层次(level),增加次数增加连续性。上述2次基函数N0,2(u)在节点2和3处是C1连续的,因为它们是简单节点。NURBS(Non-UniformRationalB-Splines):DefinitionNURBS曲线可以由任意数量的控制点来定义(就是说,任何大于3的数),这样反过来就意味着这整个曲线是由很多相连的片段所组成的。下面的图释展示了一个有10个控制点的D3曲线。所有独立的片段都给予了一个不同的颜色。你可以看到,每一个片段都有一个非常简单的形状;一个你可以看作近似于一条传统的4点贝塞尔曲线的形状。片段与片段之间的小圆圈代表着这个曲线的节点向量。这条D3曲线拥有10个控制点和12个节点(0~11)。这并非一个巧合,节点的数量直接取决于点的数量和度数:K=P+(D-1)非均匀有理B样条曲线(NURBS),是一种用途广泛的样条曲线,它不仅能够用于描述自由曲线和曲面,而且还提供了包括能精确表达圆锥曲线曲面在内各种几何体的统一表达式。自1983年,SDRC公司成功地将NURBS模型应用在它的实体造型软件中,NURBS已经成为计算机辅助设计及计算机辅助制造的几何造型基础,得到了广泛应用。NURBSaresimplyanotherfaceofB-splinecurves.ConsidercontrolpointsPwi=(wixi,wiyi,wizi,wi).Thispointhasfourcomponentsandcanbeconsideredasapointinthefour-dimensionalspace,and,consequently,C(u)belowbecomesaB-splinecurveinthefour-dimensionalspace:曲线的连续性(Continuity)样条曲线是由多项式曲线段连接而成的曲线,在具体的应用中,要求连接线段的连接处满足特定的连续性条件,来保证曲线整体的光顺。组合参数曲线在连接处具有直到n阶的连续导矢,这类光顺性称之为Cn或n阶参数连续性(parametriccontinuity);

几何连续性(geometriccontinuity)是指组合曲线在连接处满足不同于Cn的某一组约束条件称之为具有n阶的几何连续性,简称为Gn。

曲线的连续性(Continuity)(1)0阶连续

两个相邻线段S1(t1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论