1、江苏大学计算机图形学第二次实验报告曲线拟合江苏大学-计算机图形学第二次实验报告曲线拟合 作者:日期:计算机科学与通信工程学院实验报告课程计算机图形学实验题目实验二:曲线拟合学生姓名学号专业班级指导教师日期成绩评定表评价内容具体内容权重得分论证分析方案论证与综合分析的正确、合理性20算法设计算法描述的正确性与可读性0%编码实现源代码正确性与可读性0%程序书写规范标识符定义规范,程序书写风格规范0报告质量报告清晰,提交准时10%总 分指导教师签名1. 实验内容1. 绘制三次Bezi曲线()给定四个已知点P4,以此作为控制顶点绘制一段三次Bezir曲线。()给定四个已知点P1P,以此作为曲线上的点绘
2、制一段三次Bezir曲线。2 绘制三次B样条曲线给定六个已知点P1P6,以此作为控制顶点绘制一条三次B样条曲线。2.实验环境indows xpVs 083. 问题分析Bezier曲线通过一组多边折线的各顶点唯一的定义出来。 在多边折线的各顶点中,只有第一点和最后一点在曲线上,其余的顶点则用来定义曲线的导数,阶次和形状。三次Bzier曲线经过首、末两个控制点,且与特征多边形的首、末两条边相切。因此在给定四个控制点的情况下,可以根据线性贝塞尔曲线描述的中介点 Q0、Q1、Q2,和由二次曲线描述的点 R、R1 所建构。也可以在给定四个线上点的情况下根据公式计算出曲线。总之,只要获得了四个控制点的坐标
3、,便可以通过编程来绘制出曲线。对于给出了四个曲线上点的曲线,由于控制点的坐标位于曲线上,而且在相交处两曲线的切平面重合,曲率相等。可以据此来绘制图形。B样条曲线是Bezier曲线的拓广,它是用B样条基函数代替了zier曲线表达式中的Bernstin基函数。在空间给定n+1个点的位置向量 (i=,1,n, =),则称参数曲线 (0t1)为k阶(或-1次)的B样条曲线。其中Ni,k(t)为样条基函数。其中i,k(t)为样条基函数。给定的n+1个点为B样条曲线的控制顶点,由其构成的多边折线称B特征多边形。三次B样条曲线的端点特性:图 1给定4个点绘制的b样条曲线三次B样条曲线的连续性:在已有的三次B
4、样条曲线的基础上,增加一个控制点,就可相应地增加一段B样条曲线,并自然地达到 C连续。图2 给定五个点所绘制的b样条曲线4. 算法设计下图3为给定四个已知点,以此作为控制顶点绘制一段三次Bezier曲线的流程图。图4为给定四个曲线上点,绘制三次ezier曲线的流程图。图5为给定六个控制点所绘制三次b样条曲线的流程图。图 3图 图5.源代码/以已知的四个点为控制点绘制ier曲线vod CDiamondViw:Drawzier(OIT p4) CDC*DC = GtDC(); InvaidaeRect(ULL); UdteWido(); Pe newe,dPen; Pen.CreatePn(PSS
5、OLID,2,GB(0,0,0)); oldPn =pD-SlectOject(ePen); pD-Polyline(,); pDC-SelectObject(lden); nwPe.eleObject(); een.retPen(P_SOLD, 1,RGB(255,0,)); lde = pSletObject(ewPen);ble ax,b,c,dx,ay,b,cy,dy,x,y,t; ax(-0.x)+(3*p.)-(3*p2.x)+(.); bx(3*p0.x)-(1.x)(3*p2); x(-3*0.x)+(3p1.); dp0.x; ay=(p0.y)+(3*p1.y)-(3*p2
6、.y)+(p3.y); by(*p0.)-(6*p1.y)+(*2.); cy=(-30.y)+(3*p1.); dy=py; pD-MoveTo(px,p0.y); or(t0;t=1;t+01) x=x*t*t+bx*ttcx*dx; =y*t*t*t+by*t*cy+dy; pD-eTo(,y); Sleep(); pD-SelectObjet(oldPen);/以已知的四个点为eze曲线上的点来绘制eier曲线oid CDiandVe:azier2(ONT p4) PONT a,b3; POINT a11,b1; fr(t i=0;i=;i+)if(i=) a10=pi; b10=i2
7、; else (=2) a10=; b0=p1; else a10pi-1; b10=pi+2;b.pi+y+(pi.)-(b10.y)/4; x=+1.+(pi)(b0.x)/4; ai.=i.y+((p1)(a0)/4; a.xpi.x(p+1x)(a10x)/4; CC*DC GeD(); CP ewPen,*olden; newen.CratePn(PS_SLI,,GB(0,55,0); odPen pDC-SectObjet(&ewPen); o(ini=0;ioyezr(1,); pC-Selecbject(olden);/以已知的六个点为控制点来绘制B样条曲线/p:已知的六个控制
8、点void aonView::raBure(PONT p) Ivalidaten(NL); Upatinw(); DC pD = GDC(); CPnnwPen,*dPn; w.CratPen(PS_SOLID,2,RGB(55,0,); lPen= pDC-eletbjec(nwPen); n ae00; intx,a,x,by,cx,cy,dx,y; oul x,; pDC-Poline(p, 6); pDCSelectbject(le); newPen.Dleteject(); nwen.CretePen(PSSOD,3,RGB(0,0,5); ldPn pDC-SeectObjec(n
9、ewen); fo(int i0;i3;+) a-(pi.x-3*i+1.x+i+2-+x)/6; b=(pi.x-2+1.x+pi+.)/; cx-(i.x-pi.x)/2; d=(pi.x+4*pi+1.x+p2.x)/6; y-(piy*i+1.y+3*pi+2.y-p+3.)/; by=(iy-2*i+1.y+i+2.y)/2; c=(p.y-p+2.)2; dy=(pi.+4pi1.y+p+2.y)/6; fr(oublt0;t=1;t+1.0rae) x*pow(t,3)+bx*w(t,2)+x*tx; =*pow(t,)+by*po(t,2)+cy*t+d; C-veTo(Round(x),ound(y); pD-LneT(Rod(x),Rund(y)); Slee(2); pC-SelectObj(ldPen);6.程序运行结果下图6为给定四个已知点,以此作为控制顶点绘制的一段三次ie曲线。图8为给定四个曲线上点所绘制的三次Beir曲线。图9和1为给定六个控制点所绘制的三次b样条曲线。图 6 图 7 图 8图 97. 总结通过这次实验复习了Bzie曲线和B样条曲线的参数表示法。一定程度上也考验了自己的计算能力。总的来说这还是一次比较难的实验。在这次实验中使用编程实现用三次Bir曲线绘制和三次b样条曲线图形的绘制。对于计算机图形学的理解更加深了一层。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1