- 1、本文档共142页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CG教案7-2曲线曲面
* * 用Hartley-Judd方法,即所画曲线段对应的控制多边形的长度与总控制多边形的长度之比确定节点参数。 计算出节点参数后,就可以用前述的递归函数计算基函数Ni,K(u)的值,得到基函数的值,就可以代入曲线方程计算各段曲线上的点。 图7-22 不过点非均匀B样条曲线 * * 对于闭合曲线,n个数据点画n段曲线,需n+1个节点参数曲线;首尾各添加3个节点参数,共n+7个节点参数。由于不过点闭合曲线,不通过控制多边形的首末点,全部节点参数为: U0=0U1U2UKUK+1…Un+3Un+4Un+5Un+6=1 各节点的参数值采用Hartley-Judd方法。计算出节点参数后,就可以计算基函数Ni,K(u)的值,然后用曲线方程计算各段曲线上的点。 * * 对于过点曲线,给定的数据点Pi (i=0,1,…,n-1)是曲线上的点。由曲线方程知,必须先计算出节点参数,再计算基函数Ni,K(u)的值,代入曲线方程,才能反算出控制多边形的顶点: n个数据点,反求出n+2个控制顶点,画n-1段曲线,需n个节点参数;首尾各添加3个节点参数,一共需要n+6个节点参数值;在曲线首端重3段曲线首段的长度,在曲线的末端重3段曲线末段的长度。所有节点参数为: U0=0U1U2UKUK+1…Un+2Un+3Un+4Un+5=1 i=1,2,……,n+5, L为包含附加段在内的总长。 (2)过点三次非均匀B样条曲线 * * 根据节点矢量计算基函数Ni,K(u)的值,代入曲线方程可以计算n个已知的曲线上的点,得如下方程: 写成矩阵形式如下: 对于开口曲线,d0=P0, dn+1=Pn-1,上述方程组是“追赶法”能够求解的三对角方程。求出d0,d1,……,dn,dn+1共n+2个控制顶点,即可以画出n-1曲线。 (闭合曲线省略) * * wi,i=0,1,…,n称为权因子; Ni,K(u)是B样条的基函数 有理B样条曲线 非均匀B样条考虑节点分布不匀称的影响,但与所有已介绍的计算曲线一样,非均匀B样条不能精确表达二次曲线曲面,采用有理B样条,可以统一表达自由曲线曲面和二次曲线曲面。 有理B样条曲线的表达式为: 当Ni,K(u)是均匀基函数时,p(u)为均匀有理B样条曲线; 当Ni,K(u)是非均匀基函数时,p(u)为非均匀有理B样条 (Non-Uniform Rational B-Spline ,简称NURBS)曲线; 通过合理的定义权系数,NURBS曲线能够精确地描述二次圆锥曲线。目前已纳入到产品形状定义的工业标准之中。 * * 曲线设计方法的关键在于基函数的选择,选择合适的基函数能够使系数矢量具有更明确的几何意义,绘图操作简单直观。 基函数和参数化方法的选择对曲线的精度、光顺性、局部修改性具有决定性的影响。 整个曲线设计方法的改进方向是在提高精度、保证光顺性的同时追求灵活的操作、明确的几何意义和良好的局部修改性。 曲线设计结论: * * 7.6 用OpenGL生成曲线和曲面 OpenGL中绘制Bezier曲线曲面是通过定值器完成的。 (参考 /OpenGL/credbook/evaluator.html ) 1. 定义定值器 指定定值器类型,每个方向的起止范围、次数(控制点数),每个方向步进一个单位对应的浮点值个数,控制点清单。 如 glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4,ctrlpoints[0][0]); 2. 打开定值器 void glEnable(定值器类型); 3. 引用定值器? glEvalCoord (Ui, Vi); 当前生成的点的值域注意与1.中取得一致,如果总的值域为[0,1],则100个点组成的曲线上第i点的值域为(1-0)*i/100。 * * 3阶B-样条基函数图形 * * [t0,t1] [t1,t2] [t2,t3] [t3,t4] [t4,t5] 区间 1阶基函数 2阶基函数 3阶基函数 4阶基函数 5阶基函数 节点矢量:由于每个基函数Ni,k需要的支撑区间是[ti,ti+k+1],考虑基函数的下标从0开始到n,所以节点矢量为[t0,tn+k+1]。 递推计算 * * B-样条曲线的定义 共n-k+2段 有效区间:[ti,ti+1]区间上定义k个非零基函数(Ni-k+1,k~Ni,k) 因此,有效区间的下标应满足i=k-1; 与控制点对应,有效基函数下标应满足:i=n。 故:总有效区间为[tk-1,tn+1]。 * * 3阶B样条曲线示例 T=[t0,t1,…,tn+1,tn+2,tn+3] * * B-样
文档评论(0)