1 / 35

Computer Graphics

Computer Graphics. 第七章 自由曲线和曲面 (1). 本章内容 -1. 7.1 基本概念 7.2 三次参数样条曲线. 工业产品的几何形状大致可分为两类:一类由初等解析曲面,如平面、圆柱面、圆锥面、球面、圆环面等组成,可以用初等解析函数完全清楚地表达全部形状。 另一类由自由曲面组成,如汽车车身、飞机机翼和轮船船体等的曲线和曲面,不能用初等解析函数完全清楚地表达全部形状,需要构造新的函数来进行研究,这些研究成果形成了计算机辅助几何设计 (Computer Aided Geometric Design , CAGD) 学科。. 图 7-1 汽车的曲面.

rona
Download Presentation

Computer Graphics

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Computer Graphics 第七章 自由曲线和曲面(1)

  2. 本章内容-1 7.1 基本概念 7.2 三次参数样条曲线

  3. 工业产品的几何形状大致可分为两类:一类由初等解析曲面,如平面、圆柱面、圆锥面、球面、圆环面等组成,可以用初等解析函数完全清楚地表达全部形状。工业产品的几何形状大致可分为两类:一类由初等解析曲面,如平面、圆柱面、圆锥面、球面、圆环面等组成,可以用初等解析函数完全清楚地表达全部形状。 另一类由自由曲面组成,如汽车车身、飞机机翼和轮船船体等的曲线和曲面,不能用初等解析函数完全清楚地表达全部形状,需要构造新的函数来进行研究,这些研究成果形成了计算机辅助几何设计(Computer Aided Geometric Design,CAGD)学科。

  4. 图7-1 汽车的曲面

  5. 7.1 基本概念 7.1.1 样条曲线曲面 7.1.2 曲线曲面的表示形式 7.1.3 拟合和逼近 7.1.4 连续性条件

  6. 7.1.1 样条曲线曲面 在汽车制造厂里,传统上采用样条绘制曲线的形状。绘图员弯曲样条(如弹性细木条)通过各型值点,其它地方自然过渡,然后沿样条画下曲线,即得到样条曲线(Spline Curve)。 在计算机图形学中,样条曲线是指由多项式曲线段连接而成的曲线,在每段的边界处满足特定的连续性条件,而样条曲面则可用两组正交样条曲线来描述。

  7. 7.1.2 曲线曲面的表示形式 • 曲线曲面的可以采用显式方程、隐函数方程和参数方程表示。 • 首先看一下直线的表示形式:已知直线的起点坐标P1(x1,y1)和终点坐标P2(x2,y2),直线的显式方程表示为:

  8. 直线的隐函数方程表示为: • 直线的参数方程表示为:

  9. 由于用参数方程表示的曲线曲面可以直接进行几何变换,而且易于表示成矢量和矩阵,所以在计算机图形学中一般使用参数方程来描述曲线曲面。下面以一条三次曲线为例,给出参数方程的矢量和矩阵表示:由于用参数方程表示的曲线曲面可以直接进行几何变换,而且易于表示成矢量和矩阵,所以在计算机图形学中一般使用参数方程来描述曲线曲面。下面以一条三次曲线为例,给出参数方程的矢量和矩阵表示: • 参数方程表示:

  10. 矢量表示: • 矩阵表示:

  11. 7.1.3 拟合和逼近 • 曲线曲面的拟合:当用一组型值点(插值点)来指定曲线曲面的形状时,形状完全通过给定的型值点序列确定,称为曲线曲面的拟合。 图7-2 拟合曲线

  12. 曲线曲面的逼近:当用一组控制点来指定曲线曲面的形状时,求出的形状不必通过控制点,称为曲线曲面的逼近。 图7-3逼近曲线

  13. 7.1.4 连续性条件 通常单一的曲线段或曲面片难以表达复杂的形状,必须将一些曲线段连接成组合曲线,或将一些曲面片连接成组合曲面,才能描述复杂的形状。为了保证在连接点处平滑过渡,需要满足连续性条件。连续性条件有两种:参数连续性和几何连续性。

  14. 参数连续性 • 零阶参数连续性,记作C0,指相邻两个曲线段在交点处具有相同的坐标。如图7-4所示。 图7-4 零阶连续性

  15. 一阶参数连续性,记作C1,指相邻两个曲线段在交点处具有相同的一阶导数。如图7-5所示。一阶参数连续性,记作C1,指相邻两个曲线段在交点处具有相同的一阶导数。如图7-5所示。 图7-5 一阶连续性

  16. 二阶参数连续性,记作C2,指相邻两个曲线段在交点处具有相同的一阶和二阶导数。如图7-6所示。二阶参数连续性,记作C2,指相邻两个曲线段在交点处具有相同的一阶和二阶导数。如图7-6所示。 图7-6 二阶连续性

  17. 几何连续性 • 与参数连续性不同,集合连续性只要求参数导数成比例,而不是相等。 • 零阶几何连续性,记作G0,与零阶参数连续性相同,指相邻两个曲线段在交点处具有相同的坐标。 • 一阶几何连续性,记作G1,指相邻两个曲线段在交点处的一阶导数成比例,但大小不一定相等。 • 二阶几何连续性,记作G2,指相邻两个曲线段在交点处的一阶和二阶导数成比例,即曲率一致。

  18. 参数连续性和几何连续性的比较: 对于几何连续性,曲线将向具有较大切向量的部分弯曲。

  19. 7.2 三次参数样条曲线 7.2.1 参数样条曲线定义

  20. 7.2.2 系数求解

  21. 7.2.3 边界条件

  22. M连续性方程

  23. 三次参数样条曲线算法 1 设置最大型值点数为40.2 设置标志变量Flag,当Flag=TURE时开始绘制型值点;当Flag=FALSE时绘制结束。3 计算弦长。4 根据边界条件计算始端和终端的投影。5 对x和y方向进行同样的计算。6 分别计算x和y方向的7 用追赶法求解三弯矩方程8 分别计算x和y方向的系数9 根据(x,y)坐标值绘制三次参数样条曲线

  24. 2.已知17个型值点:P 1(-360,0),P 2(315,71),P 3(-270,100),P 4(-225,71),P 5(-180,0),P 6(-135,71),P 7(-90,100),P 8(-45,71),P 9(0,0),P 10(45,-71),P 11(90,-100),P 12(135,-71),P 13(180,0),P 14(225,71),P 15(270,100),P 16(315,71),P 17(360,0),如图7-27所示。边界条件为:自由端。使用VC++编程绘制通过给定型值点的三次参数样条曲线和正弦曲线,试比较二者之间差异。

  25. 图 7-27 型值点

  26. CTestView::CTestView() { // TODO: add construction code here px[1]=-360;py[1]=0;//型值点初始化 px[2]=-315;py[2]=-71; px[3]=-270;py[3]=-100; px[4]=-225;py[4]=-71; px[5]=-180;py[5]=0; px[6]=-135;py[6]=71; px[7]=-90;py[7]=100; px[8]=-45;py[8]=71; px[9]=0;py[9]=0; px[10]=45;py[10]=-71; px[11]=90;py[11]=-100; px[12]=135;py[12]=-71; px[13]=180;py[13]=0; px[14]=225;py[14]=71; px[15]=270;py[15]=100; px[16]=315;py[16]=71; px[17]=360;py[17]=0; }

  27. void CTestView::DrawPoint()//绘制型值点 { CClientDC dc(this); CPen NewPen,*OldPen; CBrush NewBrush,*OldBrush; NewPen.CreatePen(PS_SOLID,1,RGB(255,255,0)); OldPen=dc.SelectObject(&NewPen); NewBrush.CreateSolidBrush(RGB(0,0,0)); OldBrush=dc.SelectObject(&NewBrush); for(int i=1;i<N;i++) { dc.Ellipse(ROUND(px[i]-5+MaxX/2),ROUND(py[i]-5+MaxY/2),ROUND(px[i]+5+MaxX/2),ROUND(py[i]+5+MaxY/2));//椭圆的4个坐标点 } dc.SelectObject(OldPen); NewPen.DeleteObject(); dc.SelectObject(OldBrush); NewBrush.DeleteObject(); }

  28. void CTestView::ParaSpline()//三次参数样条曲线 { …… lx[1]=2;ux[1]=mux[1]/lx[1];//追赶法求解x方向三弯矩方程 for(i=2;i<=n;i++) { mx[i]=lmdx[i]; lx[i]=2-mx[i]*ux[i-1]; ux[i]=mux[i]/lx[i]; } Kx[1]=Dx[1]/lx[1]; for(i=2;i<=n;i++) { Kx[i]=(Dx[i]-mx[i]*Kx[i-1])/lx[i]; } Mx[n]=Kx[n]; for(i=n-1;i>=1;i--) { Mx[i]=Kx[i]-ux[i]*Mx[i+1]; } …… }

More Related