第一讲,曲线的连续性1.曲线的连续性G0、G1、G2、G3……这些都是NURBS软件中表示连续性的词。
那么如何能更好的去理解他们呢?下面我们以三个控制点的两条曲线为例,分别来介绍下它们的涵义。
从字面上来理解,两曲线的端点没有相接就谈不上连续,如图1;(图1,无连续)那么当它们的端点相接以后,就至少是G0。
可以执行CurvatureGraph命令,俗称曲率梳命令来对曲线进行连续性的检测。
完毕之后,两曲线相接处的曲率梳呈现出v 字形(黄色高亮显示)或锐角,也就是曲率梳有开口,这种情况我们就称它为G0,如图2;(图2,G0)两曲线端点相接且相切就是G1,它们的切线方向一致。
特征是:两相接曲线最末端的两个控制点相互排成一直线。
再来看曲率梳,你会发现,原来在G0中出现的V形开口消失了,却重叠成一条平滑直线,这种情况我们叫做G1,如图3;(图3,G1)我们用Match命令将这两条曲线匹配成Curvature(曲率),即G2。
如图4。
G2可以理解为光顺。
依然打开曲率梳来看G2的情况,如图5,两曲线相接处的曲率梳呈现出1字形(黄色高亮显示),并且两边的曲率梳还一样长,这种情况我们称之为G2。
(图4,Match命令对话框)(图5,G2)那么G1、G2他们的原理是什么呢?我们在G1的图上来标示圆角看下,可以发现曲线的任意处都有他的曲率圆,如图6。
(图6,曲率圆)我们把这图拆开来,对着曲线标注半径。
会发现G2连续的两条曲线有共同的曲率半径,如图7。
(图7,标注半径工具检测G2曲线的曲率半径)说了半天的曲率梳,那么他代表的是什么呢?曲率梳的梳齿代表的是曲率半径的大小以及垂直曲线的方向(法向)。
长度代表曲率半径大小,曲率方向代表法向,如图8。
(图8,曲率半径,以及法线方向)比如G1就是法向一致,所以两曲线相接端点处的切线方向也会一样,斜率相同。
而G2则是两曲线相接端点处斜率相同并且曲率半径相同,如图9。
(图9,G1的曲率梳)在通过对G0、G1、G2理解的基础上,我们来看下G3的概念。
如图10,G3的曲率梳感觉不出来是两个扇形。
(图10,G1、G2、G3的曲率梳的对比情况)现在看下如何手动调整两曲线的连续性到G3,如图11。
图中线段的点都是等分点,三条直线各被点分成了5等份,其实还可以不同的等分值,只要满足比例条件就可以了。
(图11,G3连续的控制点比例位置)图11,红色、蓝色两条各有三个控制点的二阶曲线,在满足公式AD:DB=CE:EA=EF:FD时,两曲线的连续性达即可到G3。
ISO连续和曲面连续的关系:(图12)(图13)图13两曲面就是斜向关系,也就是他们的ISO不连续,但是曲面是连续的。
为了证明这点,我们打开模型的控制点,选择中间三排控制点后一起往上拉来做强调。
看到的是G2连续的,如图14。
(图14)对于Untrimed曲面,边界也是ISO,边界ISO不连续时,内部ISO也会有部分的不连续。
如果ISO不连续,这两个曲面之间就只能是逼近连续了。
其实这没什么大影响,因为两曲面ISO不相等时,也只是属于逼近连续,只要在我们误差要求范围内,都是容许的。
绝对连续只会发生在ISO相互对应且零误差缝隙的曲面之间。
平时做模型,只要求逼近就行了。
一般做法都是先做出一阶面,然后Match自动提升到3阶,这样比较容易达到平滑且不扭曲。
边界有夹角,ISO连续时,其实也是逼近的,尤其是夹角小于30度时,曲率误差会很大;夹角大于45度时,肉眼基本上看不出斑马纹的瑕疵了。
如图15,这个夹角其实也是逼近G2而已,但是看不出瑕疵。
除了汽车行业,一般做产品设计的都能允许这种公差。
(图15,曲面ISO与连续性)如图16,这两个曲面的尖端处也比较容易出现误差。
一般两种方式可以降低不顺。
其中一种就是提升曲面到5阶或更高阶,就会降低误差。
(图16,边界不连续两曲面)下载 (27.18 KB)2009-3-3 13:05来看看这图ISO不连续时,角度夸张的情况下,Match G2就只会得到G0。
而左边是Degree=5 的1Span,MATCH G2 OK且保持iso不连续。
5阶应付两个面的匹配已经够了,虽然理论上5阶也会有问题,但是已经没有工具能分析他的误差。
三面的匹配非要7阶不可,三面混接的时候会互相干扰,因为控制点不足,所以5阶误差就会大些。
这种情况下要么+span,要么就升阶来解决这个问题。
看下三个曲面都是match G2下3、5、7阶显示的区别,3阶:5阶:其实还是有锐角存在,转动时还是看得出来微微的消失锐角。
7阶:7阶的时候肉眼很难察觉这个锐角了,转动也查不出来。
这个误差关系到A级曲面,A级曲面会要求这种地方的误差不是1 span而已,上面这个实例同样都是1 span ,但是衔接的地方质量不同!A级曲面的定义是:必须满足相邻曲面间的间隙在0.005mm 以下(有些汽车厂甚至要求到0.001mm),切率改变( tangency Change ) 在0.16度以下,曲率改变(curvature change) 在0.005 度以下,符合这样的标准才能确保钣件的环境反射不会有问题。
原生边相接(没剪切)曲面间的间隙是0mm,这就要求曲面的属性也必须相同。
不过很难作到整车都不用剪切。
其实原理不深入了解也没关系,方法知道就好办了。
保持曲面连续性同时移动控制点位置改变曲面造型:1span (最简)就是 2阶3个控制点3阶4个控制点.....一此类推容易修改造型也是1Span的好处之一。
原因是最简曲面边与边之间没有误差,如图17。
(图17,最简曲面边与边之间的关系)对图17中的模型,我可以任意修改造型而不用重新构线画面。
拖曳模型控制点的时候不会有裂缝,甚至可以保持连续性。
如平面只要点在一直线,就可以保证G2的连续,注意看图17最后三个图例。
这个特性在画车的时候非常有用,画汽车时候最需要修改,而绝不会画好的面就不动了。
要最简曲面画车有个重要的技巧:首先整体分析车体大型。
通常先铺出一阶面,然后在Match 中自动升阶或者也可以用手动升阶,不过手动升阶时候不可以用Rebuild ,而应该用ChangeDegree。
Change Degree会保留曲线的节点均匀性,这是跟重建曲线最大差别。
当然阶越高文件会越大,提高阶数的目的是为了降低iso不连续时曲面连续的误差。
而画汽车的时候也非常注重曲面的质量,一般我们说质量好也就是曲面该顺的地方顺,衔接的地方误差很小或者零误差,曲面尽量没有多余的控制点,使文件量缩小,导到实体软件时运算量减小而失败率降低。
如图18,汽车曲面都在五阶以上。
下载 (27.11 KB)2009-3-3 13:11(图18,最简曲面画汽车)1.曲面的连续性对直线做G2连续的数学涵义先向各为介绍这王教授简历:CAD&CG高科技奖、一等奖获得者:王国瑾教授(浙江大学数学系)。
男,1944年10月生。
主要研究方向为计算器辅助几何设计与图形学。
现为浙江大学数学系教授,博导。
以下向王教授求证所言:按数学上的观点来看,我认为你们对NURBS曲线理解欠妥。
因为一般一次NURBS曲线,也就是一段直线。
把它与已知直线做连续拼接,那是无实用价值的平凡情况,且是无限阶连续。
所以你的事情应当是指3阶NURBS曲线与已知直线做连续拼接,那肯定是G1连续,做不到G2连续。
因为G2连续必须两者在拼接点有公共的曲率圆。
ICAD 曲面设计人员参考手册中这样描述:C0 连续性意味着两个相邻段间存在一个公共点(即两个段相连)。
C1 意味着有一个公共点,并且多项式的一阶导数(即切向矢量)是相同的。
C2 意味着一阶导数和二阶导数都相同。
几何连续性没有数学连续性严格:G0和C0的意思相同,即两个段在位置上的连续。
G1意味着切向矢量的方向相同,但模量不同。
G2意味着曲率相同,但二阶导数不同。
下面为问答:C:从数学上是否意味着任何2次以上的曲线对着直线(1次)做G2连续,最高只能得到G1?王教授:对, 只能得到G1。
C:直线曲率=0, 只要曲线末端曲率=0, 就可以称为G2, 这样的理论正确吗?王教授: 错误, 因为曲线末端曲率=0是不可能的C:那么从数学上如何解释呢?王教授: 曲线上任何一点(包括末端)处的密切圆的半径都是一个有限数, 而此点处的曲率为以上半径值的倒数, 故不为0。
以下为结论:不论Gcon如何该改判定, 只是为了减少使用者的争议, 就数学上来说直线只能做到G1。
Cafer跟Mikko讨论后决定未来Rhino V4 Gcon判定:另一边由曲线接直线接G2这里的认定,因为与直线端点一样是没有曲率的(曲率圆无限大),所以"曲率圆无限大=曲率圆无限大",改为判定为G2。
也就是说:1)打断直线;2)对直线衔接或是混接G2的共享点处;3)两边六点控制点共线。
曲面的连续性在讲曲面连续性之前,我们先来看下曲线倒角。
将下图直角线段倒角。
倒角后其实就是补上一个圆弧。
这段圆弧对两边直线产生G1连续。
为什么是G1?因为控制点排列在同一直线上,所以倒角命令出来的就是G1。
倒角一定有三个控制点共线的状况,这也可从曲率梳来看。
你会发现直线没有曲率梳。
前面讲过梳齿长度就是曲线瞬间半径,直线没有半径,所以没有曲率梳。
但是它仍然具有方向。
而G1的含意就是方向一致。
所以直线可以做到G1。
没有曲率半径,所以数学含意上不能做G2。
因此弧线与直线连续的话,顶多只能到G1。
对直线做G2连续,严格来说也不叫G2。
原因就是前面说的“直线没有曲率,只有方向”。
这里留个问题,“既然说曲线对直线的连续只能做到G1,那么对两直线做Blend G2有意义吗?”虽然我们用GCON检测工具检测曲线对直线的连续能得到提示是G2的结果,这当中的缘由就是前面那段王国瑾教授与原厂CAFER讨论的对话历史。
Rhino2.0时,曲线对直线的连续判定为G1,数学上是正确。
后来因为造型上争议,把直线判定改成G2。
在3.0后就改了。
来看下直线Blend后的曲率梳,右边的是Blend G2,看它的梳子图,你会发现接近直线处急速向下为零。
也就是说端点顺接处的曲率半径趋近消失(无曲率)。
趋近消失不代表没有。
单一的1Span曲线是不可能没有曲率的,除非所有控制点都在同一直线上。
只要有一点不在这一直线上,整条曲线就有曲率圆存在。
回过来看前面留的那个问题,“既然说曲线对直线的连续只能做到G1,那么对两直线做Blend G2有意义吗?”试着将曲线拉成曲面,右边是G1,左边是Blend G2。
会发现光顺度有些差别,原因是阶数存在差别,Blend G2多了一个控制点的缓冲。
所以对两直线做Blend G2在造型上是有意义的。
总的来说,对直线做G2 做出来的不是G2,只是在衔接处的光影会比较顺畅。
光影是一种感觉,因为曲面接近平面时,曲面也几乎变平面了,所以光影会比较缓和,其实G1也是很顺的。