136.参数曲线的快速生成算法----毕业设计_第1页
136.参数曲线的快速生成算法----毕业设计_第2页
136.参数曲线的快速生成算法----毕业设计_第3页
136.参数曲线的快速生成算法----毕业设计_第4页
136.参数曲线的快速生成算法----毕业设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

江江江江南南南南大大大大学学学学毕毕毕毕业业业业设设设设计计计计论论论论文文文文论文题目论文题目论文题目论文题目参数曲线的快速生成算法参数曲线的快速生成算法参数曲线的快速生成算法参数曲线的快速生成算法姓姓姓姓名名名名学学学学院院院院信息工程学院信息工程学院信息工程学院信息工程学院专专专专业业业业计算机科学与技术计算机科学与技术计算机科学与技术计算机科学与技术指导老师指导老师指导老师指导老师日日日日期期期期2003年年年年6月月月月毕业论文参数曲线的快速生成算法1摘摘摘摘要要要要本毕业设计主要研究参数曲线的直接快速生成,要直接生成参数曲线就需对参数方程XFT,YGT,0T1的参数T每次增加一个步长,然后计算该点的X和Y坐标值并绘制该点。要逐点地生成参数曲线,就要求参数T每次增加的步长要使曲线前进的幅度不得超过一个象素长度,否则有可能跨过一个中间象素而产生断点。为了提高曲线生成算法的速度,本毕业设计针对如何选择最佳的步长进行比较讨论,以使曲线前进的幅度在不超过一个象素的前提下,选择尽量大的步长。为了进一步提高算法的速度,在前面讨论的最佳步长的基础上又采用了双步逐点曲线生成算法,即将上述得到的步长增加一倍,以使算法的循环次数减少一半。由于步长增加一倍,这样当曲线前进一步时,其幅度有时会大于一个象素的长度,这时我们通过插值的方法来确定跨过的那个中间象素。通过上述讨论的算法能够比较快速的逐点生成曲线,为了实现上述算法,本毕业设计使用VISUALC60为工具并以三次BEZIER曲线、普通参数曲线XFTX3T3X2T2X1TX0,YGTY3T3Y2T2Y1TY0,以及导师所给的一个特殊的曲线方程为例编程实现上述算法。关键词关键词关键词关键词参数曲线,逐点,双步,VISUALC60作者二零零三年六月毕业论文参数曲线的快速生成算法2ABSTRACTTHISGRADUATIONPROJECTMAINRESEACHTHEDIRECTBORNOFTHEPARAMETERCURVEXFT,YGT,0LOADSTANDCURSORIDC_CROSS初始化该变量,该语句的作用是取得WINDOWS标准鼠标形状句柄并赋给M_HCROSS,然后就可以通过CLASSWIZARD添加鼠标动作的消息处理函数。例如,要为程序添加鼠标左键单击消息处理函数,首先在打开的CLASSWIZARD对话框中的CLASSNAME组合框中选择VIEW类,然后在OBJECTIDS列表框选中第一行,并在MESSAGE列表框中选中WM_LBUTTONDOWN一行,最后单击ADDFUNCTION按钮即可。类似的还可以为程序添加WM_RBUTTONDOWN(鼠标右键单击)消息处理函数。因为需要逐点地生成曲线,因此在程序中需要使用到MFC(MICROSOFTFUNDATIONCLASS)中的CDC(设备上下文)类的成员函数SETPIXEL()来实现在屏幕上画点,CDC类主要用于在指定设备上下文上(如窗口客户区、打印机)进行绘图、显示文本等操作。毕业论文参数曲线的快速生成算法6第二章第二章第二章第二章计算机图形学中常用的算法计算机图形学中常用的算法计算机图形学中常用的算法计算机图形学中常用的算法21常用直线的算法常用直线的算法常用直线的算法常用直线的算法画直线的算法有很多,例如数值微分法,中点画线法,BRESENHAM化线算法等。在这里只介绍一个比较方便常用的中点画线法。为了讨论方便,本小节假定直线斜率在0、1之间。其他情况可参照下述讨论进行处理。如图所示,若直线在X方向增加一个单位,则在Y方向上的增量只能在0、1之间。假设X坐标为XP的各象素点中,与直线最近者已确定,为XP,YP,用实心小圆表示。那么,下一个与直线最近的象素只能是正右方的P1XP1,YP或右上方的P2XP1,YP1两者之一,用空心小圆表示。再以M表示P1、P2的中点,即MXP1,YP05)。又设想Q是理想直线与垂直直线XXP1的交点。显然,若M在Q的下方,则P2离直线近,应取为下一个象素;否则应取P1。这就是中点画线法的基本原理。中点画线算法每步迭代涉及的象素和中点示意图下面来讨论上述算法的实现。假设直线的起点和终点分别是X0,Y0,X1,Y1。则直线的方程为FX,YAXBYC0其中,AY0Y1,BX1X0,CX0YIX1Y0。对于直线上的点,FX,Y0;对于直线上方的点,FX,Y0;而对于直线下方的点FX,Y0时,则应取正右方的P1。当D0时,二者一样合适,可以随便取一个。我们约定取正右方的P1。对每一个象素计算判别式D,根据它的符号确定下一个象素。至此可以写出完整的算法。但是注意到D是XP和YP的线形函数,可采用增量计算,提高运算效率。在D0的情况下,取正右方象素P1,欲判断再下一个象素应取哪个,应计算D1FXP2,YP05AXP2BYP05CDA故D的增量为A。而若DFILLRECTLONGU3,N,NLONGF0,F1,F2,F3,G0,G1,G2,G3LONGA1,A2,A3,B1,B2,B3LONGV,W,M,T/计算NX的值LONGNXLABSX1X0LABSX3X2LABSX1X0LABSX3X2VX22X1X0WX33X1X2X0TV/WIFT0/计算NY的值LONGNYLABSY1Y0LABSY3Y2LABSY1Y0LABSY3Y2VY22Y1Y0WY33Y1Y2Y0TV/WIFT0NXUNXNYUNYNNXNYNXNY/将N的值减小1/2NN1/使F0,F1,F2,F3,G0,G1,G2,G3都为整数NNNN/计算当T0,T1/N,T2/N,T3/N时F与G的值F0NX0F1X0N1N1N13X1N1N13X2N1X3F2X0N2N2N26X1N2N212X2N28X3F3X0N3N3N39X1N3N327X2N327X3G0NY0G1Y0N1N1N13Y1N1N13Y2N1Y3G2Y0N2N2N26Y1N2N212Y2N28Y3G3Y0N3N3N39Y1N3N327Y2N327Y3/A1,A2,A3和B1,B2,B3分别表示F和G的一、二、三阶差分A1F1F0A2F22F1F0A3F33F23F1F0B1G1G0B2G22G1G0B3G33G23G1G0LONGXX0,YY0LONGZ10,Z20/画曲线的第一个点INTFX0,FY0PDCSETPIXELX,Y,RGB10,20,20/循环画点FORINTI0ISETPIXELX,Y,RGB10,20,20FX0/XI1XI2时YI1YI2的情况IF2B1Z2SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20PDCSETPIXELX2,Y2,RGB10,20,20YY2Z2Z2B12NELSE/XI1XI2时YI1YI1的情况IFB12Z2SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FX1ELSEPDCSETPIXELX1,Y,RGB10,20,20PDCSETPIXELX2,Y1,RGB10,20,20YY1Z2Z2B1NELSEIF2B1Z2SETPIXELX1,Y,RGB10,20,20Z2Z2B1FX1ELSEIF2B1Z2NIFFY1PDCSETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FX1ELSEPDCSETPIXELX1,Y,RGB10,20,20PDCSETPIXELX2,Y1,RGB10,20,20YY1Z2Z2B1NELSE/YI1YI2IFFY1PDCSETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20PDCSETPIXELX2,Y2,RGB10,20,20YY2Z1Z1A12NXX2Z1Z1A12NFY0/XI1XI1时ELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FY1ELSEIFFY1毕业论文参数曲线的快速生成算法21PDCSETPIXELX,Y,RGB10,20,20FY0PDCSETPIXELX,Y1,RGB10,20,20PDCSETPIXELX1,Y2,RGB10,20,20YY2Z2Z2B12NFX0ELSE/XI1XI1时,YI1YI1的情况IFFX1|FY1PDCSETPIXELX,Y,RGB10,20,20FX0FY0PDCSETPIXELX1,Y1,RGB10,20,20YY1Z2Z2B1NELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20ELSEFX1IFFY1PDCSETPIXELX1,Y,RGB10,20,20FX0FY0Z2Z2B1ELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20毕业论文参数曲线的快速生成算法22FX0FY0PDCSETPIXELX1,Y1,RGB10,20,20YY1Z2Z2B1NELSE/XI1XI1时YI1YI2IFA12Z1SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FY1ELSEIFFY1PDCSETPIXELX,Y,RGB10,20,20FY0PDCSETPIXELX,Y1,RGB10,20,20PDCSETPIXELX1,Y2,RGB10,20,20YY2Z2Z2B12NFX0XX1Z1Z1A1NELSE/XI1XI时IF2A1Z1SETPIXELX,Y,RGB10,20,20ELSEFY1IF2B1Z2SETPIXELX,Y1,RGB10,20,20YY2毕业论文参数曲线的快速生成算法23Z2Z2B12NELSE/XI1XI时YI1YI1的情况IFFX1PDCSETPIXELX,Y1,RGB10,20,20FY0YY1Z2Z2B1NFX0ELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20ELSEFY1IF2B1Z2SETPIXELX,Y1,RGB10,20,20FY0YY1Z2Z2B1NELSE/XI1XI时YI1YI2的情况PDCSETPIXELX,Y1,RGB10,20,20YY2Z2Z2B12NFX0Z1Z1A1ELSE/XI1XI1时IF2A1Z1SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FY1ELSEIFFY1PDCSETPIXELX,Y,RGB10,20,20FY0PDCSETPIXELX,Y1,RGB10,20,20PDCSETPIXELX1,Y2,RGB10,20,20YY2Z2Z2B12NFX0ELSE/XI1XI1时,YI1YI1的情况IFFX1|FY1PDCSETPIXELX,Y,RGB10,20,20FX0FY0PDCSETPIXELX1,Y1,RGB10,20,20YY1Z2Z2B1NELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20ELSEFX1IFFY1毕业论文参数曲线的快速生成算法25PDCSETPIXELX1,Y,RGB10,20,20FX0FY0Z2Z2B1ELSEIF2B1Z2SETPIXELX,Y,RGB10,20,20FX0FY0PDCSETPIXELX1,Y1,RGB10,20,20YY1Z2Z2B1NELSE/XI1XI1时,YI1YI2的情况IFA12Z1SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FY1ELSEIFFY1PDCSETPIXELX,Y,RGB10,20,20FY0PDCSETPIXELX,Y1,RGB10,20,20PDCSETPIXELX1,Y2,RGB10,20,20YY2Z2Z2B12NFX0XX1Z1Z1A1N毕业论文参数曲线的快速生成算法26/XI1XI2时ELSEIFFX1PDCSETPIXELX,Y,RGB10,20,20FX0IF2B1Z2SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20PDCSETPIXELX2,Y2,RGB10,20,20YY2Z2Z2B12NELSE/XI1XI2时,YI1YI1的情况IFB12Z2SETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20FX1ELSEPDCSETPIXELX1,Y,RGB10,20,20PDCSETPIXELX2,Y1,RGB10,20,20YY1Z2Z2B1NELSEIF2B1Z2SETPIXELX1,Y,RGB10,20,20Z2Z2B1FX1毕业论文参数曲线的快速生成算法27ELSEIF2B1Z2NIFFY1PDCSETPIXELX1,Y1,RGB10,20,20FX1ELSEPDCSETPIXELX1,Y,RGB10,20,20PDCSETPIXELX2,Y1,RGB10,20,20YY1Z2Z2B1NELSE/XI1XI2时,YI1YI2的情况IFFY1PDCSETPIXELX,Y,RGB10,20,20PDCSETPIXELX1,Y1,RGB10,20,20PDCSETPIXELX2,Y2,RGB10,20,20YY2Z2Z2B12NXX2Z1Z1A12NFY0A1A1A2A2A2A3B1B1B2B2B2B3下图为程序运行后绘制的三次BEZIER图形毕业论文参数曲线的快速生成算法2835普通参数曲线方程的编程实现普通参数曲线方程的编程实现普通参数曲线方程的编程实现普通参数曲线方程的编程实现上一小节的程序通过使用双步逐点算法实现了绘制三次BEZIER曲线,为了体现双步逐点曲线生成算法的广泛适用性,本小节将讨论使用双步逐点算法实现绘制一个普通参数曲线方程012233012233YTYTYTYTGYXTXTXTXTFX0T1,其中方程参数X3,X2,X1,X0,Y3,Y2,Y1,Y0为控制点坐标,可以由自己随机选取。根据上述算法的讨论,首先应该先求出该曲线的最佳的N值。由前面的讨论可知,N值应该满足条件N1T0MAXTF,为了求出最佳的N值,只要求出TF的最小上界即可。下面我们来求出其最小上界。对于曲线012233XTXTXTXTF,TF的最小上界应该出现在FT的极值点处或曲线的端点处,即参数T0或T1处,因此应该求出TF在曲线的两端点处和其在两端点之间的极值点处的函数值,并将其中的最大者作为其最小上界。由于我们采用了求函数的最大极值作为其上界,因此它是最小上界,因为该上界就在曲线上,如果它再小一点则必有曲线上的一点大于它。对曲线FT求导得,FT3X3T22X2TX1毕业论文参数曲线的快速生成算法29要求FT的极值点就要将其对T再次求导并令其导数为0,得FT6X3T2X20得T323XX,因此,F323XX3X3323XX22X2323XXX1X13223XX当T0时,FTX1当T1时,FT3X32X2X1根据以上的讨论我们可得到该参数曲线的实现程序,以下的这段程序代码为实现程序中的开始一段代码,程序中剩下部分的代码为循环画点的FOR循环语句,与上一小节的程序中的FOR循环语句代码相同,在这里就不再写出。VOIDDRAWCURVEINTX0,INTX1,INTX2,INTX3,INTY0,INTY1,INTY2,INTY3,CDCPDCLONGN,NLONGF0,F1,F2,F3,G0,G1,G2,G3LONGA1,A2,A3,B1,B2,B3LONGM,T/计算NX的值LONGNXLABSX1LABS3X32X2X1LABSX1LABS3X32X2X1TX2/3X3IFT0/计算NX的值LONGNYLABSY1LABS3Y32Y2Y1LABSY1LABS3Y32Y2Y1TY2/3Y3IFT0NXNXNYNY/求最佳的N值NNXNYNXNY/将N值减小1/2毕业论文参数曲线的快速生成算法30NN1/使F0,F1,F2,F3,G0,G1,G2,G3都为整数NNNN/计算当T0,T1/N,T2/N,T3/N时F与G的值F0NX0F1X3NX2NNX1NNNX0F28X34NX22NNX1NNNX0F327X39NX23NNX1NNNX0G0NY0G1Y3NY2NNY1NNNY0G28Y34NY22NNY1NNNY0G327Y39NY23NNY1NNNY0/A1,A2,A3和B1,B2,B3分别表示F和G的一、二、三阶差分A1F1F0A2F22F1F0A3F33F23F1F0B1G1G0B2G22G1G0B3G33G23G1G0LONGXX0,YY0LONGZ10,Z20INTFX0,FY0PDCSETPIXELX,Y,RGB10,20,20该程序剩下的代码在此省略,请参考上一小节的程序代码。其中,该函数的的参数X0,X1,X2,X3,Y0,Y1,Y2,Y3由程序运行后在对话框中输入,其对话框如下图毕业论文参数曲线的快速生成算法31在上述对话框中输入控制点的坐标值后,点击OK按钮即可观看到生成的参数曲线,如下图所示。36使用双步逐点曲线生成算法需要注意的一个问题使用双步逐点曲线生成算法需要注意的一个问题使用双步逐点曲线生成算法需要注意的一个问题使用双步逐点曲线生成算法需要注意的一个问题在上述对话框中输入控制点参数时要注意一个问题,即X3和Y3的值不能为0,如果X3和Y3之中任何一个取值为0,则在程序运行时将会出现错误。为什么会出现错误呢因为我们在前面讨论求最佳的N值的时候,要求N值必须满足条件N1T0MAXTF,因此我们需要对函数FT进行再次求导并令其为0,然后求出其极值点,对于曲线012233XTXTXTXTF,我们求出其一阶导函数FT3X3T22X2TX1的的极值点为T323XX,观察T的值即可发现T的分母为3X3,这就说明对于此方程,X3不可以为0,同理,Y3也不可以为0,否则程序运行就时会出现错误。实际上当X3和Y3为0时,该曲线012233XTXTXTXTF已经不是三次曲线了,而变成了二次曲线FT0122XTXTX,我们需要对其重新计算讨论其最佳的N值。在下面的一章中还会讨论到类似的问题。毕业论文参数曲线的快速生成算法32第四章第四章第四章第四章导师所给的曲线方程的研究导师所给的曲线方程的研究导师所给的曲线方程的研究导师所给的曲线方程的研究41通过在屏幕上鼠标点击若干点然后绘制曲线通过在屏幕上鼠标点击若干点然后绘制曲线通过在屏幕上鼠标点击若干点然后绘制曲线通过在屏幕上鼠标点击若干点然后绘制曲线参数曲线SU1K2UU2A01K4U2U2B04U4U2111KIIIKB12U3U2BKU2BK1,I1,2是导师所给的一条曲线方程,其中的A0,B0,BI,BK,BK1为方程的控制点,并且由于在方程中存在表达式111KIIIKB,所以该方程的控制点的数目并不是确定的,而且方程中K的值也随控制点的数目变化而变化。针对这条曲线导师要求我做到如下两点1,通过在屏幕上用鼠标左键点击若干点作为该曲线的控制点,然后点击鼠标右键自动完成曲线绘制;2,通过在对话框中输入5个控制点的坐标画出该曲线。关于第二个问题,我们将在下一小节中讨论,本小节我们将重点讨论第一个问题。对于上述曲线,可以将其展开成如下的参数曲线形式SXU1K2UU2XA1K4U2U2X04U4U2111KIIIKX12U3U2XKU2XK1,I1,2SYU1K2UU2YA1K4U2U2Y04U4U2111KIIIKY12U3U2YKU2YK1,I1,2我们仍然先讨论SXU的情况,对于SYU可以同理得到。为了方便讨论,先将曲线SXU转换成如下的形式SXU1KXA21KX03XKXK14111KIIIKXU21KXA41KX02XK4111KIIIKXUBK,I1,2通过上述转换之后,可以发现该曲线实际上是以U为参数的二次曲线,因为控制点为A0,B0,BI,BK,BK1,所以可以知道K的值为所有的控制点数减去3。由于控制点的数目不确定,所以需要在程序中使用一个循环语句来完成表达式4111KIIIKX的计算。当控制点的数目确定了之后,随之K的值也可以确定,因此整个曲线方程即可确定,就可以使用前面讨论的双步逐点算法编程完成此曲线的绘制。根据上一章最后一小节的讨论,我们已经知道了如何使用双步算法生成参数曲线毕业论文参数曲线的快速生成算法33012233XTXTXTXTF,并可以通过在对话框中直接输入X3,X2,X1,X0以Y3,Y2,Y1,Y0的值而完成曲线的绘制。而本小节所讨论的曲线SXU当控制点的数目确定后即可展开成如曲线FT的形式,因此理论上可以先求出SXU的二次项U2和一次项U的系数即1KXA21KX03XKXK14111KIIIKX和1KXA41KX02XK4111KIIIKX以及常数项BK的值,然后将其做为FT的系数X2,X1,X0并以X3的值为0传递给曲线FT的实现程序来完成曲线SXU的绘制。而实际上,在上一章最后一小节的讨论中,曾论述过曲线FT的系数X3与Y3不可以为0,否则程序运行会产生错误。所以,我们构想首先使用双步逐点算法编程实现二次参数曲线01220122YTYTYTGYXTXTXTFX0T1,的快速生成,然后用已经计算出来的二次项U2和一次项U的系数以及常数项BK的值作为二次曲线的系数X2,X1,X0传递给绘制二次曲线的实现程序来完成SXU曲线的绘制。现在来讨论如何实现二次参数曲线的快速生成。对于上述的二次参数曲线,仍然先讨论FT的情况,GT则同理可得。首先,我们应该先求出其最佳的N值。由前面的讨论可知,N值应该满足条件N1T0MAXTF,为了求出最佳的N值,只要求出TF的最小上界即可。下面来求出其最小上界。对于函数0122XTXTXTF,对其求导得FT2X2TX1,所以TF的最小上界应该出现在曲线FT的的端点处,即当参数T0或T1处,因此应该以TF在曲线的两端点处的函数值中的大者作为其最小上界。于是当T0时,FTX1当T1时,FT2X2X1根据以上的讨论以及前一章中对三次BEZIER曲线的实现程序的描述,同理可得到该算法的实现程序,以下的这段程序代码为该算法实现程序中的开始一段,程序中剩下部分的代码为循环画点的FOR语句,与上一章中所给出BEZIER曲线的实现程序中的FOR循环语句代码相同,在这里就不再写出。部分程序代码VOIDCBIYESHEJIVIEWPOINTTOCURVEINTX0,INTX1,INTX2,INTY0,INTY1,INTY2,INTXFIRST,INTYFIRST,CDCPDCLONGN,NLONGF0,F1,F2,F3,G0,G1,G2,G3LONGA1,A2,A3,B1,B2,B3LONGNX,NYNXX12X2X1X12X2X1NYY12Y2Y1X12Y2Y1/求得最佳的N值毕业论文参数曲线的快速生成算法34NNXNYNXNY/将N值减小1/2NN1NNNF0NX0F1X2NX1X0NNX0F24X22NX1NNX0F39X23NX1NNX0G0NY0G1Y2NY1Y0NNY0G24Y22NY1NNY0G39Y23NY1NNY0A1F1F0A2F22F1F0A3F33F23F1F0B1G1G0B2G22G1G0B3G33G23G1G0LONGXXFIRSTLONGYYFIRSTLONGZ10,Z20INTFX0,FY0PDCSETPIXELX,Y,RGB10,20,20该程序剩下的代码在此省略现在回过头来看看要完成的第一个要求通过在屏幕上用鼠标点击若干点作为该曲线的控制点,然后点击鼠标右键自动画成曲线。因此当在屏幕上点了若干个点之后,实际上曲线SXU的控制点A0,B0,BI,BK,BK1即可确定下来了,随之K的值也就可以确定(即控制点的数目减去3)。因为在程序中需要使用这些控制点的坐标值,最好的办法就是在程序中定义一个数组来保存这些点的坐标值。而在VC中可以很方便的使用MFC中的数组摸板类CARRAY来创建一个CPOINT类型的数组,其语句为CARRAYARR1,创建了数组ARR1之后,就可以在用鼠标左键单击画点的同时并将该点的坐标值存入树组ARR1中,以方便后边计算使用。当各控制点的坐标值被存入树组之后,就可以很方便地通过使用一个FOR循环语句完成表达式4111KIIIKX的计算,并能够在程序中计算出曲线的二次项和一次项的系数以及常数项BK的值从而得到SXU的确定的表达式。为了方便编写程序,SXU以如下形式展开SXU1KXA21KX03XKXK14111KIIIKXU21KXA41K毕业论文参数曲线的快速生成算法35X02XK4111KIIIKXUBK,I1,2,然后利用数组中存储的A0,B0,BI,BK,BK1的值,编写如下的代码来计算SXU与SYU的U2和U的系数以及常数项BK的值,并将其作为曲二次曲线01220122YTYTYTGYXTXTXTFX的系数X2,X1,X0,Y2,Y1,Y0传递给上述的实现程序从而完成参数曲线SU的绘制。该段代码为鼠标左击画点的函数VOIDCBIYESHEJIVIEWONLBUTTONDOWNUINTNFLAGS,CPOINTPOINTIFISHAVEPOINTFALSERETURN/在画点的同时将该点的坐标存入数组ARR1中ARR1ADDPOINTCDCPDCGETDCPDCSETPIXELPOINTX,POINTY,RGB255,0,0CVIEWONLBUTTONDOWNNFLAGS,POINT该段代为鼠标右击生成曲线的函数代码。VOIDCBIYESHEJIVIEWONRBUTTONDOWNUINTNFLAGS,CPOINTPOINTINTPOINTCOUNT,I,K,N2,N1,N0,M1,M2,M0INTJ,P/得到控制点的数目POINTCOUNTARR1GETSIZE/计算K的值KPOINTCOUNT3/计算表达式4111KIIIKX的值FORI1,J0IK1IJJINTPOW1,KIARR1I1XFORI1,P0IK1IPPINTPOW1,KIARR1I1Y/分别计算SXU与SYU的二次项、一次项的系数以及常数项的值M2INTPOW1,KARR10X2INTPOW1,KARR11X3ARR1POINTCOUNT2XARR1POINTCOUNT1X4JM1INTPOW1,KARR10X4INTPOW1,KARR11X2ARR1POINTCOUNT2X4J毕业论文参数曲线的快速生成算法36M0ARR1POINTCOUNT2XN1INTPOW1,KARR10Y4INTPOW1,KARR11Y2ARR1POINTCOUNT2Y4PN2INTPOW1,KARR10Y2INTPOW1,KARR11X3ARR1POINTCOUNT2YARR1POINTCOUNT1Y4PN0ARR1POINTCOUNT2YCDCPDCGETDC/调用二次参数曲线的实现函数POINTTOCURVEM0,M1,M2,N0,N1,N2,ARR11X,ARR11Y,PDCCVIEWONRBUTTONDOWNNFLAGS,POINT程序运行后的效果如下42通过在对话框中输入控制点的坐标画曲线通过在对话框中输入控制点的坐标画曲线通过在对话框中输入控制点的坐标画曲线通过在对话框中输入控制点的坐标画曲线本小节的任务是通过在对话框中输入5个控制点的坐标来画出该曲线。由于已经规定好曲线SU1K2UU2A01K4U2U2B0毕业论文参数曲线的快速生成算法374U4U2111KIIIKB12U3U2BKU2BK1,I1,2有五个控制点,所以得到曲线方程中K的值为2。因此可将该曲线进行展开得到如下形式的曲线方程SXU4X1X3XA2X03X2U22XA4X04X1X2UX2SYU4Y1Y3YA2Y03Y2U22YA4Y04Y1Y2UY2由于上述方程中的XA,X0,X1,X2,X3和YA,Y0,Y1,Y2,Y3的值由对话框中输入,所以可以很容易计算出SXU与SYU中的U2、U的系数以及X2、Y2的值,并做为上一小节提到的曲线方程01220122YTYTYTGYXTXTXTFX的系数X2,X1,X0,Y2,Y1,Y0传递给其实现程序中即可。下图是输入控制点坐标的对话框点击确定按钮后的生成的参数曲线图与上一小节最后所示的效果图相似,在此就不在贴出。毕业论文参数曲线的快速生成算法38第五章第五章第五章第五章结论结论结论结论在前面所讨论的双步逐点曲线生成算法,围绕了最佳步长的选择进行讨论,并重点论述了在使用双步算法时,如何计算得到因N值减小一半后而可能被漏掉的像素点。该算法基本上达到了逐点、快速生成参数曲线的要求。在前面的章节中我们曾分别以三次BEZIER曲线,普通的三次参数曲线以及导师给我的那个特殊的二次参数曲线为例并且以通过在对话框中输入不同的方程系数来实现不同的曲线方程为例,编程实践了该双步算法算法。程序运行时都能够快速、较准确地完成曲线的绘制,表明该算法还是可行的。由于时间与本人的能力所限,本算法仅以二次和三次参数曲线为例进行讨论实践,没有对更高次的参数曲线进行编程实践,所以其效果也不能说一定很好,在以后的时间里我会把这一部分的算法实践给补上以完善此算法,为此次毕业设计画上一个完整的句号。毕业论文参数曲线的快速生成算法39第六章第六章第六章第六章个人小节个人小节个人小节个人小节在做毕业设计的两个多月时间里,通过对参数曲线生成算法的研究使我学习到了有关计算机图形学与图象处理的一些知识,并对以前学习过的C语言进行了很好的复习与巩固,使自己的编程能力有了进一步的提高,同时,对VISUALC60这个强大的开发工具进行了系统的学习,使自己能够较好的使用VC编写一些功能简单的应用程序。通过做毕业设计,我想自己最大的收获就是分析解决问题的能力提高了。在做毕业设计的过程中,曾遇到了许多不懂的问题,在通过查找资料、认真分析以及求助于导师和同学后都将问题一一化解,在这个过程中,自己的分析问题与解决问题的能力都在逐渐提高。这对我以后走向工作岗位都会有极大的帮助。同时,通过这次的毕业设计,我深深体会到了计算机科学的博大精深,从事计算机行业一定要具备刻苦与钻研,思考与创新的素质,我自己也会更加努力争取能在计算机领域中做出自己的成就。附本毕业设计的完成离不开老师的指导与同学的帮助,在此特别感谢林意林意林意林意导师以及其他曾帮助过我的同学。毕业论文参数曲线的快速生成算法40第七章第七章第七章第七章附录附录附录附录英文资料英文资料英文资料英文资料HOWTOGETCURRENTCDOCUMENTORCVIEWFROMANYWHERESUMMARYINAMICROSOFTFOUNDATIONCLASSESMFCWINDOWSBASEDAPPLICATION,ITISOFTENUSEFULTOBEABLETOGETAPOINTERTOTHECURRENTLYACTIVEDOCUMENTORVIEWFROMANYWHEREINTHEPROGRAMFOREXAMPLE,BEINGABLETOACCESSTHECURRENTDOCUMENTFROMADIALOGBOXISSOMETIMESUSEFULTHISARTICLEDISCUSSESTHESIMPLESTMETHODSFORDOINGSO,USINGTHERELATIONSHIPSBETWEENMFCOBJECTS,ANDBASICMFCARCHITECTURECVIEWTHISCLASSPROVIDESTHEBASICFUNCTIONALITYFORUSERDEFINEDVIEWCLASSESAVIEWISATTACHEDTOADOCUMENTANDACTSASANINTERMEDIARYBETWEENTHEDOCUMENTANDTHEUSERTHEVIEWRENDERSANIMAGEOFTHEDOCUMENTONTHESCREENORPRINTERANDINTERPRETSUSERINPUTASOPERATIONSUPONTHEDOCUMENTAVIEWISACHILDOFAFRAMEWINDOWMORETHANONEVIEWCANSHAREAFRAMEWINDOW,ASINTHECASEOFASPLITTERWINDOWTHERELATIONSHIPBETWEENAVIEWCLASS,AFRAMEWINDOWCLASS,ANDADOCUMENTCLASSISESTABLISHEDBYACDOCTEMPLATEOBJECTWHENTHEUSEROPENSANEWWINDOWORSPLITSANEXISTINGONE,THEFRAMEWORKCONSTRUCTSANEWVIEWANDATTACHESITTOTHEDOCUMENTAVIEWCANBEATTACHEDTOONLYONEDOCUMENT,BUTADOCUMENTCANHAVEMULTIPLEVIEWSATTACHEDTOITATONCEFOREXAMPLE,IFTHEDOCUMENTISDISPLAYEDINASPLITTERWINDOWORINMULTIPLECHILDWINDOWSINAMULTIPLEDOCUMENTINTERFACEMDIAPPLICATIONYOURAPPLICATIONCANSUPPORTDIFFERENTTYPESOFVIEWSFORAGIVENDOCUMENTTYPEFOREXAMPLE,AWORDPROCESSINGPROGRAMMIGHTPROVIDEBOTHACOMPLETETEXTVIEWOFADOCUMENTANDANOUTLINEVIEWTHATSHOWSONLYTHESECTIONHEADINGSTHESEDIFFERENTTYPESOFVIEWSCANBEPLACEDINSEPARATEFRAMEWINDOWSORINSEPARATEPANESOFASINGLEFRAMEWINDOWIFYOUUSEASPLITTERWINDOWTOUSECVIEW,DERIVEACLASSFROM

温馨提示

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

评论

0/150

提交评论