- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验七三次B样条曲线及算法实现
实验七 三次B样条曲线的算法实现
一、实验目的
根据B样条曲线的基础知识,对3次均匀B样条曲线算法进行程序设计,验证算法的正确性,并修改程序,加深对B样条曲线数学模型的理解。
二、实验任务(2学时)
B样条曲线的程序设计。
三、实验内容和实验步骤
1.算法
从三次B样条曲线的定义可知:当p=3时,
Ci,3(t)=∑Pi+l Nl,3(t)= Pi N0,3(t)+ Pi+1 N1,3(t)+ Pi+2 N2,3(t)+ Pi+ 3 N3,3(t)
因为四个调和函数N0,3(t)、N1,3(t)、N2,3(t)和N3,3(t) 已知(参看教材P138-139)因此只要给出四个控制点的位置矢量的坐标,当t在[0,1]范围内取离散的100个点时(dt=0.01),分别求出每一个曲线上点,相邻点用直线段连接起来,就可以得到相应的B样条曲线。
设控制点的个数为PointNum,要求PointNum≥4,则可以生成(PointNum-3)段三次B样条曲线。其中第i段三次B样条曲线的代数形式为:
Ci,3(t)x= Pi x N0,3(t)+ P (i+1) x N1,3(t)+ P (i+2) x N2,3(t)+ P (i+3) x N3,3(t)
Ci,3(t)y= Pi y N0,3(t)+ P (i+1) y N1,3(t)+ P (i+2) y N2,3(t)+ P (i+3) y N3,3(t)
其中,i=1,2,…, PointNum-3
2.程序实现如下:(工程名:BSpring)
(1)将调和函数定义为成员函数,函数形式如下:
double CBSpringView::N03(double t)
{
return ((-pow(t,3)+3*pow(t,2)-3*t+1)/6);// pow()函数:求x的y次方(次幂)
}
double CBSpringView::N13(double t)
{
return ((3*pow(t,3)-6*pow(t,2)+4)/6);
}
double CBSpringView::N23(double t)
{
return ((-3*pow(t,3)+3*pow(t,2)+3*t+1)/6);
}
double CBSpringView::N33(double t)
{
return (pow(t,3)/6);
}
(2)编写OnDraw()函数,程序如下:
int n,m,pointnum,i,j;
int x[10],y[10],curx,cury; //(x[i],y[i])为顶点坐标
double t,dt;
CPen PenRed(PS_SOLID,1,RGB(255,0,0));//定义红色笔
CPen PenBlue(PS_SOLID,1,RGB(0,0,255));//定义蓝色笔
n=3; pointnum=5; //5个顶点,则绘制(5-3)=2段B样条曲线
x[1]=10;y[1]=200;x[2]=40;y[2]=100;x[3]=100;y[3]=100;
x[4]=150;y[4]=150;x[5]=150;y[5]=200;
//绘出特征多边形
pDC-SelectObject(PenBlue);
pDC-MoveTo(x[1],y[1]);
for (i=2;i=pointnum;i++)
pDC-LineTo(x[i],y[i]);
//绘制B样条曲线
m=pointnum-n; dt=0.01;
pDC-SelectObject(PenRed);
for (i=1;i=m;i++) //绘制m条(段)B样条曲线
{
t=0;
for (j=0;j=100;j++) // 绘制每一条(段)B样条曲线
{
curx=N03(t)*x[i]+N13(t)*x[i+1]+N23(t)*x[i+2]+N33(t)*x[i+3];
cury=N03(t)*y[i]+N13(t)*y[i+1]+N23(t)*y[i+2]+N33(t)*y[i+3];
if (j==0)
pDC-MoveTo(curx,cury);
else
{
pDC-LineTo(curx,cury);
t+=dt;
}
}
}
(3)编译程序,查看运行结果。
3.思考
上述程序5个控制顶点,自行修改程序,增加顶点数目分别至6个、7个、8个及9个。
3
l =0
您可能关注的文档
- 实验7聚合物及热重分析TGA.doc
- 实验8指针参考结果解析.doc
- 实验8存储论问题及编程实现.doc
- 实验9磁带录像机原理使用及保养.doc
- 实验9脉冲波形参数及自动测试系统实验报告091228.doc
- 实验一8位加法器及设计.doc
- 实验一不可逆单闭环直流调速系统静特性及研究.doc
- 实验一MATLAB方法实现信号波形和微分方程及建立及求解.doc
- 实验一信号及基本操作及处理附思考题程序.doc
- 实验一典型环节及动态特性.doc
- 2026届高考物理一轮复习课件:1.1+运动的描述.pptx
- 高中语文统编版必修下册《与妻书》课件-2024-2025学年高一语文下学期.pptx
- 1.3《庖丁解牛》课件-2024-2025学年统编版高一语文必修下册 (1).pptx
- 2.1.1+等式的性质与方程的解集(同步课件)数学沪教版2020高一必修第一册.pptx
- 第04讲+图文对应关系(复习课件)(全国通用)2026年高考语文一轮复习讲练测.pptx
- 13.3+电磁感应现象及应用-2025-2026学年高二物理同步备课(人教版2019必修第三册).pptx
- 读后续写+课件+-2026届高三英语上学期一轮复习专项.pptx
- 数列探究课+斐波那契数列与黄金分割比+课件-2024-2025学年高二上学期数学人教A版(2019)选择性必修第二册.pptx
- 第03讲++完形填空——夹叙夹议文(复习课件)(全国通用)2026年高考英语一轮复习讲练测.pptx
- 2026届高考英语读后续写之实现舞台演唱梦+课件.pptx
文档评论(0)