Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc

上传人:wj 文档编号:6865446 上传时间:2023-05-07 格式:DOC 页数:6 大小:297KB
下载 相关 举报
Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc_第1页
第1页 / 共6页
Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc_第2页
第2页 / 共6页
Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc_第3页
第3页 / 共6页
Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc_第4页
第4页 / 共6页
Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc_第5页
第5页 / 共6页
Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc

《Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc(6页珍藏版)》请在冰点文库上搜索。

Bezier曲线和样条曲线的生成算法Word文档下载推荐.doc

2、编程实现在屏幕上绘制出光滑连接的三次B样条曲线。

三、关键算法及实现原理

1、二次Bezier曲线的计算公式为:

P(t)=(P0-2P1+P2)t2+(-2P0+2P1)t+P0

X(t)=(X0-2X1+X2)t2+(-2X0+2X1)t+X0

Y(t)=(Y0-2Y1+Y2)t2+(-2Y0+2Y1)t+Y0

其中P0、P1、P2为三个已知的点,坐标分别为(X0、Y0)、(X1、Y1)、(X1、Y2)。

2、次Bezier曲线的计算公式为:

P(t)=(-P0+3P1-3P2+P3)t3+(3P0-6P1+3P2)t2+(-3P0+3P1)t+P0

X(t)=(-X0+3X1-3X2+X3)t3+(3X0-6X1+3X2)t2+(-3X0+3X1)t+X0

Y(t)=(-Y0+3Y1-3Y2+Y3)t3+(3Y0-6Y1+3Y2)t2+(-3Y0+3Y1)t+Y0

其中P0、P1、P2、P3为四个已知的点,坐标分别为(X0、Y0)、(X1、Y1)、(X1、Y2)、(X3、Y3)。

3、三次B样条函数绘制曲线的计算公式为:

P(t)=[(-P0+3P1-3P2+3P3)t3+(3P0-6P1+3P2)t2+(-3P0+3P2)t+(P0+4P1+P2)]/6

X(t)=[(-X0+3X1-3X2+3X3)t3+(3X0-6X1+3X2)t2+(-3X0+3X2)t+(X0+4X1+X2)]/6

Y(t)=[(-Y0+3Y1-3Y2+3Y3)t3+(3Y0-6Y1+3Y2)t2+(-3Y0+3Y2)t+(Y0+4Y1+Y2)]/6

4、三次B样条函数绘制曲线的光滑连接条件为:

对于N个顶点,取P1、P2、P3、P44个顶点绘制在第一段三次样条曲线,再取P2、P3、P4、P54个顶点绘制在第二段三次样条曲线,总计可绘制n-3段光滑连接的三次样条曲线。

5、程序设计方法

根据Bezier曲线的定义,输入Bezier曲线的特征多边形(例如三次Bezier曲线输入四个型值点),然后把t从0~1分成n等分,按相应的Bezier曲线公式计算出Bezier曲线上的点,用绘直线段的方法依次这些点连接起来,就得到Bezier曲线。

如果要画多段Bezier曲线,可设置一些变量存放Bezier曲线的条数,按条数依次绘制出来即可。

四、程序调试中的问题

1、注意选项中路径要改。

2、在turboc2中加载displaytou头文件

五、程序运行结果或数据

1、绘制二次Bezier曲线的源程序

#include"

display.h"

voidBezier_2(intcolor,doublep[3][2])

{doublet,xt,yt;

intrate=200,x,y;

setcolor(color);

moveto(p[0][0],p[0][1]);

for(t=0;

t<

=1;

t+=1.0/rate)

{yt=1-t;

xt=p[0][0]*yt*yt+p[1][0]*2*yt*t+p[2][0]*t*t;

yt=p[0][1]*yt*yt+p[1][1]*2*yt*t+p[2][1]*t*t;

x=(int)(xt);

y=(int)(yt);

lineto(x,y);

}

}

voidmain(void)

{staticdoublep[3][2]={50,400,340,20,635,420};

constN0=3;

inti;

Initialize();

setcolor(WHITE);

for(i=1;

i<

N0;

i++)lineto(p[i][0],p[i][1]);

Bezier_2(LIGHTRED,p);

while(getch()!

=ESC);

closegraph();

2、实现光滑连接的三次B-样条曲线源程序

#include"

graphics.h"

conio.h"

#include<

dos.h>

voidB_yt_3(int[][2],intcolor,inttzb);

voidtulie(int,int,int);

voidxuehaopri(intcolor);

voidmain()

{intgdriver=DETECT,gmode;

intp[8][2]={{30,350},{90,110},{250,260},{390,90},{490,110},

{530,370},{600,230},{550,110}};

initgraph(&

gdriver,&

gmode,"

D:

\\tc\\bgi"

);

xuehaopri(14);

tulie(2,4,15);

B_yt_3(p,4,0);

getch();

closegraph();

voidB_yt_3(intp[][2],intcolor,inttzb)

{

floatt=0;

intxt,yt,i,m;

setlinestyle(0,0,1);

setcolor(15);

delay(1000);

if(tzb==1)

for(i=0;

7;

i++)

line(p[i][0],p[i][1],p[i+1][0],p[i+1][1]);

setcolor(color);

for(m=0;

m<

5;

m++)

for(t=0;

=1.0;

t+=0.01)

xt=1.0/6*((-p[m][0]+3*p[m+1][0]-3*p[m+2][0]+p[m+3][0])*t*t*t+

(3*p[m][0]-6*p[m+1][0]+3*p[m+2][0])*t*t+

(-3*p[m][0]+3*p[m+2][0])*t+(p[m][0]+4*p[m+1][0]+p[m+2][0]));

yt=1.0/6*((-p[m][1]+3*p[m+1][1]-3*p[m+2][1]+p[m+3][1])*t*t*t+

(3*p[m][1]-6*p[m+1][1]+3*p[m+2][1])*t*t+

(-3*p[m][1]+3*p[m+2][1])*t+(p[m][1]+4*p[m+1][1]+p[m+2][1]));

if(t==0)moveto(xt,yt);

lineto(xt,yt);

delay(15);

voidxuehaopri(intcolor)

settextstyle(1,0,3);

settextjustify(1,1);

outtextxy(getmaxx()/2,15,"

MadeByNo.010XXX"

voidtulie(intcolor1,intcolor2,inttextcolor)

intx=getmaxx()/2,y=getmaxy()-20;

moveto(x-180,y);

setcolor(color1);

setlinestyle(0,0,3);

lineto(x-155,y);

setcolor(color2);

moveto(x,y);

lineto(x+25,y);

setcolor(textcolor);

settextstyle(0,0,1);

outtextxy(x-80,y,"

2ciB_yangtiao"

六、实验收获及体会

1、了解Bezier曲线和B样条曲线的参数表示法。

2、用三次Bezier曲线绘制和分段光滑Bezier曲线图形的绘制。

3、了解二次bezier曲线和三次bezier曲线的算法。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2