- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机图形学2010_04样条曲线
第四章 样条曲线
第一节 样条曲线基础
一、概念
曲线:连续光滑的曲折线段。
规则曲线:可以用一个方程式进行表示。如圆、椭圆、抛物线、双曲线、正弦余弦曲线等。
不规则曲线:不能用方程式进行表示。
样条曲线是用于表示不规则曲线的一种方法,其多段规则曲线对不规则曲线进行表示,并保证各段曲线连接处的连续和光滑。
二、样条线段的表示方式
1. 参数方程
规则曲线通常用显示或隐式方程来表示。如抛物线表示成:,这是显示方程;圆表示成:,这是隐式方程。
样条曲线中的分段曲线通常采用参数方程表示,其一般形式如下:
如抛物线的参数方程为:
圆的参数方程为:
2. 参数方程的矢量表示
对多项式参数方程,通常采用矢量表示方式。
如二次曲线表示为:
其中:
该表达式相当于:
三、样条曲线的定义方式
样条曲线通过一组点定义。
用于定义样条曲线的点有两种:
型值点:曲线上的点,样条曲线必须通过型值点。
控制点:用于控制曲线形状的点,曲线本身不通过控制点。
第二节 二次插值样条曲线
一、单段二次样条曲线的建立
二次样条曲线由若干段依次相连的二次曲线段组成。
这里首先讨论整个样条曲线上单段二次曲线的建立。
二次曲线的一般表达式:
确定出A1,A2,A3三组系数,即确定出了该曲线。
由相邻的三个型值点P1,P2,P3来建立曲线。
P1为曲线段的起点,对应于t=0;
P3为曲线段的终点,对应于t=1;
P2为曲线段的中间点,对应于t=0.5。
有:
这形成三个矢量联立方程:
求解可得:
由此即得到了该段二次样条曲线。
例:对三个型值点(1,1),(5,5),(8,2),生成二次样条曲线。
解:
则二次曲线为:
也即:
三、二次样条曲线的加权合成
合成方式:
(1)依次逐点向后取三点生成单段样条曲线。
(2)除首尾两点外,每相邻两点之间将有两条样条曲线,如下。
(3)将两点之间的样条曲线进行加权合成。
(4)权重的取值原则:越靠近Pi+1点Si的权重越大,越靠近Pi+2点Si+1的权重越大。
推导合成后的曲线形式:
(1)单段二次曲线的表达式
则:
(2) 曲线参数的取值区间
Si曲线对应于合成曲线的ti的取值区间为[0.5,1];
Si+1曲线对应于合成曲线的ti+1的取值区间为[0, 0.5]。
合成曲线的参数记为t,其取值区间确定为[0, 0.5]。
将各曲线的参数统一为t,则有:。
(3) Si,Si+1曲线基于t的表达式
(4)权重
权重的特性:在Pi+1点,Si曲线的权重为1,在Pi+2点Si+1曲线的权重为1,在两点之间线性过度。
权重函数为:
(5)合成曲线的表达式
将权重和两段二次曲线的表达式带入下式:
可得,关于型值点的表达式:
可转换为,关于t的各次方的表达式
按这种合成方式,实质上是由4点确定一段样条曲线,即由Pi,Pi+1,Pi+2,Pi+3四个点,产生出Pi+1至Pi+2之间的曲线段。这样产生的曲线段能保证各段之间光滑连接。
最终的样条曲线是一个三次曲线。
四、端点的处理
按上述合成方式,P1—P2,Pn-1—Pn之间的线段无法合成。
可采用如下简单的处理方法:
P1—P2之间的曲线直接采用P1,P2,P3三点所产生的二次曲线。
Pn-1—Pn之间的曲线直接采用Pn-2,Pn-1,Pn三点所产生的二次曲线。
这两段曲线能够与相邻的曲线保持光滑连接。
五、二次样条曲线总结
给定n个型值点P1,P2,……, Pn可生成各点之间的曲线如下:
Pi+1—Pi+2间的曲线(1≤i≤n-3):
P1—P2间的曲线:
Pn-1—Pn间的曲线:
六、样条曲线的点阵生成
1. t等间隔取点法
等间隔取t值,依次计算所对应的点(x,y),相邻的点之间画直线。
例:按间隔0.2取t值,可得:
t x y 0 1 1 0.2 3 3 0.4 4 5 0.6 6 5 0.8 7 4 1 8 2
2. 对中生成法
void DrawCurve(int x1, int y1, float t1, int x2, int y2, float t2)
//两端点的坐标及对应的t值
{
int x,y;
float t=(t2+t1)*0.5;
int x=(int)(CurveX(t)+0.5);
int y=(int)(CurveY(t)+0.5);
PutPixel(x,y);
if(abs(x-x1)1 | abs(y-y1)1 )
DrawCurve(x1, y1, t1, x, y, t);
if(abs(x2-x)1 | abs(y2-y)1 )
DrawCurve(x, y, t, x2, y2, t2);
}
// CurveX(t), Cur
文档评论(0)