




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
姓名 学号 专业 计算机辅助几何设计期末作业 基于 Bezier 曲线和 B 样条曲线的手绘图 姓名 学号 专业 得分 计算机辅助几何设计 Computer Aided Geometric Design 简称 CAGD 主要研 究在计算机图像系统的环境下对曲线 曲面信息的表示 逼近 分析和综合 它 起源于飞机 船舶的外形放样 Lofting 工艺 随着计算机图形显示对于真实性 实时性和交互性要求的日益增强 计算机辅助几何设计在近几十年来得到了长足 的发展 Bezier 曲线是法国雷诺 Renault 汽车公司的工程师 Bezier 在 1971 年给出的 一种由控制多边形定义曲线的方法 Bezier 曲线具有良好的几何性质 能简洁 清晰地描述和表达自由曲线曲面 在 CAGD 中占有重要的位置 Bezier 曲线的 最大优点之一是 控制点如果构成凸多边形 即控制多边形是凸的 Bezier 曲线 也是凸的 无论在理论上还是应用上 我们都希望曲线整体要达到一定高的光滑 度 当设计一个复杂的曲线曲面时 希望用多张曲面或多条曲线拼接而成 那么 在相接的地方要求光滑 这时就要用到连续性的概念 我们应用 B 样条方法实 现曲线的光滑拼接 B 样条曲线是由许多的多项式曲线段组成 它比 Bezier 曲线 更加灵活通用 本文首先针对 Bezier 曲线的造型问题做了一系列的理论阐述与实践 然后 进一步针对 B 样条曲线的造型问题 从手绘图形中读入数据点集合 i d 将其作 为 de Boor 控制点 进而运用 B 样条方法 输出平滑后的曲线 最后综合运用 Bezier 方法及 B 样条方法开展几何设计 1 Bezier 曲线曲线 1 1 Bezier 曲线的定义曲线的定义 给定个空间向量 则 Bezier 曲线段的n次参数方程表示 如下 1n 0 1 i b in 0 n ii n i p tbBt 0 1 t 1 姓名 学号 专业 式中空间向量是控制多边形的 0 1 i b in 1n 个顶点 i n Bt是 Bernstein 基 函数 有如下形式 1 1 in iin i n n n i Bttttt ii ni 1 in 0 由于 0 n i n i Bt 恰好是二项式 的展开式 从而有 1 ntt 0 1 n i n i Bt 在二维平面中 是平面上的一系列点 t在 0 到 1 之间取值 任意取定 0 之间的某个t可以得到一个 i b 1 p t 即平面上一个点 随着 的不断变化 点也随 之改变 当 从 0 变到 1 时 就得到平面上的一条曲线 该曲线就是 Bezier 曲线 t t 下面用一个例子来解释该方法 给定四点 用下面方法构造一条 曲线 对任意 取 0123 b b b b 0 1 t 1 001 1 11 1 2 1 223 1Bt btbBt btbBt btb1 00 1 211 1 211 112 1Bt BtB Bt BtB 2 1 32 00 1Bt BtB 令 则对 3 0 p tB 0 1 t p t为中的一条曲线 称为基于控制顶点 的Bezier曲线 易知 2 R 0123 b b b b 32 23 012 13 13 1 3 p ttbttbt t bt b 给定四点所得的Bezier曲线如图1所示 0123 b b b b 2 姓名 学号 专业 图1 四个控制点的Bezier曲线 类似于上述例子 现从手绘图形中读入数据点集合 i b 将其作为控制点绘 制图形 如图2所示 图2 更高阶的Bezier曲线 Bezier曲线是图形学中最基本 最重要的内容之一 它广泛应用于二维和三 维图形中 但是如何快速 准确地绘制曲线仍是一个问题 通常的绘制方法是令 取0到1之间不同的值 求出Bezier曲线上的很多点 然后将这些点用小直线 段相连 从而绘出Bezier曲线 t 1 2 Bezier 曲线的递推曲线的递推 de Casteljau 算法算法 根据Bezier曲线的定义确定参数方程绘制Bezier曲线 因其计算量过大 3 姓名 学号 专业 不太适合在工程上使用 但使用德卡斯特里奥 de Casteljau 提出的递推算法则简 单得多 图3 定比分割 如图3所示 设是一条抛物线上顺序三个不同的点 过和点的 两切线交于点 过点的切线交 020 002 b b b 0 0 b 0 2 b 0 1 b 2 0 b 00 01 b b和 00 12 b b于和 则如下比例成立 1 0 b 1 1 b 011201 000011 101021 0 11201 b bb bb b b bb bb b 这就是抛物线的三切线定理 当 固定 引入参数 令上述比值为 0 0 b 0 2 bt 1tt 即有 10 00 1bt b 0 1 tb 10 11 1bt b 0 2 tb 21 00 1bt b 1 1 tb t从0变到1 第一 二式是两条一次Bezier曲线 将第一 二式代入第三式得 2 200 001 12 1bttbtt bt b 20 2 当t从0变到1时 它表示了由三个控制顶点形成的一条二次Bezier 曲线 并且表明 这个二次Bezier曲线 000 012 b b b 2 0 bt可以定义为分别由前两个顶点 和后两个顶点 决定的一次Bezier曲线的线性组合 依次类推 由四个控 制点定义的三次Bezier曲线 00 01 b b 00 12 b b 3 0 bt可被定义为分别由 000 012 b b b和 确定 000 123 b b b 4 姓名 学号 专业 的二条二次Bezier曲线的线性组合 由1n 个控制点 0 0 1 i bin 定义的n次 Bezier曲线可被定义为分别由前 后个控制点定义的两条次Bezier 曲线和 0 n btn1n 1 0 n bt 1 1 n bt 的线性组合 11 00 1 nn btt bttbt 1 n 0 1t 由此得到Bezier曲线的递推计算公式 11 1 1 1 0 1 kkk iii bt btbknin k 这便是de Casteljau算法 用这一递推公式 在给定参数下 求Bezier曲线上一 点 p t非常有效 上式中 是定义Bezier曲线的控制点 即 为曲线 0 0 1 i bin 0 n bt p t上参数为t的点 下面给出一个具体的例子 当 0000 0123 1 1 2 5 6 7 9 3bbbb 时 用de Casteljau算法绘制的Bezier曲线如图4所示 图4 de Casteljau算法绘制Bezier曲线 1 3 Bezier 曲线的升阶公式曲线的升阶公式 假设用上面介绍的方法设计一个n次Bezier曲线 在对多边形多次修改后 可以发现n次曲线不具有充分的灵活性来模拟所要求的形状 在这种情况下 一 个可行的方法就是通过再增加一个顶点来增加多边形的灵活性 增加了一个顶 点 曲线的次数也就增加了1 但仍要求保持曲线的形状不发生改变 因此 我 们要用控制点为的曲线来描述原来顶点为的曲线 为了实现这 0 nbb 1 0 n bb 5 姓名 学号 专业 个目的 考虑如下等式 1 1 00 nn nn i iii ii bBtb Bt 然后通过这个等式找出与的关系 对于等式左边 我们有 ib i b 00 00 11 1 00 1 1 11 11 nn nn iiii ii nn nn iiii ii nn nn iiii ii bB tttbB t bt B tbtB t nii bBtbB nn t 11 11 1 00 1 1 1 0 1 11 1 11 nn nn iiii ii n n iii i nii bBtbB nn nii bbBt nn t 比较参数就可以得到所求的结果 1 1 0 1 11 i ii ii bbbin nn 当原控制点为 时 升阶一次以后 两个控制多边形定义了相 同的Bezier曲线 如图5所示 1 5 9 1 7 8 3 2 图5 升阶 两个多边形定义了相同的三次曲线 2 B 样条曲线样条曲线 虽然Bezier曲线较好地解决了整体形状控制问题 但仍存在连接问题和局 部修改问题 而B样条曲线不仅具有Bezier曲线的几何特征 而且还具有曲线 6 姓名 学号 专业 形状局部可调及连续阶数可调等Bezier曲线所没有的特征 一条B样条曲线由 许多多项式曲线段组成 曲线段可以用de Boor算法进行处理 2 1 C1的二次的二次B样条曲线样条曲线 一条C1的二次B样条曲线是由下面几点定义的 1 每个曲线段的次数小于等于2 2 节点序列 0 l tt 11 1 jjj ttjl 3 de Boor控制点为 101 l dddd l 给定节点序列 通过给定的de Boor控制点计算出满足C1条件的Bezier控制 点 然后运用分段de Casteljau算法 绘制相应的满足C1条件的二次B样条曲线 具体过程如下 1 令 012 ll bdbd 2 令 211 1 jj bdj l 3 令 1 22121 11 1 1 jj jjj jjjj bbbj l l 1 4 对Bezier控制点 运用分段de Casteljau算法 01212 l b bbb 下面给出一个具体的例子 取定 01 l 从手绘图形中读入数据 点集合 1 0 j djl 将其作为de Boor控制点绘制曲线 如图6所示 图6 山峦耸立 2 2 C1的二次的二次B样条闭曲线样条闭曲线 7 姓名 学号 专业 一条C1的二次B样条闭曲线是由下面几点定义的 1 每个曲线段的次数小于等于2 2 节点序列 0 l tt 11 1 jjj ttjl 3 de Boor控制点为 011 l d dd 对于C1的二次B样条闭曲线的情形 我们需要特别注意始 末两点的处理 具体过程如下 1 令 21 0 1 jj bdjl 2 令 01 0221 0101 l ll ll bbbb 1 3 令 1 22121 11 1 1 jj jjj jjjj bbbj l l 1 4 对Bezier控制点 运用分段de Casteljau算法 01212 l b bbb 下面给出几个具体的例子 例例 1 取定 从手绘图形中读入数据点集合 01 l 0 1 j djl 将其作为de Boor控制点绘制闭曲线 如图7所示 从图中可以看出 C1的二次B 样条曲线中可以包含直线段 图7 馒头 例例 2 取定 012 7 2 4 5 8 2 2ddd 012 3 1 3 另外一组取相 同的de Boor控制点 即 012 7 2 4 5 8 2 2ddd 而 012 1 3 1 8 姓名 学号 专业 绘得图形如图8所示 图8 高瘦与矮胖 2 3 C2的三次的三次B样条曲线样条曲线 一条C2的三次B样条曲线是由下面几点定义的 1 每个曲线段的次数小于等于3 2 节点序列 0 l tt 11 1 jjj ttjl 3 de Boor控制点为 101 ll ddd d 给定节点序列 通过给定的de Boor控制点计算出满足C2条件的Bezier控制 点 然后运用分段de Casteljau算法 绘制相应的满足C2条件的三次B样条曲线 具体过程如下 9 姓名 学号 专业 1 令 0110313 llll bdbd bd bd 1 2 令 01 201 d 0101 bd 12 321 1212 ll lll llll bdd 3 令 111 31 11 1 2 jjjjj j jjj dd bj l 121 31 21 2 1 jjjjj j jjj dd bj l 4 令 311 31 3 1 1 1 jjjj j jj bb bj l l 1 5 对Bezier控制点 运用分段de Casteljau算法 01313 l b bbb 下面给出一个具体的例子 取定 01 l 从手绘图形中读入数据 点集合 1 0 1 j djl l 将其作为de Boor控制点绘制曲线 如图9所示 图9 北斗七星 3 绘图实践绘图实践 在上述理论的基础上 笔者开展了一系列的绘图实践 此处 仅以绘制花朵 为例 综合运用上述理论 先用2 2中C1的二次B样条闭曲线的方法绘制花瓣 如图10所示 再用1 2中的de Casteljau算法绘制两条3次Bezier曲线 将其直接 拼接得到叶片 如图11所示 最后再利用Bezier曲线绘制花朵的茎 完整的花朵 便绘制成功了 如图12所示 10 姓名 学号 专业 图10 花瓣 图11 叶片 图12 花朵 11 姓名 学号 专业 附录 Bezier曲线的Matlab程序 function testB0 非升阶 axis 0 10 0 10 hold on x y n 0 while 1 xtemp ytemp button ginput 1 if button 3 break end plot xtemp ytemp x x xtemp y y ytemp n n 1 text xtemp 0 1 ytemp int2str n end myplotB x y k end function myplotB x y str B m length x for t 0 0 01 1 X Y Beziercurve x y t B B X 1 m Y 1 m end plot B 1 B 2 str Linewidth 2 5 hold on X Y Beziercurve x y 0 5 for i 1 m plot X 1 m i 1 i Y 1 m i 1 i plot X 1 m i 1 i Y 1 m i 1 i str for j 1 1 m i 1 text Interpreter latex String b num2str j 1 num2str i 1 Position X j i 0 2 Y j i 0 6 FontSize 16 end end hold off end function X Y Beziercurve x y t m length x n length y if m n error dimension is not match end X zeros m m X 1 x Y zeros m m Y 1 y for r m 1 2 X 1 r 1 m r 2 1 t X 1 r 1 m r 1 t X 2 r m r 1 Y 1 r 1 m r 2 1 t Y 1 r 1 m r 1 t Y 2 r m r 1 end end 12 姓名 学号 专业 附录 Bezier曲线升阶的Matlab程序 function testB 升阶 x 1 9 7 3 y 5 1 8 2 myplotB x y k hold on tx ty shengjie x y myplotB tx ty k end function myplotB x y str B m length x for t 0 0 01 1 X Y Beziercurve x y t B B X 1 m Y 1 m end plot B 1 B 2 str Linewidth 3 hold on X Y Beziercurve x y 0 5 for i 1 plot X 1 m i 1 i Y 1 m i 1 i v plot X 1 m i 1 i Y 1 m i 1 i str for j 1 1 m i 1 text Interpreter latex String b num2str j 1 Position X j i 0 01 max x Y j i FontSize 16 end end hold off end function X Y Beziercurve x y t m length x n length y if m n error dimension is not match end X zeros m m X 1 x Y zeros m m Y 1 y for r m 1 2 X 1 r 1 m r 2 1 t X 1 r 1 m r 1 t X 2 r m r 1 Y 1 r 1 m r 2 1 t Y 1 r 1 m r 1 t Y 2 r m r 1 end end function tx ty shengjie x y m length x tx zeros m 1 1 ty zeros m 1 1 tx 1 x 1 tx m 1 x m ty 1 y 1 ty m 1 y m tx 2 m 1 m 1 m x 1 m 1 1 1 m 1 m x 2 m ty 2 m 1 m 1 m y 1 m 1 1 1 m 1 m y 2 m end 13 姓名 学号 专业 附录 C1的二次B样条Matlab程序 function Testorder2C1 axis 0 10 0 10 hold on x y n 0 while 1 xtemp ytemp button ginput 1 if button 3 break end plot xtemp ytemp o x x xtemp y y ytemp n n 1 text Interpreter latex String d num2str n 2 Position x n 0 2 y n FontSize 16 end delta ones n 2 1 tx ty interporder2c1 x y delta m 2 n 3 for s 1 2 m 1 hold on myplotB tx s s 2 ty s s 2 k end hold off end function myplotB x y str B m length x for t 0 0 01 1 X Y Beziercurve x y t B B X 1 m Y 1 m end plot B 1 B 2 str Linewidth 2 5 hold on X Y Beziercurve x y 0 5 for i 1 plot X 1 m i 1 i Y 1 m i 1 i str end hold off end function X Y Beziercurve x y t m length x n length y if m n error dimension is not match end X zeros m m X 1 x Y zeros m m Y 1 y for r m 1 2 X 1 r 1 m r 2 1 t X 1 r 1 m r 1 t X 2 r m r 1 Y 1 r 1 m r 2 1 t Y 1 r 1 m r 1 t Y 2 r m r 1 end end function tx ty shengjie x y m length x tx zeros m 1 1 ty zeros m 1 1 tx 1 x 1 tx m 1 x m ty 1 y 1 ty m 1 y m 14 姓名 学号 专业 tx 2 m 2 m m 1 x 1 m 1 1 2 m m 1 x 2 m ty 2 m 2 m m 1 y 1 m 1 1 2 m m 1 y 2 m end function tx ty interporder2c1 x y delta m length x n 2 m 3 tx zeros n 1 ty zeros n 1 tx 1 x 1 tx n 1 x m 1 tx n x m ty 1 y 1 ty n 1 y m 1 ty n y m for i 2 m 2 tx 2 i 2 x i tx 2 i 1 delta i x i delta i 1 x i 1 delta i delta i 1 ty 2 i 2 y i ty 2 i 1 delta i y i delta i 1 y i 1 delta i delta i 1 end end 15 姓名 学号 专业 附录 C2的三次B样条Matlab程序 function Testorder3C2 axis 0 10 0 10 hold on x y n 0 while 1 xtemp ytemp button ginput 1 if button 3 break end plot xtemp ytemp o x x xtemp y y ytemp n n 1 text Interpreter latex String d num2str n 2 Position x n 0 2 y n FontSize 16 end delta ones n 3 1 tx ty interporder3c20 x y delta m length tx for s 1 3 m 1 myplotB tx s s 3 ty s s 3 k end plot x y k hold off end function myplotB x y str B m length x for t 0 0 01 1 X Y Beziercurve x y t B B X 1 m Y 1 m end plot B 1 B 2 str Linewidth 2 5 hold on X Y Beziercurve x y 0 5 for i 1 plot X 1 m i 1 i Y 1 m i 1 i str end hold off end function X Y Beziercurve x y t m length x n length y if m n error dimension is not match end X zeros m m X 1 x Y zeros m m Y 1 y for r m 1 2 X 1 r 1 m r 2 1 t X 1 r 1 m r 1 t X 2 r m r 1 Y 1 r 1 m r 2 1 t Y 1 r 1 m r 1 t Y 2 r m r 1 end end function tx ty shengjie x y m length x tx zeros m 1 1 ty zeros m 1 1 tx 1 x 1 tx m 1 x m 16 姓名 学号 专业 ty 1 y 1 ty m 1 y m tx 2 m 2 m m 1 x 1 m 1 1 2 m m 1 x 2 m ty 2 m 2 m m 1 y 1 m 1 1 2 m m 1 y 2 m end function tx ty interporder3c20 x y delta m length x n 3 m 8 tx zeros n 1 ty zeros n 1 tx 1 x 1 tx 2 x 2 ty 1 y 1 ty 2 y 2 tx 3 delta 1 x 3 delta 2 x 2 delta 1 delta 2 ty 3 delta 1 y 3 delta 2 y 2 delta 1 delta 2 tx n x m ty n y m tx n 1 x m 1 ty n 1 y m 1 tx n 2 delta m 4 x m 1 delta m 3 x m 2 delta m 3 delta m 4 ty n 2 delta m 4 y m 1 delta m 3 y m 2 delta m 3 delta m 4 for i 3 m 3 tx 3 i 4 delta i delta i 1 x i delta i 2 x i 1 delta i 2 delta i 1 delta i ty 3 i 4 delta i delta i 1 y i delta i 2 y i 1 delta i 2 delta i 1 delta i tx 3 i 3 delta i 2 delta i 1 x i 1 delta i x i delta i 2 delta i 1 delta i ty 3 i 3 delta i 2 delta i 1 y i 1 delta i y i delta i 2 delta i 1 delta i end for i 3 m 2 tx 3 i 5 delta i 2 tx 3 i 4 delta i 1 tx 3 i 6 delta i 2 delta i 1 ty 3 i 5 delta i 2 ty 3 i 4 delta i 1 ty 3 i 6 delta i 2 delta i 1 end end 17 姓名 学号 专业 附录 C1的二次B样条闭曲线Matlab程序 function Testorder2C10 axis 0 10 0 10 hold on x y n 0 while 1 xtemp ytemp button ginput 1 if button 3 break end plot xtemp ytemp x x xtemp y y ytemp n n 1 end delta ones n 1 此处 01 l 1 t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025北京中国音乐学院高层次人才引进2人考前自测高频考点模拟试题附答案详解
- 在线课程效果分析-洞察与解读
- 2025年甘肃省兰州大学哲学社会学院聘用制(B岗)人员招聘考前自测高频考点模拟试题及答案详解1套
- 2025江苏南通市崇川区卫生系统面向毕业生招聘备案制高层次卫生人才15人模拟试卷及答案详解(典优)
- 2025年上海市闵行区莘庄实验小学代课教师招聘模拟试卷附答案详解(完整版)
- 2025贵州修文县城镇公益性岗位招聘(4月)模拟试卷有答案详解
- 2025南平延平峡阳镇卫生院招聘驾驶员考前自测高频考点模拟试题带答案详解
- 2025年长春理工大学公开招聘博士人才(71人)模拟试卷及答案详解(考点梳理)
- 2025河北衡水市冀州区招聘第二批社区工作者模拟试卷及答案详解参考
- 2025贵州省卫生健康委员会“银龄计划”(引进退休高级医疗卫生人才)724人模拟试卷及答案详解(必刷)
- 2025至2030白酒包装行业产业运行态势及投资规划深度研究报告
- 学堂在线 公共管理学 章节测试答案
- 专项质量护理管理制度
- 预防艾滋病、梅毒和乙肝母婴传播登记及随访表
- 医院“十五五”发展规划(2026-2030)
- 教育信息化中的数字孪生技术应用案例分析
- 益海嘉里员工手册
- 膀胱镜检查术后护理常规
- 公司股权分配协议
- 光伏施工项目危险源辨识与风险评价清单(LEC法)
- 胸外科快速康复护理要点
评论
0/150
提交评论