上机实验4:自由曲线和曲面的绘制
《自由曲线与曲面》PPT课件

7.6 B样条曲线
• Gordon和Riesenfeld于1974年用B样条基函数代替了Bernstein基函数,构造了B样条 曲线。
• 比Bezier曲线更贴近控制多边形,曲线更光滑(很容易产生C2连续性),曲线的次数 可根据需要指定
• 增加了对曲线的局部修改功能,B样条曲线是分段组成的,所以控制多边形的顶点对曲 线的控制灵活而直观。
2.一阶导数
• 将式(7-12)求导,有
n
p' (t) Pi Cni [i t i1 (1 t)ni (n i) t i (1 t)ni1 ] i0 在闭区间〔0,1〕内,将t=0和t=1 代入上式,得到
p' (0) n (P1 P0 ) p' (1) n (Pn Pn1)
可以证明,二次Bezier曲线是一段抛物线。
3.三次Bezier曲线
• 当n=3时,Bezier曲线的控制多边形有四个控制点P0、P1、P2和P3,Bezier曲线 是三次多项式。
3
p(t) Pi Bi,3 (t) (1 t)3 P0 3t(1 t)2 P1 3t 2 (1- t) P2 t3 P3 i0 (t3 3t 2 - 3t 1)P0 (3t 3 6t 2 3t)P1 (3t3 3t 2 ) P2 t3P3
• 通常单一的曲线段或曲面片难以表达复杂的形状,必须将一些曲线段连接成组合曲线, 或将一些曲面片连接成组合曲面,才能描述复杂的形状。
• 为了保证在连接点处平滑过渡,需要满足连续性条件。连续性条件有两种:参数连续 性和几何连续性。
•
参数连续性
• 零阶参数连续性,记作C0,指相 邻两个曲线段在交点处具有相同的 坐标。
菅光宾
数字媒体系
• 7.1 基本概念 • 7.4 Bezier曲线 • 7.5 Bezier曲面 • 7.6 B样条曲线 • 7.7 B样条曲面
机械CAD-CAM(第7章)-自由曲线和自由曲面

《机械CAD/CAM》 第七章自由曲线和自由曲面机电工程学院CIMS应用研究中心张宇Email: zhangyu@曲线和曲面的数学表达 曲线和曲面的数学表达方法: 显式表达:如 y=a0+a1x+a2x2+a3x3 隐式表达:如 a1x3+a2x2y+a3xy2+a4y3=0 参数表达:如 P(t) = [x(t), y(t), z(t)]P(t) P(u, v)2011-3-15昆明理工大学机电工程学院CIMS中心 张宇2曲线和曲面的数学表达 为什么采用参数方程描述自由曲线和自由曲面? 所描述的曲线/曲面形状与坐标系的选取无关。
参数方程中,代数、几何相关和无关的变量是完全分 离的,且对变量的个数无限制,便于把低维空间中的 曲线/曲面扩展到高维空间。
采用参数求导便于处理斜率无穷大的问题,且采用程 序处理时不会因此而中断计算。
规格化的参数变量 t∈[0,1],使其相应的几何分量是 有界的,不需要另设其他参数来定义其边界。
有更大的自由度来控制曲线/曲面的形状。
易于用向量和矩阵表示几何分量,简化计算。
2011-3-15昆明理工大学机电工程学院CIMS中心 张宇3几个基本术语2011-3-15 点: 构造曲线/曲面的最基本的几何元素。
常用的点有型值点、控制点(特征点)和插值点。
插值: 函数逼近的重要方法。
插值要求严格通过预先给定的各个型值点。
逼近: 寻找一个函数,使其最佳逼近各个型值点。
逼近不要求严格通过各型值点,但要求是对所有型 值点的最佳逼近。
最小二乘法是最常用的逼近方法。
昆明理工大学机电工程学院CIMS中心 张宇4插值与逼近f(x) 插值点给定的型值点g(x) 给定的型值点2011-3-15昆明理工大学机电工程学院CIMS中心 张宇插值 逼近5几个基本术语 光顺: 使构造的曲线/曲面光滑且无多余的拐点。
相对光顺的条件:曲线具有二阶几何连续、不存在多余的拐点和奇 异点、曲率变化较小。
《自由曲线与曲面》课件

课件演示流程及时间安排
开场介绍:5分钟 添加标题
自由曲线与曲面的生成方法: 自由曲线与曲面的优化与改
15分钟
进:10分钟
添加标题
添加标题
提问与互动:5分钟 添加标题
添加标题
自由曲线与曲面的基本概念: 10分钟
添加标题
自由曲线与曲面的应用实例: 10分钟
添加标题 总结与展望:5分钟
课件素材及资源获取方式
结论与展望
课件页码及内容安排
• 封面:标题、作者、日期 • 目录:列出所有章节和页码 • 引言:介绍自由曲线与曲面的背景和重要性 • 第一章:自由曲线与曲面的定义和分类 • 第二章:自由曲线与曲面的性质和特征 • 第三章:自由曲线与曲面的表示方法 • 第四章:自由曲线与曲面的应用实例 • 结论:总结自由曲线与曲面的重要性和应用价值 • 参考文献:列出参考的书籍、论文和网站 • 致谢:感谢指导老师和同学的帮助 • 封底:结束语和版权声明
单击此处添加副标题
自由曲线与曲面PPT课件
大纲
汇报人:
目录
01 02 03 04 05 06
添加目录项标题 课件简介 课件内容 课件结构 课件效果 总结评价
01
添加目录项标题
02
课件简介
课件背景
自由曲线与曲面是数学和计算机图形学中的重要概念 课件旨在帮助学生理解自由曲线与曲面的基本概念、性质和应用 课件内容涵盖了自由曲线与曲面的定义、分类、性质、表示方法、计算方法、应用实例等 课件适合数学、计算机科学、工程学等专业的学生和教师使用
课件目的
讲解自由曲线与曲面的生成 方法
介绍自由曲线与曲面的基本 概念和性质
探讨自由曲线与曲面的应用 领域
提高学生理解和应用自由曲 线与曲面的能力
自由曲线和自由曲面

x x(t)
y
y(t)
(7.1)
z z(t)
为便于计算机处理,曲线上一点常用其位置向量表示,如下所示:
P(t) x(t) y(t) z(t)
(7.2)
通常,通过对参数变量的规格化,使参数 t 在闭区间[0,1]内变化(写成t 0 1),并对此区间内的
参数曲线进行研究。
用参数方程描述自由曲线具有以下优点: ● 所描述的曲线形状与坐标系的选取无关。例如,如果通过一系列型值点拟合一条曲线或由一系列控 制点(或特征点)定义一条曲线,曲线的形状仅取决于这些点本身之间的关系,而与这些点所在的坐标系无 关。
● 规格化的参数变量 t 0 1,使其相应的几何分量是有界的(即表示曲线是有界的),不需要另设
其他参数来定义其边界。
● 有更大的自由度来控制曲线、曲面的形状。如一条二维三次曲线的显式表示为: y a0 a1x a2x2 a3x3
其中只有 4 个系数用来控制此曲线的形状。而该曲线的参数表示为:
1. 点 点是构造曲线和曲面的最基本的几何元素,在曲线和曲面构造中常用的点有型值点、控制点(特征点) 和插值点,如 6.1 节所述。
2. 插值 插值是函数逼近的重要方法。其原理是:
设函数 f (x) 在区间[ a, b ]上有互异的 n 个型值点 f (xi ) ( i 1, 2, 3, , n ),基于这个列表数据,寻求 某个函数(x) 去逼近 f (x) ,使 (xi ) f (xi )( i 1, 2, 3, , n ),则称(x) 为 f (x) 的插值函数, xi 为插值 节点。
● 参数方程中,代数、几何相关和无关的变量是完全分离的,并且不限制变量的个数,便于用户把低 维空间中的曲线或曲面扩展到高维空间。这种变量分离的特点使得人们可以用数学公式去处理几何分量,如 本章随后使用到的调和函数就具有此特点。
第4章自由曲线和曲面

用插值或逼近来构造曲线的方法通称为曲线拟合 方法。
2020/4/6
计算机图形学演示稿 纪玉波制作
3
(C)
4.1.3 参数连续性条件(Parameter continuity conditions) 0阶导数连续性,记作C0连续,是指曲线相连。即第
计算机图形学演示稿 纪玉波制作
18
(C)
2020/4/6
Hermit三次曲线2绘制演示
计算机图形学演示稿 纪玉波制作
19
(C)
2020/4/6
计算机图形学演示稿 纪玉波制作
20
(C)
Hermit三次曲线算法主要实现子程序实例
void HermitCurve(HDC hdc)
{
int i; //8个型值点坐标
如果是平面曲线,则只有x和y分量。
2020/4/6
计算机图形学演示稿 纪玉波制作
15
(C)
例:给定8个型值点,其中起始点和终止点是同一 个点,从而其特征多边形是一个首尾相接的封闭多边形, 具体坐标位置如下:
(100,300),(120,200),(220,200),(270,100), (370,100),(420,200),(420,300),(100,300).
1.样条曲线(spline curve ) 在计算机图形学中,术语样条曲线指由多项
式曲线段连接而成的曲线,在每段的边界处满足 特定连续条件。而样条曲面可用两组正交样条曲 线来描述。样条用来设计曲线和曲面形状,典型 的CAD应用包括汽车、飞机和航天飞机表面设计 以及船壳设计。
第4章 自由曲线与曲面建模

x = at3 + bt2 + ct + d y = et3 + ft 2 + gt + h
其中有8个系数可用来控制曲线的形状。
(7) 易于用矢量和矩阵表示几何量,从而简化了计 算。
曲线曲面 35
CAD/CAM
4.1.2 Hermite曲线
Hermite曲线是给定曲线段的两个端点坐标以 及两端点处的切线矢量来描述曲线。空间一 条三次参数曲线可以表示为:
曲线曲面 31
CAD/CAM
曲线和曲面的参数表示
在解析几何中,空间曲线上一点P的每个 坐标被表示成参数化u的函数:
同样在三维空间内一张任意曲面可用带参 数u、v的参数方程表示为:
曲线曲面 32
CAD/CAM
如下图所示,曲面有两族参数曲线r (u,vj)和r (ui,v),通常简称u线和v线,u线 与v线的交点是r(ui,vj)。
曲线曲面 15
CAD/CAM
M文件
• clc
• clear
• [th,r]=meshgrid((0:5:360)*pi/180,0:. 05:1); %在极坐标系下设置一个 73×21的网格矩阵,
• [X,Y]=pol2cart(th,r); %转化为笛卡儿 坐标系%
• Z=X+i.*Y;
• F=abs((Z.^4-1).^(1/4)); • surf(X,Y,F); %显示曲面的立体图形
构造曲面的方法:首先通过一系列离散 点确定一组曲线(称为控制曲线),再由这 些曲线构造要求的曲面。
曲线曲面 26
CAD/CAM
第4章 自由曲线与自由曲面建模
曲面建模——自由曲面的创建学习教案

打开(dǎ kāi)本书光盘提供的素材文件 5-3-1-z wqx-sc .prt
1
单击“曲面”工具条中的“直纹”按 钮,打 开“直 纹面” 对话框
2
第13页/共40页
第十四页,共40页。
选择一条(yī tiáo)曲线(在此曲线的左边单击),曲 线被选 取后会 显示曲 线方向 标志
2.构造曲面的曲线应尽可能的简单(jiǎndān),以便后 续的工作。
3.构造曲面的曲线(qūxiàn)应尽可能的光顺连续。
4.在建模时,应首先根据产品的外形要求,建立用于构 造曲面的边界曲线,或者根据实际的测量数据生成点, 然后根据点生成产品所需的曲面。
第3页/共40页
第四页,共40页。
曲面(qūmiàn)命令
曲面(qūmiàn)建模——
1
第一页,共40页。
5.1 曲面(qūmiàn)基础
基本(jīběn)术语
首先我们来熟悉一下在曲面构造(gòuzào)过程中经常遇到 的一些术语。
自由曲面:由自由曲面形状特征创建的曲面即是“自由曲 面”,自由曲面可由“点”“线”和“面”创建或 延伸得到。 片体:是一种UG术语,用于和“实体”对应,“片 体”和“实体”都是由一个或多个表面组成的几何体 ,厚度为“0”的是片体,不为“0”的是“实体” 。
4
在弹出“指定点”对话框后分别单击 步骤(bùzhòu)1中设定 的每个 链的第 一个和 最后一 个点
5
选取(xuǎnqǔ)曲面的控制点后弹出第 二个“ 过点” 对话框 ,单击 “所有 指定的 点”按 钮,完 成曲面 的生成
第8页/共40页
第九页,共40页。
“从极点”构造(gòuzào)曲面
(计算机图形学)自由曲线曲面

参数连续性,用C 表示 C0连续(0阶参数连续) —— 指曲线相连,前一段曲线的终点
阶数
t=1与后一段曲线的起点t=0相同,即 相邻两段曲线结合点处有相同坐标。
C1连续(一阶参数连续) ——代表两个相邻曲线段的方程在相交
点处有相同的一阶导数(切线)。 (一阶导数反映了曲线对参数 t 的变 化速度)
B2,3(t)ຫໍສະໝຸດ Ot4个基函数
7.2.2 Bernstein基函数及曲线的性质
Bi ,n (t ) n! i i t i (1 t ) ni C n t (1 t ) ni i!(n i)!
t∈〔0,1〕(i=0,1,2……n) ,t∈〔0,1〕
1.非负性: Bi,n (t ) 0
void CTestView::DrawBezier()//绘制Bezier曲线 { CDC *pDC=GetDC(); CPen NewPen,*pOldPen; NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));//曲线颜色 pOldPen=pDC->SelectObject(&NewPen); pDC->MoveTo(P[0]); for(double t=0.0;t<=1.0;t+=0.01) { double x=0,y=0; for(int i=0;i<=n;i++) { x+=P[i].x*C(n,i)*pow(t,i)*pow(1-t,n-i); y+=P[i].y*C(n,i)*pow(t,i)*pow(1-t,n-i); } pDC->LineTo(Round(x),Round(y)); } pDC->SelectObject(pOldPen); NewPen.DeleteObject(); ReleaseDC(pDC); }
计算机图形学第4章 自由曲线与曲面2

(1) P3 Q0 (2) 0 P3 P2 (Q1 Q0 )
三点共线,且Q1,P2在连接点的异侧
二阶几何连续条件?
自学
21
4.6 Bezier曲线
反求控制顶点
给定n+1个型值点,要求构造一条Bezier曲线通过这些点
Q0 P0 ... 0 n 1 n 1 n (i / n) ... PnCn (i / n) n Qi P0Cn (1 i / n) P 1C n (1 i / n) ... Qn Pn
17
4.6 Bezier曲线
二次Bezier曲线
n=2,抛物线 P(0)=P0,P(1)=P2; P'(0)=2(P1- P0), P'(1)=2(P2- P1) P(1/2)=[P1+ (P0+ P2)/2]/2
P1
P(0.5)
P(0)
P0
M
P2
P(1)
说明二次Bezier曲线在 t=1/2 处的点经过P0P2 上 的中线P1M的中点。
优于Bezier曲线之处:
26
4.7 B样条曲线
三次B样条曲线对三次Bezier曲线进行改进, 它克服了Bezier曲线的不足,同时保留了 Bezier曲线的直观性和凸包性,是一种工程设 计中更常用的拟合曲线。
三次B样条曲线的构造:
由前面可知,三次参数曲线可以表示成: P(t)=F0,3(t)P0 + F1,3(t)P1 + F2,3(t)P2 + F3,3 (t)P3 F0,3(t) ,F1,3(t) ,F2,3(t) ,F3,3 (t)是待定参数 P2 P1 P(t) 由P0,P1,P2,P3确定 Q(s) 由P1,P2,P3,P4确定 P3 P4
机械CAD-CAM(第7章)-自由曲线和自由曲面

《机械CAD/CAM》 第七章自由曲线和自由曲面机电工程学院CIMS应用研究中心张宇Email: zhangyu@曲线和曲面的数学表达 曲线和曲面的数学表达方法: 显式表达:如 y=a0+a1x+a2x2+a3x3 隐式表达:如 a1x3+a2x2y+a3xy2+a4y3=0 参数表达:如 P(t) = [x(t), y(t), z(t)]P(t) P(u, v)2011-3-15昆明理工大学机电工程学院CIMS中心 张宇2曲线和曲面的数学表达 为什么采用参数方程描述自由曲线和自由曲面? 所描述的曲线/曲面形状与坐标系的选取无关。
参数方程中,代数、几何相关和无关的变量是完全分 离的,且对变量的个数无限制,便于把低维空间中的 曲线/曲面扩展到高维空间。
采用参数求导便于处理斜率无穷大的问题,且采用程 序处理时不会因此而中断计算。
规格化的参数变量 t∈[0,1],使其相应的几何分量是 有界的,不需要另设其他参数来定义其边界。
有更大的自由度来控制曲线/曲面的形状。
易于用向量和矩阵表示几何分量,简化计算。
2011-3-15昆明理工大学机电工程学院CIMS中心 张宇3几个基本术语2011-3-15 点: 构造曲线/曲面的最基本的几何元素。
常用的点有型值点、控制点(特征点)和插值点。
插值: 函数逼近的重要方法。
插值要求严格通过预先给定的各个型值点。
逼近: 寻找一个函数,使其最佳逼近各个型值点。
逼近不要求严格通过各型值点,但要求是对所有型 值点的最佳逼近。
最小二乘法是最常用的逼近方法。
昆明理工大学机电工程学院CIMS中心 张宇4插值与逼近f(x) 插值点给定的型值点g(x) 给定的型值点2011-3-15昆明理工大学机电工程学院CIMS中心 张宇插值 逼近5几个基本术语 光顺: 使构造的曲线/曲面光滑且无多余的拐点。
相对光顺的条件:曲线具有二阶几何连续、不存在多余的拐点和奇 异点、曲率变化较小。
自由曲线-自由曲面设计

若令 d k x
n
a
j 0
m
k 0
i k
Si ,
d
k 0
n
i yk xk Ti;则可得方程组: k
j
S i j Ti
这里有m+1个方程,可以解出m+1个系数未知数 a0,a1,…am,代入定义即可求出多项式F(x)逼近已知 的n个型值点;
一组实验数据: x 0 10 20 30 40
多项式拟合最小二乘法
设已知型值点为(xi,yi)(i=1,2,…n),现构造一个 m(m<n-1)次多项式函数y=F(x)逼近这些型值点; 逼近的好坏可用各点偏差的加权平方和来衡量:
(a0 , a1 ,..., am ) d k [ F ( xk ) yk ]2
k 0 n
F ( x) a j x j 使得偏 令F(x)为一个m次多项式,
j 0
m
差平方和 达到极小;
最小二乘法解决逼近问题
根据求极值问题的方法可知,使 (a j ) 达到极小的 a j (j=0,1…,m)必须满足下列方程组:
n m i 2 d k a j xkj y k xk 0 ai k 0 j 0
i 0,1,..... m
1972年,德布尔(de Boor)给出了B样条的标准计算 方法;
1974年,通用汽车公司的戈登(Gordon)和里森费尔 德(Riesenfeld)在B样条理论的基础上,提出了B样 条曲线、曲面;
1975年,美国的佛斯普里尔(Versprill)提出了有理B 样条方法; 80年代后期,美国的皮格尔(Piegl)和蒂勒(Tiller)将 有理B样条发展成非均匀有理B样条(NURBS)方法;
自由曲线和曲面 图形学 孔令德 计算机图形学基础教程 大学课件98页PPT文档

下面用已知条件求出Hermite曲线段的参数方程
11
通常用三次参数方程描述空间一条自由曲 线:
x(t) y(t)
axt3 ayt3
bxt2 byt2
cxt cyt
dx dy
,t∈[0,1]
z(t) azt3 bzt2 czt dz
其中,t为参数,且0<=t<=1时,t=0对应曲线段的起点,t =1时,对应曲线段的终点。
以直线为例:已知直线的起点坐标P1(x1,y1) 和终点坐标P2(x2,y2),直线的显式方程:
yy1yx22 xy11(xx1)
9
直线的隐函数方程表示为:
f(x)yy1y x2 2 x y1 1(xx1)0
直线的参数方程表示为:
yxyx11
(x2 (y2
d
t∈〔0,1〕;
13
7.1.3 拟合和逼近
• 型值点 指通过测量或计算得到的曲线或曲面上少量描述曲线或 曲面几何形状的数据点。
• 控制点
指用来控制或调整曲线(面)形状的特殊点(不一定在曲线上)
• 插值点 求给定型值点之间曲线(面)上的点 要求建立的曲线与曲面数学模型,严格通过已知的每一
自由曲线曲面——
无法用标准方程描述的曲线曲 面,通常由一系列实测数据点 确定。如汽车的外形曲线曲面、 等高线等。
3
图7-1 汽车的曲面
4
7.1 基本概念
7.1.1 样条曲线曲面 7.1.2 曲线曲面的表示形式 7.1.3 拟合和逼近 7.1.4 连续性条件
07第07章 自由曲线和自由曲面

二.参数方程规格化处理(规范法表示)
1. 规格化的原因
① 研究范围:我们不可能,也没有必要去研 究的整条曲线 t '[ ] ,而往往只对 其中的一部分感兴趣 t '[a b] 。 便于计算机数据处理:为了便于计算机数 据处理,对参数变量 t ' 的取值范围进行 规格化变换,使 t '[a b] 变换成 t [0 1] 闭区间内。
埃尔米特曲线(Hermite) 贝塞尔曲线(Bezier) B样条曲线
计算机辅助设计基础及应用 第七章 自由曲线和自由曲面
7.2.1 埃尔米特曲线(Hermite)
概述
大多数CAD系统用三次参数曲线描述 自由曲线,这是因为三次参数曲线已 足以保证相连曲线的一阶、二阶导数 连续。 另外,由于高于三次的参数曲线的计 算费时,且曲线上任何一点几何信息 的变化都可能导致曲线形状发生复杂 的变化,因此,工程上一般采用不高 于三次的参数曲线。
汽车的曲面
计算机辅助设计基础及应用 第七章 自由曲线和自由曲面
飞机的曲面
计算机辅助设计基础及应用 第七章 自由曲线和自由曲面
本章要点 1. 了解自由曲线的数学表达方式 2. 了解自由曲线中的一些基本术语
控制点、型值点、插值点 插值、逼近、光顺、拟合
3.
掌握埃尔米特曲线(Hermite)、贝塞 尔曲线(Bezier)、 B样条曲线的数 学机理和特点
a0 a0 x
a2 a2 x a2 y a3 a3x a3 y
a1 a1x
a0 y
a0 z
P(t ) 称为曲线上任意 一点的坐标矢量
a1y
a2 z a3z
a1z
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机图形学课程实验 报 告实验题目 自由曲线和曲面的绘制 班 级 计算081 姓 名 杨 恒 学 号 3080811017 指导教师 胡钢 日 期 2011.6.3西安理工大学理学院应用数学系二零一一年春季学期信息与计算科学专业基础课 Computer GraphicsReport Of course experiment实验说明实验目的:掌握自由曲线和曲面(包括Bezier 曲线、曲面和B 样条曲线、曲面)的生成算法思想,并能上机编程绘制相应的曲线、曲面和利用曲线、曲面进行简单的几何造型设计。
实验地点: 教九楼401 数学系机房实验要求(Direction): 1.每个学生单独完成;2.开发语言为TurboC 或C++,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5. 自己保留一份可执行程序,考试前统一检查和上交。
实验内容实验题一1.1实验题目上机编写一个能绘制Bezier 曲线和B 样条曲线的通用程序,并调试成功。
具体要求为:(1)用户在运行程序时,可以根据提示信息来决定选择绘制Bezier 曲线,还是B 样条曲线;(2)两种曲线控制顶点的个数和坐标值要求可以随机输入(即Bezier 曲线和B 样条曲线的次数和位置可以随机输入);(3)当用户输入控制点的坐标位置后,屏幕上生成曲线的同时显示其特征多边形;且在特征多边形的顶点处输出该顶点坐标;(4)要求在可执行程序后附上运行结果(两种曲线都至少附上一个结果图)。
自由曲线和曲面的绘制实验41.2实验目的和意义掌握Bezier曲线和B样条曲线的绘制方法。
1.3程序制作步骤(包括算法的基本思想、流程图、设计步骤等)一、基本思想(1)Bezier曲线:是由一组折线来定义的,且第一个点和最后一个点在曲线上,第一条和最后一条折线分别表示出曲线在起点和终点处的切线方向。
Bezier曲线通常由(n+1)个顶点定义一个n次多项式,曲线上各点参数方程式是P(t)=∑P ini=0B i,n(t)其中,参数t的取值范围是[0,1],i是有序集0~n中的一个整数值,n是多项式次数,也是曲线次数,通常由n+1个顶点确定的曲线为n次曲线。
P i是低i个顶点的坐标值(x或y),B i,n(t)是Berstein多项式,其定义如下:B i,n(t)=C n i t i(1−t)n−i其中C n i=n!i!(n−i)!(2)B样条曲线:B样条曲线段是由若干条曲线段光滑连接而成的。
首先定义B 样条曲线段。
设给定n+1个型值点,用P i表示(i=0,1,2,…,n)。
把n次参数曲线段:P(t)=∑P ini=0F i,n(t)叫做B样条曲线段。
与Bezier曲线类似,依次用线段连接P i中相邻两个型值点所得的折现多边形称为B特征多边形。
F i,n(t)=1n!∑(−1)j C n+1j(t+n−i−j)n n−ij=0B样条函数式中0≤t≤1,i=0,1,…,n。
二、设计步骤Step1:选择Bezier或B样条曲线绘图;Step2:若选择用Bezier曲线绘图,输入控制顶点个数,依次输入控制顶点坐标P i;若选择用B样条曲线绘图,输入B样条曲线段次数,输入控制顶点个数,依次输入控制顶点坐标P i;Step3:则将t [0,1]区间剖分成m 等分,对于每一个t i ,i=0,1,…,m ,根据式(1)或(2)都可以计算出一个P(t i ),计算所有的P(t i )。
Step4:依次连接每个P(t i ),就得到Bezier 或B 样条曲线。
三、流程图图 1.11.4主程序#include<iostream>NY输入Bezier 顶点个数n 和顶点坐标p开始结束输入choiceChoice==0输入B 样条曲线段次数,输入顶点个数n 和顶点坐标p求t i求P(t i )依次连接每个P(t i )画出控制多边形标出各点坐标#include<cmath>#include"graphics.h"using namespace std;#define pi 3.1415926/************** 二维点类**********************/class Point{public:double x;double y;Point(int x=0,int y=0) //构造函数{this->x = x;this->y = y;};void operator=(Point &a) //重载=运算符{x=a.x;y=a.y;};Point operator*(double a) //重载*运算符{return Point(a*x,a*y);};Point operator+(Point a) //重载+运算符{return Point(x+a.x,y+a.y);};void operator+=(Point a) //重载+=运算符{x+=a.x;y+=a.y;};};/********************* 基本的函数**************************///求阶乘long int Factorial(int n){int i,sum=1;if(n==0)return 1;for(i=2;i<=n;i++)sum *= i;return sum;}//求Bernstein基函数double Bernstein(int i,int n,double t){return (double)Factorial(n)/Factorial(i)/Factorial(n-i)*pow(t,i)*pow(1-t,n-i); }//求B_SplineBase基函数double B_SplineBase(int i,int n,double t){double sum = 0; int j;for(j=0;j<=n-i;j++){sum+=pow(-1,j)*Factorial(n+1)/Factorial(j)/Factorial(n+1-j)*pow(t+n-i-j,n);}return sum/Factorial(n);}/********************* 曲线**************************///求Bezier曲线void Bezier(Point p[],int pn,int m){//将t【0,1】分成多少等分mdouble h = 1.0/m;double t = 0;int i,j;int *pB = (int *)malloc(sizeof(int)*(2*m+2));Point ptemp(0,0);for(j=0;j<=2*m+1;j+=2,t+=h){ptemp.x = 0;ptemp.y = 0;for(i=0;i<pn;i++){ptemp += p[i]*Bernstein(i,pn-1,t);}pB[j] = ptemp.x;pB[j+1] = ptemp.y;}drawpoly(m+1,pB);}//求B样条曲线void B_Spline(Point p[],int pn,int n,int m) //pn为p中点个数,n为次数,m为t的等分数{double h = 1.0/m;double t = 0;int i,j,k;int *pB = (int *)malloc(sizeof(int)*(2*m+2));Point ptemp(0,0);for(k=0;k<=pn-n-1;k++) //是由pn-n个n次拼接而成{t = 0;for(j=0;j<=2*m+1;j+=2,t+=h){ptemp.x = 0;ptemp.y = 0;for(i=0;i<=n;i++){ptemp += p[k+i]*B_SplineBase(i,n,t);}pB[j] = ptemp.x;pB[j+1] = ptemp.y;}drawpoly(m+1,pB);}}//画控制多边形void drawControlPoly(Point *p,int pn){setlinestyle(DASHED_LINE,0,0);int i; char str[60];for(i=0;i<pn-1;i++){line(p[i].x,p[i].y,p[i+1].x,p[i+1].y);sprintf(str,"%c%d%c%d%c",'(',(int)p[i].x,',',(int)p[i].y,')');outtextxy(p[i].x,p[i].y,str);}sprintf(str,"%c%d%c%d%c",'(',(int)p[i].x,',',(int)p[i].y,')');outtextxy(p[i].x,p[i].y,str);setlinestyle(SOLID_LINE,0,0);}/************************主函数***********************/void main(){int gd,gm,i,choose,n,pn; char str[60];detectgraph(&gd,&gm);/********************** 测试曲线************************/ setcolor(RED);//Point p[] = {Point(0,0),Point(100,100),Point(200,100),Point(300,0)};cout<<"***********************************"<<endl;cout<<"*** 输入0: Bezier曲线" <<endl;cout<<"*** 输入1: B样条曲线" <<endl;while(1){cin>>choose;if(choose==1){break;}else if(choose==0){break;}cout<<"输入错误,请重新输入:";}if(choose==1){cout<<"输入B样条曲线段次数:";cin>>n;}cout<<"输入控制顶点个数: ";cin>>pn;Point *p = new Point[pn];cout<<"输入控制顶点:"<<endl;for(i=0;i<pn;i++){cout<<"输入p"<<i+1<<":";cin>>p[i].x>>p[i].y;initgraph(&gd,&gm,""); //图形模式初始化setcolor(GREEN);if(choose==0)Bezier(p,pn,100); //画Bezier曲线elseB_Spline(p,pn,n,100); //画B样条曲线setcolor(WHITE);drawControlPoly(p,pn); //画出控制多边形settextstyle(0,0,2);if(choose==0){sprintf(str,"%s%d%s","您所画的是:",pn-1," 次Bezier曲线");outtextxy(p[pn-1].x+200,p[0].y,str);}else{sprintf(str,"%s%d%s","您所画的是:",n," 次B样条曲线");outtextxy(p[pn-1].x+200,p[0].y,str);}sprintf(str,"%s%d","您所用控制顶点个数为:",pn);outtextxy(p[pn-1].x+200,p[0].y+textheight("2"),str);outtextxy(p[pn-1].x+200,p[0].y+2*textheight("2"),"控制顶点坐标分别为"); for(i=0;i<pn;i++){sprintf(str,"%d%s%d",(int)p[i].x," ",(int)p[i].y);outtextxy(p[pn-1].x+230,p[0].y+(i+3)*textheight("2"),str);getch();closegraph();}1.5运行结果图图 1.2图 1.3实验题二2.1实验题目1).利用Bezier 曲线及其拼接技术设计花瓶几何图案(注意:使用Bezier 曲线时曲线的次数不要超过10次)。