发明名称 一种基于延伸的产品外形空间曲线的拼接方法
摘要 一种基于延伸的产品外形空间曲线拼接的CAD方法,属于曲线曲面的CAD领域,其特征在于,初始化阶段输入要进行拼接操作的两条空间曲线C<SUB>1</SUB>和D;对其中的曲线C<SUB>1</SUB>相继实行三次延伸操作使得与曲线D实现相连通;调整延伸曲线的两个控制顶点,实现两条曲线的二阶几何连续。基于该方法在不添加第三条曲线的情况下,既填补了两条曲线间原有的缝隙,又不改变曲线的原有部分,实现了一种新的曲线拼接效果。
申请公布号 CN101299278A 申请公布日期 2008.11.05
申请号 CN200810114733.2 申请日期 2008.06.11
申请人 清华大学 发明人 刘永进;臧彧;仇荣琦;张文琦;姜昌浩;胡事民
分类号 G06T11/20(2006.01);G06T17/30(2006.01);G06F17/50(2006.01) 主分类号 G06T11/20(2006.01)
代理机构 北京众合诚成知识产权代理有限公司 代理人 朱琨
主权项 1.一种基于延伸的产品外形空间曲线拼接的CAD方法,其特征在于,所述方法是在计算机上依次按照如下步骤实现的:步骤(1),初始化:输入要实行拼接操作的空间曲线C<sub>1</sub>(t)和空间曲线D(s),每条曲线采用B样条的表示方法,对于曲线C<sub>1</sub>其形式为:<maths num="0001"><![CDATA[<math><mrow><msub><mi>C</mi><mn>1</mn></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mrow></munderover><msub><mi>P</mi><mrow><mn>1</mn><mo>,</mo><mi>i</mi></mrow></msub><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><msub><mi>c</mi><mn>1</mn></msub></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow></math>]]></maths>其中t是空间曲线C<sub>1</sub>(t)的参数坐标,I<sub>1</sub>是曲线C<sub>1</sub>(t)所含的控制顶点个数,P<sub>1,i</sub>是曲线C<sub>1</sub>(t)中序号为i的控制顶点的函数值,i=0,1,…,I<sub>1</sub>-1,采用笛卡尔坐标表示,<img file="A2008101147330002C2.GIF" wi="74" he="58" />是曲线C<sub>1</sub>(t)中序号为i的B样条基函数,该B样条基函数定义在如下节点向量序列之上:<img file="A2008101147330002C3.GIF" wi="758" he="177" />其中k<sub>1</sub>是曲线C<sub>1</sub>的幂,为设定值,<img file="A2008101147330002C4.GIF" wi="375" he="51" />等为节点向量序列中的节点,为设定值,上述的B样条基函数采用Matlab系统样条工具库中B样条基函数的定义方式,对于曲线D其形式为:<maths num="0002"><![CDATA[<math><mrow><mi>D</mi><mrow><mo>(</mo><mi>s</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>J</mi><mo>-</mo><mn>1</mn></mrow></munderover><msub><mi>Q</mi><mi>j</mi></msub><msub><mi>N</mi><mrow><mi>j</mi><mo>,</mo><mi>D</mi></mrow></msub><mrow><mo>(</mo><mi>s</mi><mo>)</mo></mrow></mrow></math>]]></maths>其中s是空间曲线D(s)的参数坐标,J是曲线D(s)所含的控制顶点个数,Q<sub>j</sub>是曲线D(s)中序号为j的控制顶点的函数值,j=0,1,…,J-1,采用笛卡尔坐标表示,N<sub>j,D</sub>是曲线D(s)中序号为j的B样条基函数,该B样条基函数定义在如下节点向量序列之上:<img file="A2008101147330002C6.GIF" wi="772" he="176" />其中k<sub>D</sub>是曲线D的幂,为设定值,<img file="A2008101147330002C7.GIF" wi="252" he="49" />…,W<sub>J-1</sub>等为节点向量序列中的节点,为设定值,上述的B样条基函数采用Matlab系统样条工具库中B样条基函数的定义方式;步骤(2),对曲线C<sub>1</sub>(t)进行向曲线D(s)方向的延伸,其步骤如下:步骤(2.1)在所述的曲线C<sub>1</sub>(t)和曲线D(s)之间按以下方式生成R<sub>1</sub>和R<sub>2</sub>两个空间点,<maths num="0003"><![CDATA[<math><mrow><msub><mi>R</mi><mn>1</mn></msub><mo>=</mo><msub><mrow><mn>0.67</mn><mi>P</mi></mrow><mrow><mn>1</mn><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mrow><mn>0.33</mn><mi>Q</mi></mrow><mn>0</mn></msub><mo>,</mo></mrow></math>]]></maths><maths num="0004"><![CDATA[<math><mrow><msub><mi>R</mi><mn>2</mn></msub><mo>=</mo><mn>0.33</mn><msub><mi>P</mi><mrow><mn>1</mn><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mrow></msub><mo>+</mo><msub><mrow><mn>0.67</mn><mi>Q</mi></mrow><mn>0</mn></msub><mo>,</mo></mrow></math>]]></maths>其中<img file="A2008101147330002C10.GIF" wi="93" he="56" />是曲线C<sub>1</sub>(t)上最末一个控制顶点的函数值,Q<sub>0</sub>是曲线D(s)上最初一个控制顶点的函数值,步骤(2.2)把曲线C<sub>1</sub>延伸到所述的点R<sub>1</sub>,并且设延伸后的曲线为C<sub>2</sub>(t),其表示形式为<maths num="0005"><![CDATA[<math><mrow><msub><mi>C</mi><mn>2</mn></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><msub><mi>I</mi><mn>2</mn></msub><mo>-</mo><mn>1</mn></mrow></munderover><msub><mi>P</mi><mrow><mn>2</mn><mo>,</mo><mi>i</mi></mrow></msub><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><msub><mi>c</mi><mn>2</mn></msub></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow></math>]]></maths>其中I<sub>2</sub>是包含曲线C<sub>1</sub>(t)在内的曲线C<sub>2</sub>(t)中所含的控制顶点个数,且有I<sub>2</sub>=I<sub>1</sub>+1,P<sub>2,i</sub>是曲线C<sub>2</sub>(t)中序号为i的控制顶点的函数值,i=0,1,…,I<sub>1</sub>,<img file="A2008101147330003C2.GIF" wi="79" he="57" />是曲线C<sub>2</sub>(t)中序号为i的B样条基函数,所述的<img file="A2008101147330003C3.GIF" wi="81" he="57" />定义在如下节点向量序列之上:<img file="A2008101147330003C4.GIF" wi="850" he="177" />其中<maths num="0006"><![CDATA[<math><mrow><mi>a</mi><mo>=</mo><mn>1</mn><mo>+</mo><mfrac><mrow><mo>|</mo><mo>|</mo><msub><mi>P</mi><mrow><mn>1</mn><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mrow></msub><mo>-</mo><msub><mi>R</mi><mn>1</mn></msub><mo>|</mo><mo>|</mo></mrow><mrow><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><msub><mi>k</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mrow></munderover><mo>|</mo><mo>|</mo><msub><mi>C</mi><mn>1</mn></msub><mrow><mo>(</mo><msub><mi>u</mi><mrow><msub><mi>k</mi><mn>1</mn></msub><mo>+</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>)</mo></mrow><mo>-</mo><msub><mi>C</mi><mn>1</mn></msub><mrow><mo>(</mo><msub><mi>u</mi><mrow><msub><mi>k</mi><mn>1</mn></msub><mo>+</mo><mi>i</mi></mrow></msub><mo>)</mo></mrow><mo>|</mo><mo>|</mo></mrow></mfrac><mo>,</mo></mrow></math>]]></maths>||·||表示空间的欧氏距离,步骤(2.3)按下述步骤计算曲线C<sub>2</sub>(t)中序号为i的控制顶点的值P<sub>2,i</sub>步骤(2.3.1)设置初值<maths num="0007"><![CDATA[<math><mrow><msubsup><mover><mi>P</mi><mo>~</mo></mover><mi>i</mi><mn>0</mn></msubsup><mo>=</mo><msub><mi>P</mi><mrow><mn>1</mn><mo>,</mo><mi>i</mi></mrow></msub><mo>,</mo></mrow></math>]]></maths>i=I<sub>1</sub>-k<sub>1</sub>,I<sub>1</sub>-k<sub>1</sub>+1,…,I<sub>1</sub>-1步骤(2.3.2)按下式递推计算空间点<img file="A2008101147330003C7.GIF" wi="48" he="60" /><maths num="0008"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><msubsup><mover><mi>P</mi><mo>~</mo></mover><mi>i</mi><mi>r</mi></msubsup><mo>=</mo><msubsup><mover><mi>P</mi><mo>~</mo></mover><mi>i</mi><mrow><mi>r</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mi>i</mi><mo>=</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><msub><mi>k</mi><mn>1</mn></msub><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><mi>r</mi><mo>-</mo><mn>1</mn></mtd></mtr><mtr><mtd><msubsup><mover><mi>P</mi><mo>~</mo></mover><mi>i</mi><mi>r</mi></msubsup><mo>=</mo><mfrac><mrow><msubsup><mover><mi>P</mi><mo>~</mo></mover><mi>i</mi><mrow><mi>r</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mi>&lambda;</mi><mo>)</mo></mrow><msubsup><mover><mi>P</mi><mo>~</mo></mover><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow><mi>r</mi></msubsup></mrow><mi>&lambda;</mi></mfrac><mi>i</mi><mo>=</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><mi>r</mi><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><mi>r</mi><mo>+</mo><mn>1</mn><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mtd></mtr></mtable></mfenced><mi>r</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><msub><mi>k</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mrow></math>]]></maths>其中<maths num="0009"><![CDATA[<math><mrow><mi>&lambda;</mi><mo>=</mo><mfrac><mrow><msub><mi>u</mi><msub><mi>I</mi><mn>1</mn></msub></msub><mo>-</mo><msub><mi>u</mi><mi>i</mi></msub></mrow><mrow><msub><mi>u</mi><mrow><mi>i</mi><mo>+</mo><mi>r</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>-</mo><msub><mi>u</mi><mi>i</mi></msub></mrow></mfrac></mrow></math>]]></maths>步骤(2.3.3)得出P<sub>2,i</sub>的设置结果<maths num="0010"><![CDATA[<math><mrow><msub><mi>P</mi><mrow><mn>2</mn><mo>,</mo><mi>i</mi></mrow></msub><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>P</mi><mrow><mn>1</mn><mo>,</mo><mi>i</mi></mrow></msub></mtd><mtd><mi>i</mi><mo>=</mo><mn>0,1</mn><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><msub><mi>k</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mtd></mtr><mtr><mtd><msubsup><mover><mi>P</mi><mo>~</mo></mover><mi>i</mi><mrow><msub><mi>k</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mrow></msubsup></mtd><mtd><mi>i</mi><mo>=</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><msub><mi>k</mi><mn>1</mn></msub><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><msub><mi>k</mi><mn>1</mn></msub><mo>+</mo><mn>1</mn><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mtd></mtr><mtr><mtd><msub><mi>R</mi><mn>1</mn></msub></mtd><mtd><mi>i</mi><mo>=</mo><msub><mi>I</mi><mn>1</mn></msub></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>步骤(2.4)按照步骤(2.2)所述的方式将所述曲线C<sub>2</sub>(t)延伸到点R<sub>2</sub>,并且设延伸后的包含曲线C<sub>2</sub>(t)的曲线为C<sub>3</sub>(t),步骤(2.5)再按照步骤(2.2)所述的方式将所述曲线C<sub>3</sub>(t)延伸到所述曲线D(s)的第0个控制顶点Q<sub>0</sub>,并且设延伸后的包含曲线C<sub>3</sub>(t)的曲线为C<sub>4</sub>(t):<maths num="0011"><![CDATA[<math><mrow><msub><mi>C</mi><mn>4</mn></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><msub><mi>I</mi><mn>4</mn></msub><mo>-</mo><mn>1</mn></mrow></munderover><msub><mi>P</mi><mrow><mn>4</mn><mo>,</mo><mi>i</mi></mrow></msub><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><msub><mi>c</mi><mn>4</mn></msub></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow></math>]]></maths>其中I<sub>4</sub>是曲线C<sub>4</sub>(t)所含的控制顶点个数且有I<sub>4</sub>=I<sub>1</sub>+3,<img file="A2008101147330004C2.GIF" wi="80" he="57" />是曲线C<sub>4</sub>(t)中序号为i的B样条基函数,i=0,1,…,I<sub>1</sub>+3,<img file="A2008101147330004C3.GIF" wi="78" he="57" />定义在如下归一化形式的节点向量序列之上:<img file="A2008101147330004C4.GIF" wi="785" he="174" />步骤(3),修改曲线C<sub>4</sub>(t)的两个控制顶点<img file="A2008101147330004C5.GIF" wi="66" he="57" />和<img file="A2008101147330004C6.GIF" wi="99" he="58" />,使得修改后的曲线C<sub>4</sub>(t)与曲线D(s)在其交接处即t=1和s=0处实现2阶几何连续,<img file="A2008101147330004C7.GIF" wi="67" he="57" />和<img file="A2008101147330004C8.GIF" wi="100" he="57" />和计算方法如下:<maths num="0012"><![CDATA[<math><mrow><msub><mi>P</mi><mrow><mn>4</mn><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>+</mo><mn>1</mn></mrow></msub><mo>=</mo><mfrac><mn>1</mn><mrow><msubsup><mi>N</mi><mrow><msub><mi>I</mi><mn>1</mn></msub><mo>+</mo><mn>1</mn><mo>,</mo><msub><mi>C</mi><mn>4</mn></msub></mrow><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow></mfrac><mo>[</mo><mi>&alpha;</mi><mrow><mo>(</mo><msub><mi>Q</mi><mn>0</mn></msub><msubsup><mi>N</mi><mrow><mn>0</mn><mo>,</mo><mi>D</mi></mrow><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow><mo>+</mo><msub><mi>Q</mi><mn>1</mn></msub><msubsup><mi>N</mi><mrow><mn>1</mn><mo>,</mo><mi>D</mi></mrow><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>-</mo><msub><mi>P</mi><mrow><mn>4</mn><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>+</mo><mn>2</mn></mrow></msub><msubsup><mi>N</mi><mrow><msub><mi>I</mi><mn>1</mn></msub><mo>+</mo><mn>2</mn><mo>,</mo><msub><mi>C</mi><mn>4</mn></msub></mrow><mo>&prime;</mo></msubsup><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow><mo>]</mo></mrow></math>]]></maths><maths num="0013"><![CDATA[<math><mrow><msub><mi>P</mi><mrow><mn>4</mn><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub></mrow></msub><mo>=</mo><mfrac><mn>1</mn><mrow><msubsup><mi>N</mi><mrow><msub><mi>I</mi><mn>1</mn></msub><mo>,</mo><msub><mi>C</mi><mn>4</mn></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow></mfrac><mo>[</mo><msup><mi>&alpha;</mi><mn>2</mn></msup><mrow><mo>(</mo><msub><mi>Q</mi><mn>0</mn></msub><msubsup><mi>N</mi><mrow><mn>0</mn><mo>,</mo><mi>D</mi></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow><mo>+</mo><msub><mi>Q</mi><mn>1</mn></msub><msubsup><mi>N</mi><mrow><mn>1</mn><mo>,</mo><mi>D</mi></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow><mo>+</mo><msub><mi>Q</mi><mn>2</mn></msub><msubsup><mi>N</mi><mrow><mn>2</mn><mo>,</mo><mi>D</mi></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>-</mo><msub><mi>P</mi><mrow><mn>4</mn><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>+</mo><mn>2</mn></mrow></msub><msubsup><mi>N</mi><mrow><msub><mi>I</mi><mn>1</mn></msub><mo>+</mo><mn>2</mn><mo>,</mo><msub><mi>C</mi><mn>4</mn></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow><mo>-</mo><msub><mi>P</mi><mrow><mn>4</mn><mo>,</mo><msub><mi>I</mi><mn>1</mn></msub><mo>+</mo><mn>1</mn></mrow></msub><msubsup><mi>N</mi><mrow><msub><mi>I</mi><mn>1</mn></msub><mo>+</mo><mn>1</mn><mo>,</mo><msub><mi>C</mi><mn>4</mn></msub></mrow><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow><mo>]</mo></mrow></math>]]></maths>其中α为用户指定的值,取值范围为(0,1]之间的正值,N′和N″为相应的B样条基函数的1阶导数以及2阶导数。
地址 100084北京市100084-82信箱