1、 毕毕 业业 设设 计计 论论 文文 论文题目:论文题目:参数曲线的快速生成算法参数曲线的快速生成算法 毕业论文:参数曲线的快速生成算法 1 摘摘 要要 本毕业设计主要研究参数曲线的直接快速生成,要直接生成参数曲线就需对参数方 程x=f(t),y=g(t),(0t1)的参数 t 每次增加一个步长,然后计算该点的 x 和 y坐标值并 绘制该点。要逐点地生成参数曲线,就要求参数 t 每次增加的步长要使曲线前进的幅度 不得超过一个象素长度,否则有可能跨过一个中间象素而产生断点。 为了提高曲线生成算法的速度,本毕业设计针对如何选择最佳的步长进行比较讨 论,以使曲线前进的幅度在不超过一个象素的前提下,选
2、择尽量大的步长。为了进一步 提高算法的速度,在前面讨论的最佳步长的基础上又采用了双步逐点曲线生成算法,即 将上述得到的步长增加一倍,以使算法的循环次数减少一半。由于步长增加一倍,这样 当曲线前进一步时,其幅度有时会大于一个象素的长度,这时我们通过插值的方法来确 定跨过的那个中间象素。 通过上述讨论的算法能够比较快速的逐点生成曲线,为了实现上述算法,本毕业设 计 使 用Visual C+6.0为 工 具 并 以 三 次Bezier曲 线 、 普 通 参 数 曲 线 x=f(t)=X3t3+X2t2+X1t+X0, y=g(t)=Y3t3+Y2t2+Y1t+Y0, 以及导师所给的一个特殊的曲线方
3、程为例编程实现上述算法。 关键词关键词:参数曲线,逐点,双步,Visual C+6. 0 作者: 二零零三年 六月 毕业论文:参数曲线的快速生成算法 2 Abstract This graduation project main reseach the direct born of the parameter curve x=f(t),y=g(t),00;而对于直线下方的点 F(x,y)labs(x3-x2)?labs(x1-x0):labs(x3-x2); V=x2-2*x1+x0; W=x3+3*(x1-x2)-x0; T=-V/W; if(T0 if(Mnx) nx=M; /计算 ny的
4、值 long ny=labs(y1-y0)labs(y3-y2)?labs(y1-y0):labs(y3-y2); V=y2-2*y1+y0; W=y3+3*(y1-y2)-y0; T=-V/W; if(T0 if(Mny) ny=M; nx=u*nx;ny=u*ny; n=nxny?nx:ny; /将 n的值减小 1/2 n=n1; /使 f0, f1, f2, f3,g0,g1,g2,g3 都为整数 N=n*n*n; /计算当 t=0,t=1/n,t=2/n,t=3/n时 f 与 g的值 f0=N*x0; f1=x0*(n-1)*(n-1)*(n-1)+3*x1*(n-1)*(n-1)+3
5、*x2*(n-1)+x3; f2=x0*(n-2)*(n-2)*(n-2)+6*x1*(n-2)*(n-2)+12*x2*(n-2)+8*x3; f3=x0*(n-3)*(n-3)*(n-3)+9*x1*(n-3)*(n-3)+27*x2*(n-3)+27*x3; g0=N*y0; g1=y0*(n-1)*(n-1)*(n-1)+3*y1*(n-1)*(n-1)+3*y2*(n-1)+y3; g2=y0*(n-2)*(n-2)*(n-2)+6*y1*(n-2)*(n-2)+12*y2*(n-2)+8*y3; g3=y0*(n-3)*(n-3)*(n-3)+9*y1*(n-3)*(n-3)+27
6、*y2*(n-3)+27*y3; / a1,a2,a3 和 b1,b2,b3 分别表示 f和 g的一、二、三阶差分 a1=f1-f0; a2=f2-2*f1+f0; a3=f3-3*f2+3*f1-f0; b1=g1-g0; b2=g2-2*g1+g0; b3=g3-3*g2+3*g1-g0; long x=x0,y=y0; long z1=0,z2=0; /画曲线的第一个点 int fx=0,fy=0; pDC-SetPixel(x,y,RGB(10,20,20); /循环画点 for(int i=0;iSetPixel(x-1,y-1,RGB(10,20,20); pDC-SetPixel(x-2,y-2,RGB(10,20,20); y=y-2; z2=z2-b1-2*N; else /xi+1=xi-2 时 yi+1=yi-1 的情况 if(b1-2*z2SetPixel(x-1,y-1,RGB(10,20,20); fx=1; else pDC-SetPixel(x-1,y,RGB(10,20,20);