曲线模拟 计算机图形学,江苏大学-计算机图形学第二次实验报告-曲线拟合

《江苏大学-计算机图形学第二次实验报告-曲线拟合》由会员分享,可在线阅读,更多相关《江苏大学-计算机图形学第二次实验报告-曲线拟合(13页珍藏版)》请在人人文库网上搜索。

1、计算机科学与通信工程学院实验报告课程计算机图形学实验题目实验二:曲线拟合学生姓名学号专业班级指导教师日期成绩评定表评价内容具体内容权重得分论证分析方案论证与综合分析的正确、合理性20%算法设计算法描述的正确性与可读性20%编码实现源代码正确性与可读性30%程序书写规范标识符定义规范,程序书写风格规范20%报告质量报告清晰,提交准时10%总 分指导教师签名1. 实验内容1. 绘制三次Bezier曲线(1)给定四个已知点P1P4,以此作为控制顶点绘制一段三次Bezier曲线。(2)给定四个已知点P1P4,以此作为曲线上的点绘制一段三次Bezier曲线。2. 绘制三次B样条曲线给定六个已知点P1P6。

2、,以此作为控制顶点绘制一条三次B样条曲线。2. 实验环境Windows xpVs 20083. 问题分析Bezier曲线通过一组多边折线的各顶点唯一的定义出来。在多边折线的各顶点中,只有第一点和最后一点在曲线上,其余的顶点则用来定义曲线的导数,阶次和形状。三次Bezieer曲线经过首、末两个控制点,且与特征多边形的首、末两条边相切。因此在给定四个控制点的情况下,可以根据线性贝塞尔曲线描述的中介点 Q0、Q1、Q2,和由二次曲线描述的点 R0、R1 所建构。也可以在给定四个线上点的情况下根据公式计算出曲线。总之,只要获得了四个控制点的坐标,便可以通过编程来绘制出曲线。对于给出了四个曲线上点的曲线。

3、,由于控制点的坐标位于曲线上,而且在相交处两曲线的切平面重合,曲率相等。可以据此来绘制图形。B样条曲线是Bezier曲线的拓广,它是用B样条基函数代替了Bezier曲线表达式中的Bernstain基函数。在空间给定n1个点的位置向量Pi (i=0,1,2,n, n=k),则称参数曲线(0t1)为k阶(或k1次)的B样条曲线。其中Ni,k(t)为B样条基函数。其中Ni,k(t)为B样条基函数。给定的n1个点为B样条曲线的控制顶点,由其构成的多边折线称B特征多边形。三次B样条曲线的端点特性:图 1 b给定4个点绘制的b样条曲线三次B样条曲线的连续性:在已有的三次B样条曲线的基础上,增加一个控制点,。

4、就可相应地增加一段B样条曲线,并自然地达到 C2连续。图 2给定五个点所绘制的b样条曲线4. 算法设计下图3为给定四个已知点,以此作为控制顶点绘制一段三次Bezier曲线的流程图。图4为给定四个曲线上点,绘制三次Bezier曲线的流程图。图5为给定六个控制点所绘制三次b样条曲线的流程图。图 3图 4图 55. 源代码/以已知的四个点为控制点绘制Bezier曲线void CDiamondView:DrawBezier1(POINT p4)CDC *pDC = GetDC();InvalidateRect(NULL); UpdateWindow(); CPen newPen,*oldPen;new。

5、Pen.CreatePen(PS_SOLID,2,RGB(0,0,0);oldPen = pDC-SelectObject(&newPen);pDC-Polyline(p,4);pDC-SelectObject(oldPen);newPen.DeleteObject();newPen.CreatePen(PS_SOLID, 1, RGB(255,0,0);oldPen = pDC-SelectObject(&newPen);double ax,bx,cx,dx,ay,by,cy,dy,x,y,t;ax=(-p0.x)+(3*p1.x)-(3*p2.x)+(p3.x);bx=(3*p0.x)-(。

6、6*p1.x)+(3*p2.x); cx=(-3*p0.x)+(3*p1.x); dx=p0.x; ay=(-p0.y)+(3*p1.y)-(3*p2.y)+(p3.y);by=(3*p0.y)-(6*p1.y)+(3*p2.y);cy=(-3*p0.y)+(3*p1.y);dy=p0.y;pDC-MoveTo(p0.x,p0.y);for(t=0;tLineTo(x,y);Sleep(1);pDC-SelectObject(oldPen);/以已知的四个点为Bezier曲线上的点来绘制Bezier曲线void CDiamondView:DrawBezier2(POINT p4)POINT a。

7、3,b3;POINT a11,b11;for(int i=0;iSelectObject(&newPen);for(int i=0;iPolyBezier(p1,4);pDC-SelectObject(oldPen);/以已知的六个点为控制点来绘制B样条曲线/p:已知的六个控制点void CDiamondView:DrawBCurve(POINT p6)InvalidateRgn(NULL);UpdateWindow();CDC *pDC = GetDC(); CPen newPen,*oldPen; newPen.CreatePen(PS_SOLID,2,RGB(255,0,0); oldP。

8、en = pDC-SelectObject(&newPen); int rate=1000;int ax,ay,bx,by,cx,cy,dx,dy;double x,y;pDC-Polyline(p, 6);pDC-SelectObject(oldPen);newPen.DeleteObject();newPen.CreatePen(PS_SOLID,3,RGB(0,0,255); oldPen = pDC-SelectObject(&newPen); for(int i=0;iMoveTo(Round(x),Round(y);pDC-LineTo(Round(x),Round(y);Sleep(2); pDC-SelectObject(oldPen);6. 程序运行结果下图6为给定四个已知点,以此作为控制顶点绘制的一段三次Bezier曲线。图8为给定四个曲线上点所绘制的三次Bezier曲线。图9和10为给定六个控制点所绘制的三次b样条曲线。图 6 图 7图 8图 97. 总结通过这次实验复习了Bezier曲线和B样条曲线的参数表示法。一定程度上也考验了自己的计算能力。总的来说这还是一次比较难的实验。在这次实验中使用编程实现用三次Bezier曲线绘制和三次b样条曲线图形的绘制。对于计算机图形学的理解更加深了一层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值