发明名称 一种保持交点约束的线架光顺方法
摘要 一种保持交点约束的曲线线架整体光顺的方法,属于曲线曲面的CAD领域,其特征在于,若曲线的控制顶点个数n与其所含交点个数m之比小于1.5,则首先增加曲线的控制顶点数目;记录曲线交点的参数值;指定每根曲线在整体线架中的光顺权值;生成线架的总体约束优化函数;把约束优化问题转化成无约束优化问题进行求解。基于该方法可以使线架中的曲线曲率变化更加均匀,并且保持了横纵曲线间原有的交点约束,真正达到了线架整体光顺的效果。
申请公布号 CN100583106C 申请公布日期 2010.01.20
申请号 CN200810104209.7 申请日期 2008.04.17
申请人 清华大学 发明人 刘永进;臧彧;来煜坤;胡事民
分类号 G06F17/50(2006.01)I 主分类号 G06F17/50(2006.01)I
代理机构 北京众合诚成知识产权代理有限公司 代理人 朱 琨
主权项 1.一种保持交点约束的曲线线架光顺的CAD方法,其特征在于,所述方法是在计算机上按照如下步骤实现的:步骤(1),初始化:输入要进行光顺的原始线架,并设定横向线的集合C={c<sub>i</sub>|i=1,2…,u},纵向线的集合D={d<sub>i</sub>|i=1,2…,v},p<sub>ij</sub>为横向线c<sub>i</sub>与纵向线d<sub>j</sub>的交点,每条曲线采用B样条的表示方法,对于第i条横向线其形式为:<maths num="0001"><![CDATA[<math><mrow><msub><mi>c</mi><mi>i</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>l</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>n</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow></munderover><msubsup><mi>P</mi><mi>l</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></msubsup><msub><mi>N</mi><mrow><mi>l</mi><mo>,</mo><mi>k</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow></math>]]></maths>其中n(c<sub>i</sub>)是横向线c<sub>i</sub>所含有的控制顶点个数减1,k(c<sub>i</sub>)是横向线c<sub>i</sub>的曲线次数,<img file="C2008101042090002C2.GIF" wi="79" he="59" />是横向线c<sub>i</sub>中序号为l的控制顶点,l=0,1,…,n(c<sub>i</sub>),采用笛卡尔坐标表示,<img file="C2008101042090002C3.GIF" wi="119" he="56" />是横向线c<sub>i</sub>中序号为l的B样条基函数,l=0,1,…,n(c<sub>i</sub>),B样条基函数使用到如下节点向量:<img file="C2008101042090002C4.GIF" wi="710" he="186" />符号t表示节点向量中的一个分量,取值在(0,1]间,<img file="C2008101042090002C5.GIF" wi="270" he="51" />表示节点向量中下标序号从k(c<sub>i</sub>)+1到n(c<sub>i</sub>)的共n(c<sub>i</sub>)-k(c<sub>i</sub>)个分量值,取值均在(0,1]间;对于第j条纵向线其形式为<maths num="0002"><![CDATA[<math><mrow><msub><mi>d</mi><mi>j</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>l</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>n</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></mrow></munderover><msubsup><mi>P</mi><mi>l</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></msubsup><msub><mi>N</mi><mrow><mi>l</mi><mo>,</mo><mi>k</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo></mrow></math>]]></maths>其中n(d<sub>j</sub>)是纵向线d<sub>j</sub>所含有的控制顶点个数减1,k(d<sub>j</sub>)是纵向线d<sub>j</sub>的曲线次数,<img file="C2008101042090002C7.GIF" wi="88" he="65" />是纵向线d<sub>j</sub>中序号为l的控制顶点,l=0,1,…,n(d<sub>j</sub>),采用笛卡尔坐标表示,<img file="C2008101042090002C8.GIF" wi="128" he="62" />是纵向线d<sub>j</sub>中序号为l的B样条基函数,l=0,1,…,n(d<sub>j</sub>),B样条基函数使用到如下节点向量:<img file="C2008101042090002C9.GIF" wi="735" he="203" /><img file="C2008101042090002C10.GIF" wi="287" he="57" />表示节点向量中下标序号从k(d<sub>j</sub>)+1到n(d<sub>j</sub>)的共n(d<sub>j</sub>)-k(d<sub>j</sub>)个分量值,取值均在(0,1]间;步骤(2),按照如下步骤建立线架的总体优化目标函数:步骤(2.1)检查各条横向线的控制顶点个数n以及其所含交点个数m,若n/m<1.5则用B样条曲线的升阶或顶点插入算法增加其控制顶点个数使其至少为所含交点个数m的1.5倍,反之执行下一步骤;步骤(2.2)对于纵向曲线,重复步骤(2.1);步骤(2.3)对于横向线c<sub>i</sub>和纵向线d<sub>j</sub>的交点P<sub>ij</sub>,记录其在两条曲线中各自的参数坐标值p<sub>ij</sub><sup>(c)</sup>和p<sub>ij</sub><sup>(d)</sup>;步骤(2.4)建立横向线的优化目标函数:<maths num="0003"><![CDATA[<math><mrow><mi>E</mi><mrow><mo>(</mo><msub><mover><mi>c</mi><mo>&OverBar;</mo></mover><mi>i</mi></msub><mo>)</mo></mrow><mo>=</mo><msubsup><mi>&lambda;</mi><mi>i</mi><mrow><mo>(</mo><mi>c</mi><mo>)</mo></mrow></msubsup><msubsup><mo>&Integral;</mo><msub><mi>t</mi><mrow><mi>k</mi><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow><mo>-</mo><mn>1</mn></mrow></msub><msub><mi>t</mi><mrow><mi>n</mi><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow><mo>+</mo><mn>1</mn></mrow></msub></msubsup><msup><mrow><mo>|</mo><mo>|</mo><msubsup><mover><mi>c</mi><mo>&OverBar;</mo></mover><mi>i</mi><mi>n</mi></msubsup><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup><mi>dt</mi><mo>+</mo><mi>&alpha;</mi><munderover><mi>&Sigma;</mi><mrow><mi>l</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>n</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow></munderover><msup><mrow><mo>|</mo><mo>|</mo><msubsup><mover><mi>P</mi><mo>&OverBar;</mo></mover><mi>l</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></msubsup><mo>-</mo><msubsup><mi>P</mi><mi>l</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></msubsup><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup></mrow></math>]]></maths>其中:<img file="C2008101042090003C2.GIF" wi="109" he="51" />和<img file="C2008101042090003C3.GIF" wi="110" he="51" />为节点向量中下标分别为n(c<sub>i</sub>)+1和k(c<sub>i</sub>)-1的分量,c<sub>i</sub>是变化后的第i条横向线,其形式为<maths num="0004"><![CDATA[<math><mrow><msub><mover><mi>c</mi><mo>&OverBar;</mo></mover><mi>i</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>l</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>n</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow></munderover><msubsup><mover><mi>P</mi><mo>&OverBar;</mo></mover><mi>l</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></msubsup><msub><mi>N</mi><mrow><mi>l</mi><mo>,</mo><mi>k</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow></math>]]></maths>这里的<img file="C2008101042090003C5.GIF" wi="83" he="59" />是c<sub>i</sub>中序号为l的控制顶点,l=0,1,…,n(c<sub>i</sub>),c<sub>i</sub>的其它内容与c<sub>i</sub>相同,<img file="C2008101042090003C6.GIF" wi="303" he="111" />是变化后曲线c<sub>i</sub>的二阶导数平方的积分,λ<sub>i</sub><sup>(c)</sup>为用户指定的该横向线的权值,其取值在0、1之间,α是罚函数因子,用于控制曲线控制顶点的变化范围,为设定值;步骤(2.5)建立纵向线的优化目标函数:<maths num="0005"><![CDATA[<math><mrow><mi>E</mi><mrow><mo>(</mo><msub><mover><mi>d</mi><mo>&OverBar;</mo></mover><mi>j</mi></msub><mo>)</mo></mrow><mo>=</mo><msubsup><mi>&lambda;</mi><mi>j</mi><mrow><mo>(</mo><mi>d</mi><mo>)</mo></mrow></msubsup><msubsup><mo>&Integral;</mo><msub><mi>t</mi><mrow><mi>k</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow><mo>-</mo><mn>1</mn></mrow></msub><msub><mi>t</mi><mrow><mi>n</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow><mo>+</mo><mn>1</mn></mrow></msub></msubsup><msup><mrow><mo>|</mo><mo>|</mo><msubsup><mover><mi>d</mi><mo>&OverBar;</mo></mover><mi>j</mi><mi>n</mi></msubsup><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup><mi>dt</mi><mo>+</mo><mi>&alpha;</mi><munderover><mi>&Sigma;</mi><mrow><mi>l</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>n</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></mrow></munderover><msup><mrow><mo>|</mo><mo>|</mo><msubsup><mover><mi>P</mi><mo>&OverBar;</mo></mover><mi>l</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></msubsup><mo>-</mo><msubsup><mi>P</mi><mi>l</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></msubsup><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup></mrow></math>]]></maths>其中:<img file="C2008101042090003C8.GIF" wi="117" he="56" />和<img file="C2008101042090003C9.GIF" wi="118" he="56" />为节点向量中下标分别为n(d<sub>j</sub>)+1和k(d<sub>j</sub>)-1的分量,d<sub>j</sub>是变化后的第j条纵向线,其形式为<maths num="0006"><![CDATA[<math><mrow><msub><mover><mi>d</mi><mo>&OverBar;</mo></mover><mi>j</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>l</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>n</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></mrow></munderover><msubsup><mover><mi>P</mi><mo>&OverBar;</mo></mover><mi>l</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></msubsup><msub><mi>N</mi><mrow><mi>l</mi><mo>,</mo><mi>k</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></mrow></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow></math>]]></maths>这里的<img file="C2008101042090003C11.GIF" wi="90" he="65" />是d<sub>j</sub>中序号为l的的控制顶点,l=0,1,…,n(d<sub>j</sub>),d<sub>j</sub>的其它内容与d<sub>j</sub>相同,<img file="C2008101042090003C12.GIF" wi="323" he="116" />是变化后曲线d<sub>j</sub>的二阶导数平方的积分,λ<sub>j</sub><sup>(d)</sup>为用户指定的该纵向线的权值,其取值在0、1之间,α是罚函数因子其含义同步骤(2.4);步骤(2.6)建立线架的总体约束优化目标函数:<maths num="0007"><![CDATA[<math><mrow><mi>MinE</mi><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>u</mi></munderover><mi>E</mi><mrow><mo>(</mo><msub><mover><mi>c</mi><mo>&OverBar;</mo></mover><mi>i</mi></msub><mo>)</mo></mrow><mo>+</mo><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>v</mi></munderover><mi>E</mi><mrow><mo>(</mo><msub><mover><mi>d</mi><mo>&OverBar;</mo></mover><mi>j</mi></msub><mo>)</mo></mrow></mrow></math>]]></maths><maths num="0008"><![CDATA[<math><mrow><mi>s</mi><mo>.</mo><mi>t</mi><mo>.</mo><msub><mover><mi>c</mi><mo>&OverBar;</mo></mover><mi>i</mi></msub><mrow><mo>(</mo><msubsup><mi>p</mi><mi>ij</mi><mrow><mo>(</mo><mi>c</mi><mo>)</mo></mrow></msubsup><mo>)</mo></mrow><mo>=</mo><msub><mover><mi>d</mi><mo>&OverBar;</mo></mover><mi>j</mi></msub><mrow><mo>(</mo><msubsup><mi>p</mi><mi>ij</mi><mrow><mo>(</mo><mi>d</mi><mo>)</mo></mrow></msubsup><mo>)</mo></mrow><mi>i</mi><mo>=</mo><mn>1</mn><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><mi>u</mi><mo>;</mo><mi>j</mi><mo>=</mo><mn>1</mn><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><mi>v</mi></mrow></math>]]></maths>其中<maths num="0009"><![CDATA[<math><mrow><msub><mover><mi>c</mi><mo>&OverBar;</mo></mover><mi>i</mi></msub><mrow><mo>(</mo><msubsup><mi>p</mi><mi>ij</mi><mrow><mo>(</mo><mi>c</mi><mo>)</mo></mrow></msubsup><mo>)</mo></mrow><mo>=</mo><msub><mover><mi>d</mi><mo>&OverBar;</mo></mover><mi>j</mi></msub><mrow><mo>(</mo><msubsup><mi>p</mi><mi>ij</mi><mrow><mo>(</mo><mi>d</mi><mo>)</mo></mrow></msubsup><mo>)</mo></mrow></mrow></math>]]></maths>为优化后第i条横向线与第j条纵向线的交点,p<sub>ij</sub><sup>(c)</sup>为该交点在第i条横向线中的参数值,p<sub>ij</sub><sup>(d)</sup>为该交点在第j条纵向线中的参数值;光顺优化过程是按如下步骤实现的:步骤(2.6.1)用户向计算机输入控制顶点所允许的最大变化范围ε,并且设置罚因子α的初始值为10<sup>-5</sup>;步骤(2.6.2)加入u·v个拉格朗日乘子δ<sub>ij</sub>,1≤i≤u,1≤j≤v,把上述约束优化问题转化为无约束优化问题:<maths num="0010"><![CDATA[<math><mrow><mover><mi>E</mi><mo>&OverBar;</mo></mover><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>u</mi></munderover><mi>E</mi><mrow><mo>(</mo><msub><mover><mi>c</mi><mo>&OverBar;</mo></mover><mi>i</mi></msub><mo>)</mo></mrow><mo>+</mo><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>v</mi></munderover><mi>E</mi><mrow><mo>(</mo><msub><mover><mi>d</mi><mo>&OverBar;</mo></mover><mi>j</mi></msub><mo>)</mo></mrow><mo>+</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>u</mi></munderover><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>v</mi></munderover><msub><mi>&delta;</mi><mi>ij</mi></msub><mrow><mo>(</mo><msub><mover><mi>c</mi><mo>&OverBar;</mo></mover><mi>i</mi></msub><mrow><mo>(</mo><msubsup><mi>p</mi><mi>ij</mi><mrow><mo>(</mo><mi>c</mi><mo>)</mo></mrow></msubsup><mo>)</mo></mrow><mo>-</mo><msub><mover><mi>d</mi><mo>&OverBar;</mo></mover><mi>j</mi></msub><mrow><mo>(</mo><msubsup><mi>p</mi><mi>ij</mi><mrow><mo>(</mo><mi>d</mi><mo>)</mo></mrow></msubsup><mo>)</mo></mrow><mo>)</mo></mrow></mrow></math>]]></maths>其中未知变量为控制顶点及δ<sub>ij</sub>,此式是关于未知变量的二次函数;步骤(2.6.3)用二次函数求极小值的方法进行求解,取得函数的极小值和对应的未知变量;步骤(2.6.4)对于求解出的<img file="C2008101042090004C2.GIF" wi="83" he="62" />和<img file="C2008101042090004C3.GIF" wi="113" he="67" />若<maths num="0011"><![CDATA[<math><mrow><mo>|</mo><mo>|</mo><msubsup><mover><mi>P</mi><mo>&OverBar;</mo></mover><mi>l</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></msubsup><mo>-</mo><msubsup><mi>P</mi><mi>l</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow></msubsup><mo>|</mo><mo>|</mo><mo>&lt;</mo><mi>&epsiv;</mi></mrow></math>]]></maths>且<maths num="0012"><![CDATA[<math><mrow><mo>|</mo><mo>|</mo><msubsup><mover><mi>P</mi><mo>&OverBar;</mo></mover><mi>l</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></msubsup><mo>-</mo><msubsup><mi>P</mi><mi>l</mi><mrow><mo>(</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow></msubsup><mo>|</mo><mo>|</mo><mo>&lt;</mo><mi>&epsiv;</mi></mrow></math>]]></maths>则优化结束,反之另α=2×α,返回步骤(2.6.2)重新求解直到满足优化结束条件为止。
地址 100084北京市100084-82信箱