You are on page 1of 76

参数曲线到自由曲面的法向投影

和方向投影算法
Algorithms for orthogonal and
directional projections of parametric
curves onto free-form surfaces
(申 请 清 华 大 学 工 程 硕 士 专 业 学 位 论 文)

培 养 单 位 : 软件学院
工 程 领 域 : 软件工程
申 请 人 :宋 海 川
指 导 教 师 :雍 俊 海 教 授

二○一一年 五 月
关于学位论文使用授权的说明

本人完全了解清华大学有关保留、使用学位论文的规定,即:

清华大学拥有在著作权法规定范围内学位论文的使用权,其中

包括:(1)已获学位的研究生必须按学校规定提交学位论文,学

校可以采用影印、缩印或其他复制手段保存研究生上交的学位论

文;(2)为教学和科研目的,学校可以将公开的学位论文作为资料

在图书馆、资料室等场所供校内师生阅读,或在校园网上供校内师

生浏览部分内容。

本人保证遵守上述规定。

(保密的论文在解密后应遵守此规定)

作者签名: 导师签名:

日 期: 日 期:
摘 要

摘 要

曲线在曲面上的投影问题,在曲线曲面造型、实体建模、艺术设计、工业
制造等领域都有广泛的应用。但是到目前为止,专门讨论投影问题的文章非常
少,而且现有的投影算法也存在着一些不足,例如:近似曲线不完全落在曲面
上,不能控制近似曲线的近似度和连续性,等等。同时,虽然在很多CAD(计
算机辅助设计)系统中,曲线曲面投影都会作为一项重要的功能实现。但是根
据本文的测试,在法向投影中,对于投影曲线出界以及待投影曲线通过曲面曲
率中心两种情况,这些系统的处理存在着缺陷。本文针对常见的两种投影――
法向投影和给定方向投影进行了讨论。
本文提出了一种计算参数曲线到B样条曲面的法向投影算法。该算法首先
计算待投影曲线起始点在基曲面上的点投影,并根据投影点使用法向投影的二
阶跟踪法在基曲面参数域中构造一条折线段,本文以该折线段来近似法向投影
曲线的原像曲线。然后将该近似折线段映射到曲面上,从而得到法向投影曲线
的三维近似曲线。在实验中本文将该算法与现有的法向投影算法进行了比较。
实验结果显示,对于实验中给出的例子,该算法与一阶算法的精确性相当,然
而其平均运行速度却明显优于一阶算法。同时该算法得到的近似曲线完全落在
投影曲面上,并且可以控制近似曲线的近似度和连续性,从而克服了一阶算法
的缺点。同时,实验结果显示,本文算法也可以正确处理两种特殊情况――投
影曲线出界以及待投影曲线通过曲面曲率中心。
对于曲线在曲面上的给定方向投影,目前还没有学术论文进行过介绍。本
文使用上述近似算法的思路计算给定方向投影。首先,本文使用直线和曲面求
交的方法计算待投影曲线起始点到基曲面的给定方向投影,并根据得到的投影
点,使用给定方向投影的二阶跟踪法在基曲面参数域中构造近似折线段。然后
使用与法向投影相同的方式控制近似曲线的近似度和连续性。实验结果显示,
该算法的运行效率能够达到实时性要求。

关键词:法向投影 给定方向投影 曲面上的曲线 近似方法 Haus-


dorff距离

I
Abstract

Abstract

Projection of curves onto surfaces plays an important role in curve and surface
modeling, solid modeling, artistic design and industrial manufacture. However, un-
til now, there are few papers dealing with this problem. Meanwhile, there are some
drawbacks in the existing projection algorithms. For example, the approximate curve
they got is not on the base surface, and the approximation precision of the approximate
curve cannot be controlled, etc. Moreover, the projections have been implemented in
many CAD (computer aided design) systems as an important part. But according to
our experiments, they may fail in the orthogonal projection, when the projection curve
lies out of the surface and the test curve passes the curvature center of the surface. This
paper mainly discusses two kinds of projections–orthogonal projection and directional
projection.

This paper presents an approximate algorithm for the orthogonal projection of


parametric curves onto B-spline surfaces. The algorithm first compute the point projec-
tion of the starting point of the test curve onto the base surface, and generates a polyline
in the parametric domain of the base surface, using the second order tracing method
of orthogonal projection, with which the pre-image curve of the orthogonal projection
curve is approximated. Then the final 3D approximate curve can be obtained by map-
ping the polyline onto the base surface. This paper compares this algorithm with the
existing first order algorithms in the experiments. And the experimental results show
that the accuracies of the two kinds of algorithms are comparable, but this algorithm is
much faster than the first order algorithms. Meanwhile the approximate precision and
the continuity of the approximate curve can be controlled in this algorithm, which over-
comes the drawbacks of the existing first order algorithms. According the experiment
results, this algorithm can also correctly deal with the two kinds of special projections–
the projection curve lies out of the surface and the test curve passes the curvature center
of the surface.

II
Abstract

For the directional projection of curves onto surfaces, there are no related papers
so far. So this paper generalizes the approximate algorithm for the orthogonal projec-
tion above to the problem of directional projection. The algorithm first compute the
directional projection of the starting point of the test curve onto the base surface using
the line-surface intersection method. And the approximate polyline is generated with
the second order tracing method of directional projection. Then the approximation
precision and the continuity of the approximate curve are controlled in the same way
as the orthogonal projection. The experimental results show that the efficiency of the
algorithm has met the real-time requirement. And it can also control the approximate
precision and the continuity of the approximate curve.

Key words: orthogonal projection directional projection curves on surfaces


approximation Hausdorff distance

III
目 录

目 录

第1章 引言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
1.1 研究背景 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
1.1.1 法向投影. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
1.1.1.1 点投影 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
1.1.1.2 构造曲面上的曲线 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
1.1.2 给定方向投影 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
1.2 CATIA和UG中投影功能的实现情况 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5
1.3 本文工作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8

第2章 参数曲线到自由曲面的法向投影 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1 构造初始近似折线段 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1 跟踪法的准备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.2 法向投影的一阶和二阶微分方程组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.3 得到下一个投影点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.4 待投影曲线经过曲面曲率中心情况的处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.5 法向投影曲线出界情况的处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 控制近似曲线的近似度和连续性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.1 基本定义和定理介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.2 计算单侧和双侧曲线的Hausdorff距离 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.3 控制近似曲线的近似度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.2.4 构造εT − G1 连续曲线 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3 实验结果及比较 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3.1 与一阶算法的比较 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3.2 特殊情况处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.3.2.1 待投影曲线经过基曲面的主曲率中心 . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.3.2.2 法向投影曲线出界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.3.3 实际工程应用举例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

IV
目 录

第 3 章 参数曲线到自由曲面的给定方向投影 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.1 构造初始近似折线段 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.1.1 跟踪法的准备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.1.2 给定方向投影曲线的一阶和二阶微分方程组 . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.1.3 得到下一个投影点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.2 实验结果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.2.1 实际工程应用举例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
第 4 章 总结与展望 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.1 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2 展望 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
参考文献 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
致谢与声明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
个人简历、在学期间发表的学术论文与研究成果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

V
第 1 章 引言

第 1 章 引言

随着信息化时代的到来,计算机图形学已经广泛应用于计算机科学的各个
领域当中。而在计算机图形学的研究中,曲线在曲面上的投影问题,在曲线
曲面造型、实体建模、艺术设计、工业制造等领域都有广泛的应用 [1] [2] 。在大
型CAD(计算机辅助设计)系统中,曲线曲面投影都会作为一项重要的功能进
行实现。

1.1 研究背景
虽然曲线曲面投影有很多的应用价值,但是专门讨论投影问题的文献少之
又少。在大多数相关文章中,曲线曲面投影都只是作为一项辅助的工具进行讨
论。同时,目前几乎所有大型CAD系统都实现了曲线曲面投影的功能,其中包
括CATIA、UG、SolidWorks、Pro/E等,但是由于这些系统大都是商业软件,所
以通常不会公布源代码或实现方法,而且很多系统对于一些特殊投影情况的处
理都存在缺陷(将在下文中进行讨论)。因此对该问题进行详细的讨论对于图
形学的研究和发展具有有非常深远的意义。
下面对于曲线曲面投影中的两种投影方式――法向投影与给定方向投影,
分别讨论其含义以及研究现状。

1.1.1 法向投影

曲线到曲面的法向投影在很多问题中有着非常重要的作用,例如曲面裁剪、
曲面混合、数控制造 [1] 以及曲线曲面设计 [2] 。同时,在形体匹配的ICP(iterative
closest point)算法中,法向投影也是关键 [3] 。目前有三篇学术论文对法向投影
进行过介绍。其中,徐海银等人 [3] 提出了一种计算参数曲线到隐式曲面的法向
投影算法,该算法利用了法向投影的一阶和二阶几何信息,并使用折线段近似
真实投影曲线。Pegna 和 Wolter [1] 以及Wang等人 [2] 提出计算参数曲线到参数曲
面的法向投影算法。由于本文主要研究参数曲线到参数曲面的法向投影,因此
下面介绍一下 [1] 和 [2] 中的工作。

1
第 1 章 引言

P(t)

Q(t)

S (u, v)

图 1.1 法向投影的定义

给定空间中的参数曲线P(t)和曲面S (u, v),P(t)到S 的法向投影可以用P(t)上


的点到S 的点投影来定义。假设p为P(t)上的任意一点, p到S 的点投影为S 上的
一个点集q,并且保证向量(q − p) 在点q垂直于S 。假设S 的偏导数分别为S u 和S v ,
N为S 在点q处的单位法向量,则法向投影的点积定义为:

⎨ (q − p) · S u = 0



, (1-1)
⎩ (q − p) · S v = 0


对应的叉积定义为:

(q − p) × N = 0。 (1-2)

当在曲线P(t)上移动点p,对应的投影点q也会随着移动,并且形成一个点
的序列,称这个序列为法向投影曲线,如图 1.1所示。这里称曲线P(t)为待投影
曲线,曲面S (u, v)为基曲面,并且以Q(t)表示法向投影曲线。
为了得到法向投影曲线Q(t),Pegna 和 Wolter [1] 以及Wang等人 [2] 提出了法向
投影的一阶算法。根据式(1-1),Pegna 和 Wolter [1] 首先推导并得到了法向投影
满足的一阶微分方程组。他们使用数值方法对该方程组进行求解,从而可以得
到Q(t)上的一个点列。然后通过对该点列进行插值,便可以得到一条近似法向
投影曲线。他们将该法向投影算法应用于曲面裁剪和曲面混合。相应的,根据
式(1-2), Wang等人 [2] 推导了法向投影满足的另一个一阶微分方程组,并且使用
了与 [1] 相同的方法来构造近似法向投影曲线。在 [2] 中,他们首先构造了一条通
过曲面上一个点列的三次弗格森曲线,然后将该曲线法向投影到对应的曲面上,
从而得到了该点列的一条G1 连续插值曲线。

2
第 1 章 引言

上述一阶算法存在着以下几个缺点:首先,上述方法没有对Q(t)上离散点
的步长进行控制(只使用了固定的参数增量),这会导致离散点分布不均匀从
而影响最终的近似效果。其次,上述方法得到的近似法向投影曲线没有完全落
在基曲面上,这在很多CAD应用中(例如:曲面混合和曲面求交)是不能接受
的 [4] 。最后,上述方法不能够控制法向投影曲线的近似度和连续性。
为了克服上述一阶算法中的缺点,本文提出了一种二阶法向投影算法。该
算法计算空间参数曲线到B样条曲面的法向投影,并且可以得到一条近似的法
向投影曲线。在本文的算法中,将主要使用两种技术:点投影和构造曲面上的
曲线。因此,下面将分成两个部分对它们分别进行讨论。

1.1.1.1 点投影

点投影问题(point projection)在计算机辅助设计(computer-aided design,


CAGD)和计算机图形图像(computer graphics, CG)领域中,都作为很多算法
与操作处理的基础 [5] ,其重要性不言而喻。例如,在实体的边界表示、对象的
交互式选择、曲面拟合中的误差计算 [1] 、曲面求交 [6] 等问题中,点投影问题都
作为理论基础而发挥着重要作用。点投影问题研究的对象是空间中的点,目的
是寻找这一个点到一条空间曲线或者一张曲面的最短距离,并且得到曲线或曲
面上对应的最近点的参数(point inversion)。
在早期的研究中,人们通常使用牛顿迭代法来求解最近距离方程,从而
得到最近距离点。Limaiem 和 Trochu [6] 通过构造并求解一个辅助方程来计算
点投影;Hartmann [7] 使用曲面的标准型及其一阶导数来计算点投影;Piegl 和
Tiller [8] 对于使用牛顿迭代法来计算点投影的问题给出了详细和完整的描述。
对于牛顿迭代法,初始值的选择在很大程度上决定了其收敛性。因此,人
们对如何确定一个合理的初始值进行了研究,其中最常见的是细分的方法 [9–11] ,
这种方法的关键点是如何排除那些显然不包含最近距离点的曲面片。Ma等
人 [11] 将NURBS曲面分成多个Bézier曲面片,并且讨论了待投影点与Bézier曲面
片控制网格的关系,但是他们的曲面片排除方法在一些情况下可能会失败 [12] 。
Selimovic [13] 提出了一个更加实用的排除方法。
除了上述代数方法之外,也有人提出了计算点投影的几何方法。Josef
和 Dieter [14] 以及Hartmann [7] 介绍了计算点投影的一阶几何迭代法。Hu 和 Wall-

3
第 1 章 引言

ner [15] 提出了二阶几何迭代法,其中他们使用了曲面的法曲率圆局部代替曲面


来计算点投影。Liu等人 [5] 通过将曲面的法曲率圆替换成曲面的密切圆环面片改
进了 [15] 的方法。

1.1.1.2 构造曲面上的曲线

曲面上的曲线在曲面混合、曲面求交、曲面剪切以及曲面的数控路径生成
等问题中起到了重要作用 [16] 。
如何计算曲面上曲线的精确表示在很多文章中都进行了介绍 [17–22] 。然而,
曲线的精确表示往往次数会非常高,这将导致计算量的增加以及数值计算的不
稳定 [4] 。
因此,便出现了很多文章专门讨论如何得到对应曲线的近似表示 [4,16,22–25] 。
在 [16,22–25] 中得到的近似曲线并没有完全落在曲面上,这在很多CAD应用中是不
能够接受的 [4] 。针对这一问题,Yang等人 [4] 给出了解决方案。其中,他们得到
了完全落在B样条曲面上并且具有较低次数的近似Bézier曲线,而且曲线的近似
度和连续性都可以得到控制。

1.1.2 给定方向投影

在法向投影中,如果对待投影曲线与投影曲线之间的映射关系作如下修改,
便可以得到另一种投影类型――给定方向投影。设点p为待投影曲线P(t)上的任
意一点,点q为投影曲线Q(t)上对应p的投影点,点p与点q之间满足条件:

(q − p) × Dir = 0,

并有(q − p) · Dir > 0成立,其中,Dir为一个三维向量,称Dir为投影的方向向


量。给定方向投影的原理如图 1.2所示。
据作者所知,到目前为止还没有论文对给定方向投影进行过讨论。而曲线
到曲面的给定方向投影,可以看作是曲线上的每一个点沿着给定的投影方向在
曲面上的投影,即给定方向投影问题可以转化成直线与曲面求交的计算。因此,
下面针对直线与曲面求交问题进行讨论。
直线与曲面求交是曲线曲面计算中的基础问题,在例如几何造型、机器人
技术、碰撞检测、渲染以及计算机图像等很多领域中都有应用价值 [26] 。

4
第 1 章 引言

P(t)

Q(t)

S (u, v)
Dir

图 1.2 法向投影的定义

通常来说,直线与曲面求交可以归结为对一个非线性方程组进行求解的问
题。由Whitted [27,28] 提出的细分方法首先被用于解决该问题。这种方法非常简
单并且具有很高的鲁棒性,然而当对解的精度要求提高时,该方法的效率就会
变得低下。因此,作为细分方法的一种变形,Nishita等人 [29] 提出了Bézier裁剪
方法,该方法通过计算直线与曲面包围盒的交点来确定需要进行细分的曲面部
分。
另一种更加有效的方法是将细分方法与牛顿法结合起来,而对于牛顿法来
说,初始值的选取在很大程度上决定着其收敛性。一些人研究如何判断对于
一个给定的初始值牛顿法是否会收敛,Toth [30] 利用了区间分析的结果来确定
牛顿法的收敛区间,Lischinski和Gonczarowski [31] 通过利用直线与曲面的连续性
对Toth的算法进行了改进。Srijuntongsiri和Vavasis [26] 通过使用Kantorovich测试,
不但可以判断牛顿法在给定区间上是否收敛,而且可以知道牛顿法在该区间上
是否为二阶收敛。相反的,其他的研究人员则在考虑如何为牛顿法确定一个好
的初始值。他们通过不断地对曲面进行细分,直到每个面片足够平为止。然后
将直线与曲面片包围盒的交点作为牛顿法的初始值 [32–36] 。而Wang等人 [37] 更是
将Bézier裁剪方法与牛顿法结合起来进行直线与曲面的求交计算。

1.2 CATIA和UG中投影功能的实现情况
目 前 大 部 分 的CAD系 统 基 本 上 都 实 现 了 曲 线 曲 面 的 投 影 功 能。 下 面
以CATIA V5R18和UG NX4.0为 例,简 要 说 明 这 些 系 统 对 于 曲 线 曲 面 投 影 功
能的实现情况。其中,CATIA和UG均实现了两种投影。

5
第 1 章 引言

(a) (b)

图 1.3 非特殊情况测试结果举例:(a) UG中曲线在圆锥面上的投影;(b) CATIA中曲线


在拉伸面上的投影

CATIA和UG的投影功能实现的投影曲线类型为:直线段、圆、圆弧、椭
圆、椭圆弧、双曲线、抛物线、自由曲线(样条曲线)八种。实现的投影曲面
类型为:平面、旋转面(球面、柱面、锥面、圆环面)、自由曲面六种(此处只
列出本文中涉及到的曲线曲面类型)。
由于相对于法向投影,给定方向的投影实现原理非常简单,所以本文中只
对CATIA和UG的法向投影功能进行了测试。为了节省篇幅,如果没有特殊说
明,本节中所提到的投影均指法向投影。在下面的测试中,UG中的待投影曲
线采用深色表示,投影曲线采用浅色表示; CATIA中的待投影曲线采用实线表
示,投影曲线采用虚线表示。测试用例一共分成两组,它们的描述如下。
1、第一组为非特殊情况测试,即不考虑奇异情况下的投影。测试覆盖
了CATIA和UG所实现的所有投影曲线曲面类型。如上文中所述,这三个系统
实现的曲线类型有八种,实现的曲面类型有六种,所以如果按照曲线曲面类型
的不同对测试划分等价类,那么测试用例的个数至少应该有48种(为曲线类型
与曲面类型的笛卡尔积的元素个数)。同时由于时间有限,因此本组测试设置
了48个测试用例。测试的结果显示CATIA和UG在全部48个测试用例中都给出了
正确的投影结果,说明CATIA和UG对于各种曲线曲面类型组合的投影都做了实
现。其中,部分测试结果示例如图 1.3所示。
2、第二组测试考虑一些投影中的特殊情况。根据待投影曲线与基曲面的相

6
第 1 章 引言

(a) (b)

图 1.4 待 投 影 曲 线 经 过 曲 面 主 曲 率 中 心:(a) UG中 曲 线 在 圆 柱 面 上 的 投 影;(b)


CATIA中曲线在圆柱面上的投影

对位置关系,将测试分成以下两种情况。
(1)待投影曲线经过基曲面的主曲率中心。当这一情况出现时,待投影曲
线上对应的曲面曲率中心点到曲面的点投影会出现存在多个解的情况。如果没
有对这样的投影点进行处理,就会得到拓扑混乱的投影结果。应该采取一定的
策略,在多个点投影结果中选取一个或者有限个合理的点,从而使投影曲线连
续通过。为了测试CATIA和UG对这一情况的处理效果,本文构造一张圆柱面和
一张球面,并分别构造了两条平面自由曲线通过曲面的曲率中心(对于圆柱面
来说,曲线段与圆柱面的轴有交点;而对于球面来说,曲线段通过球心),然后
分别使用CAITA和UG计算曲线到曲面的法向投影,如图 1.4和1.5所示。对于圆
柱面的情况,应该得到圆柱面母线的一段,而UG和CATIA都提示无投影结果。
对于球面的情况,应该得到球面上的一段圆弧,而UG和CATIA仍然都提示无投
影结果。可见UG和CAITA对这种情况的处理都存在着问题。
(2)法向投影曲线越过基曲面的边界。在这一情况下,根据法向投影的
定义 [1] ,应该将法向投影曲线在基曲面边界处断开,保留法向投影曲线在基
曲面内部的部分。为了测试CATIA和UG对这一情况的处理效果,本文构造了

7
第 1 章 引言

(a) (b)

图 1.5 待投影曲线经过曲面主曲率中心:(a) UG中曲线在球面上的投影;(b) CATIA中


曲线在球面上的投影

两张拉伸面,并分别构造了两条待投影曲线,然后分别使用CAITA和UG计算
曲线到曲面的法向投影,如图 1.6和1.7所示。对应的法向投影曲线将被基曲面
边界断开成多段,应该保留法向投影曲线在基曲面边界内的部分。对于第一
个例子,如图 1.6所示,UG得到了正确的投影曲线,并保留了对应的两段投
影曲线,而CATIA只保留了其中一段投影曲线。对于第二个例子,如图 1.7所
示,UG提示无投影结果,而CATIA又只保留了两段投影曲线的其中一段。可
见UG和CAITA对这种情况的处理同样存在着问题。

1.3 本文工作

针对上述两种投影的研究现状,本文分别设计了针对两种投影的算法,并
且在Gems系统中进行了实现。实现的投影曲线类型包括:直线段、直线、圆、
圆弧、椭圆、椭圆弧、Bézier、有理Bézier、B样条、Nurbs十种曲线类型。实现
的投影曲面的类型包括:平面、球面、圆柱面、圆锥面、圆环面、Bézier曲面、
有理Bézier曲面、B样条曲面、Nurbs曲面九种曲面类型。其中,本文提出了参
数曲线到B样条曲面(对于Nurbs曲面同样适用)的二阶近似法向投影算法。通
过实验验证,该算法是对现有法向投影算法的较大改进。该算法已经被编写为
学术论文,并发表在期刊Computer Aided Design上,该期刊为计算机图形学及

8
第 1 章 引言

(a) (b)

图 1.6 法向投影曲线越过基曲面的边界:(a) UG中单侧出界的情况;(b) CATIA中单侧


出界的情况

(a) (b)

图 1.7 法向投影曲线越过基曲面的边界:(a) UG中双侧出界的情况;(b) CATIA中双侧


出界的情况

辅助设计领域的国际权威期刊。
相对于自由曲线曲面的投影,二次曲线曲面的投影原理比较简单,因此本
文将不会介绍这部分内容。下文中将主要介绍上述二阶近似投影算法在法向投
影上的应用,并将会展示如何使用该算法的思路计算曲线到曲面的给定方向投
影。

9
第 2 章 参数曲线到自由曲面的法向投影

第 2 章 参数曲线到自由曲面的法向投影

正如上一章中所介绍的,现有的法向投影算法存在着缺陷。针对这些缺陷,
本章将介绍一种基于二阶跟踪法的近似法向投影算法。该算法得到的近似曲线
完全落在基曲面上,并且可以控制近似曲线的近似度和连续性,从而克服了现
有算法的缺点,是对现有法向投影算法的改进。本章将详细介绍该算法的原理,
并在最后给出算法的实现效果。
首先给出在下文中将要用到的几个符号。在三维空间中,给定一条参数曲
线P(t)和一张B样条曲面S (u, v)。S (u, v)的表达式为:
nv
nu ∑︁
∑︁
S (u, v) = Nip (u)N qj (v)Pi, j ,
i=0 j=0

其中t ∈ [m, n],u ∈ [a, b],v ∈ [c, d],Pi, j 为控制顶点,Nip (u) 和 N qj (v)分别是B样
条曲面的p次和q次基函数,如图 2.1所示。
假设P(t)到S 的法向投影曲线为Q(t)。由于Q(t)落在S 上,则在S 的参数域中
存在Q(t)的一条原像曲线q(t) = (u(t), v(t))T ,且Q(t) = S (u(t), v(t))成立。本文假
设Q(t)至少为G1 连续,并且q(t)可以用Bézier形式表示。
根据 [1] 中的结论,当在P(t)上移动待投影点时,Q(t)和q(t)可以被连续的跟
踪生成。基于这个结论,本文提出了下面的法向投影算法,该算法可以在S 上
生成Q(t)的一条近似曲线。首先,在S 的参数域中构造一条折线段来近似q(t),

图 2.1 维纳斯的腹部曲面:B样条基曲面以及待投影曲线

10
第 2 章 参数曲线到自由曲面的法向投影

在构造的过程中同时考虑近似曲线与Q(t)之间的Hausdorff距离及其连续性。最
终的三维近似曲线可以通过将近似折线段映射到S 上得到。近似曲线和Q(t)之间
的Hausdorff距离小于εD 。同时,近似曲线的连续性为εT − G1 。其中εT − G1 连续
的意思是指在一条分段曲线中,任意两段相邻的曲线段在它们公共点处的切向
夹角小于εT 。这里εD 和εT 是用户指定的容差。算法的主要流程如下:
1. 使用点投影方法 [5] 计算P(t)的起始点到S 的点投影。
2. 根据得到的投影点,使用二阶跟踪法得到q(t)上的一系列离散点。通过将
这些点设为顶点,便可以得到S 参数域中的一条初始近似折线段。
3. 根据用户指定的Hausdorff距离容差εD ,将q(t)在指定位置处离散,并将
离 散 点 加 入 到 近 似 折 线 段 中, 从 而 保 证 最 终 的 近 似 曲 线 与Q(t)之 间
的Hausdorff距离小于εD 。
4. 根据用户指定的角度容差εT ,将q(t)在指定位置处离散,从而保证最终的
近似曲线至少为εT − G1 连续。
5. 经过上面几步,可以在S 参数域中得到最终的近似折线段,使用开花的方
法 [17,18] 将该折线段映射到曲面上,就可以最终得到Q(t)的三维近似投影曲
线。
下文将详细介绍该算法。

2.1 构造初始近似折线段

首先,需要使用一种二阶跟踪法在S 的参数域中构造初始近似折线段。构
造的过程可以归纳为以下几步:
1. 计算P(t)起始点到S 的点投影,并将投影结果点作为当前的跟踪点。
2. 在S 参数域中计算q(t)在当前跟踪点处的一阶和二阶导数,并且使用二阶
泰勒展开式局部近似q(t)。
3. 使用固定弧长增量计算参数增量,则可以得到P(t)上的下一个待投影点以
及对应的下一个投影点的估计位置。
4. 使用基于牛顿迭代的点投影方法 [8] 对估计点位置进行求精。用一条直线段
连接求精结果点和当前跟踪点,并将该直线段加入到近似折线段中。同
时,将求精结果点作为新的当前跟踪点。

11
第 2 章 参数曲线到自由曲面的法向投影

(a) (b)

图 2.2 维纳斯的腹部曲面:(a) 原B样条基曲面;(b) 剖分之后的结果以及候选曲面片

5. 重复第2∼4步,直到得到的待投影点到达了P(t)的终点,便得到了初始近
似折线段。

2.1.1 跟踪法的准备

假设P0 为P(t)的起始点,为了能够开始跟踪,需要计算P0 到S (u, v)的点投


影。为了这个目的,首先将B样条曲面S (u, v)在其内部节点向量处细分成多
个Bézier曲面片,如图 2.2所示。 接下来使用这一细分结果来计算P0 的点投影,
具体可以由下面两步得到:
1. 如第1.1.1.1节所述,点投影的计算就是在曲面上寻找对应的最近点的过
程。而在上面的细分结果中,并不是所有的曲面片都包含最近距离点。因
此,可以通过排除掉那些不包含最近距离点的曲面片来减少候选曲面片的
数量,如图 2.2 (b)所示,这可以通过使用 [13] 中介绍的曲面片排除方法来
实现。这样便缩小了计算的范围,这也有利于点投影的迭代可靠地收敛。
2. 在第1步之后,对于那些余下的曲面片,使用 [5] 中介绍的点投影方法分别
计算P0 到它们每一个的点投影。在这些投影点中,选择到P0 距离最小的
投影点作为P0 的投影点。将投影点的参数恢复到曲面S 上,便得到了对应
的P0 到S 的投影点。
假设P0 到S 的投影点为Q0 ,那么在S 的参数域中,同时也可以得到q(t)上对
应的原像点q0 。
为了能够控制整个跟踪过程,需要维护两个点变量cur P ∈ R3 和cur Q ∈

12
第 2 章 参数曲线到自由曲面的法向投影

R2 ,来存储当前的待投影点以及对应q(t)上的当前跟踪点。cur P和cur Q分别


在P(t)和q(t)上有相同的参数值。
得到了P0 的投影点之后,将点q0 作为当前跟踪点cur Q,同时将P0 作为当前
的待投影点cur P。为了能够继续跟踪,需要根据cur Q来得到下一个跟踪点。

2.1.2 法向投影的一阶和二阶微分方程组

本文希望使用q(t)在cur Q处的二阶泰勒展开式来估计下一个跟踪点。因此,
需要计算q(t)在cur Q处的一阶和二阶导数。根据 [1] 中介绍的法向投影的一阶
导数公式,本文将在这一节中推导法向投影的二阶导数公式。假设曲面S 至少
为C 3 连续。
首先介绍 [1] 中提出的法向投影张量的概念:

定义 2.1: 假设点p为P(t)上的任意一点,点q是p在Q(t)上的法向投影点。法向
投影张量的定义为:

k11 = S u · S u + (q − p) · S uu , k12 = S u · S v + (q − p) · S uv ,

k21 = S v · S u + (q − p) · S vu , k22 = S v · S v + (q − p) · S vv ,

其中S uu ,S uv 和S vv 分别是S 的二阶偏导数。同时也可以得到一个以法向投影张


量为系数的矩阵K:
⎡ ⎤
⎢⎢⎢k
11 k12 ⎥
⎥⎥
K = ⎢⎢⎢⎢⎣ ⎥⎥⎥⎥ 。
k21 k22 ⎦

Pegna 和 Wolter [1] 首先推导了法向投影的一阶微分方程组。本文将他们的


结论以引理的形式总结如下:

引理 2.1: 对于法向投影,当待投影曲线P(t)不经过S 的任何一个主曲率中心


时,q(t)的一阶导数可以通过下面的式子计算:
⎡ ⎤
⎢⎢⎢ d p ⎥
⎢⎢⎢ · S ⎥⎥⎥⎥⎥
du dv u⎥
q′ (t) = ( , )T = K −1 · ⎢⎢⎢⎢ dt ⎥⎥⎥ 。
⎢⎢ ⎥⎥⎥
dt dt ⎢⎢⎢ d p ⎥
⎣⎢ · S v ⎥⎦⎥
dt

13
第 2 章 参数曲线到自由曲面的法向投影

证明 根据式(1-1),在 [1] 中得到了下面的关于 du dv


dt 和 dt 的表达式:

du dv d p

k + k12 = · Su


⎨ 11 dt

dt dt


。 (2-1)

⎪ du dv d p
⎩ k21 + k22 =


⎪ · Sv
dt dt dt
当待投影曲线P(t)不经过S 的任何一个主曲率中心时,矩阵K会保持非奇
异 。那么上述方程可以按照如下方式求解:
[1]

⎡ ⎤
⎢⎢⎢ d p ⎥⎥
(︃ )︃T ⎢⎢⎢⎢ · S u ⎥⎥⎥⎥⎥
du dv
q′ (t) = , = K −1 · ⎢⎢⎢⎢ dt ⎥⎥⎥ 。 (2-2)
⎢ ⎥⎥⎥
dt dt ⎢⎢⎢ d p ⎥⎥⎥
· S v⎦
⎢⎣
dt
证毕。 

下面推导法向投影所满足的二阶微分方程组。对式(2-1)两端取关于t的导
数,可以得到:
)︃′
d2 u d2 v
⎧ (︃
du dv dp
+ (k11 )′ + k12 2 + (k12 )′ =

k · Su


⎪ 11 2
dt dt dt dt dt



)︃′ 。 (2-3)

d2 u d2 v
⎪ (︃
⎪ du dv dp
+ (k21 )′ + k22 2 + (k22 )′ =



⎪ k 21 · Sv
dt2

⎩ dt dt dt dt

为了提高表达式的可读性,引入两个变量代替式(2-3)中的一些项:
(︃ )︃′ (︃ )︃
dp ′ du ′ dv
rel 1 = · S u − (k11 ) + (k12 ) , (2-4)
dt dt dt

(︃ )︃′ (︃ )︃
dp ′ du ′ dv
rel 2 = · S v − (k21 ) + (k22 ) 。 (2-5)
dt dt dt

根据求导法则,可以得到:
)︃′
d2 p
(︃ (︃ )︃
dp dp du dv
· Su = 2 · Su + · S uu + S uv ,
dt dt dt dt dt

)︃′
d2 p
(︃ (︃ )︃
dp dp du dv
· Sv = 2 · Sv + · S vu + S vv ,
dt dt dt dt dt

14
第 2 章 参数曲线到自由曲面的法向投影

du
(k11 )′ = (3S u · S uu + (q − p) · S uuu )
dt
dv dp
+ (2S u · S uv + S v · S uu + (q − p) · S uuv ) − · S uu ,
dt dt

du
(k12 )′ = (k21 )′ = (S uu · S v + S vu · 2S u + (q − p) · S uuv )
dt
dv dp
+ (S uv · 2S v + S vv · S u + (q − p) · S uvv ) − · S uv ,
dt dt

dv
(k22 )′ = (3S v · S vv + (q − p) · S vvv )
dt
du dp
+ (2S v · S uv + S u · S vv + (q − p) · S vvu ) − · S vv ,
dt dt

其中S uuu ,S uuv ,S vvu 和S vvv 分别是S 的三阶偏导数。将上面的各式分别代入到


式(2-4)和式(2-5)中,可以得到rel 1和rel 2的表达式为:

d2 p
(︃ )︃
dp du dv
rel 1 = 2 · S u + 2 · S uu + S uv
dt dt dt dt
⎛(︃ )︃2
⎜⎜ du
− ⎜⎜⎜⎝ (3S u · S uu + (q − p) · S uuu )
dt
(︃ )︃
du dv
+ (4S u · S uv + 2S v · S uu + 2 (q − p) · S uuv )
dt dt
(︃ )︃2 ⎞
dv
+ (2S v · S uv + S u · S vv + (q − p) · S uvv )⎟⎟⎟⎠ ,
⎟⎟
dt

d2 p
(︃ )︃
dp du dv
rel 2 = 2 · S v + 2 · S vu + S vv
dt dt dt dt
⎛(︃ )︃2
⎜⎜ dv
− ⎜⎜⎜⎝ (3S v · S vv + (q − p) · S vvv )
dt
(︃ )︃
du dv
+ (4S v · S vu + 2S u · S vv + 2 (q − p) · S vvu )
dt dt
(︃ )︃2 ⎞
du
+ (S v · S uu + 2S u · S vu + (q − p) · S vuu )⎟⎟⎟⎠ 。
⎟⎟
dt

15
第 2 章 参数曲线到自由曲面的法向投影

因此式(2-3)的表达式就可以使用rel 1和rel 2简化如下:


d2 u d2 v

+ 12 2 = rel 1

k k


⎨ 11 dt2

dt


2
。 (2-6)
d2 v

⎪ d u
⎩ k21 2 + k22 2 = rel 2




dt dt
将式(2-6)写成矩阵形式:
⎡ ⎤
⎢⎢⎢ d2 u⎥⎥⎥ ⎡ ⎤
⎢⎢⎢⎢ ⎥⎥ ⎢
1⎥⎥⎥⎥
⎢⎢⎢ dt2 ⎥⎥⎥⎥⎥ ⎢⎢⎢⎢rel
K · ⎢⎢ =⎢ ⎥⎥⎥ 。 (2-7)
⎢⎢⎢ d2 v⎥⎥⎥⎥⎥ ⎢⎣rel 2⎦
⎢⎣ ⎥⎦
dt 2

同时,假设待投影曲线P(t)不经过S 的任何一个主曲率中心,通过对式(2-7)进行
求解,便可以得到如下的法向投影所满足的二阶微分方程组:
⎡ ⎤
2 T
(︃ 2 )︃ ⎢⎢⎢rel 1⎥⎥⎥
d u d v
q′′ (t) = , = K −1 · ⎢⎢⎢⎢⎣ ⎥⎥⎥⎥ 。 (2-8)
dt2 dt2 rel 2⎦

2.1.3 得到下一个投影点

本文使用q(t)在cur Q处的二阶泰勒公式计算下一个跟踪的估计位置,其表
达式如下:
q′′ (t0 )∆t2
q(t0 + ∆t) = q(t0 ) + q′ (t0 )∆t + + o(∆t2 ), (2-9)
2
其中q(t0 ) = cur Q,∆t是参数增量,o(∆t2 )是二阶泰勒余项。余项为一个向量值
函数 f (∆t),并且 lim f (∆t)/∆t2 = 0成立。通过忽略该表达式的余项,便可以得
∆t→0
到如下的多项式:
q′′ (t0 )∆t2
q(t0 + ∆t) = q(t0 ) + q (t0 )∆t +

, (2-10)
2
这里使用该式来局部近似q(t)。给定t0 的值,可以分别使用式(2-2)和式(2-8)来计
算q′ (t0 )和q′′ (t0 )的值。因此在式(2-10)中,唯一的未知量就是∆t,而∆t值的选取
会直接影响到采样点的分布和最终的近似效果。
在构造初始近似折线段的过程中,为了能够得到一个均匀分布的采样点序
列,本文提出了一种基于固定弧长增量的参数增量控制方法。

16
第 2 章 参数曲线到自由曲面的法向投影

假设ds和dt分别表示Q(t)的弧长微分和参数微分,那么下面的式子成立:
⃒ ⃒
ds = ⃒⃒Q′ (t)⃒⃒ dt。

根据求导的链式法则,可以得到关于Q′ (t)的表达式:
du dv
Q′ (t) = S u + Sv , (2-11)
dt dt
其中,S u ,S v , du dv
dt , dt 的值都可以根据t0 的值来分别得到。因此,使用用户指定
的Q(t)上的弧长增量 ∆s,对应的参数增量∆t为:
∆s
∆t = 。 (2-12)
|Q′ (t)|

将得到的∆t带入到式(2-10)中,q(t)上下一个跟踪点的估计位置就可以根据q(t0 +
∆t)来得到。
通常,得到的估计点位置与真实点不同,也就是说估计存在着误差。根据
式(1-2)中法向投影的定义,本文将估计的误差定义为:
‖N(u, v)× (S (u, v) − cur P)‖
ε= , (2-13)
‖S (u, v) − cur P‖

其 中, (u, v) = q(t0 + ∆t)是 跟 踪 法 在 曲 面 参 数 域 中 得 到 的 估 计 点 位 置,


S (u, v)是(u, v)在曲面S 上的三维映射点,N(u, v)是S 上对应的指向外侧的单位
法向量。ε的几何意义是N(u, v)和(S (u, v) − cur P)之间夹角正弦的绝对值。特别
的,当S (u, v)与点cur P重合时,式(2-13)因为分母为零而没有意义。在这种情况
下,本文认为误差 ε = 0,因为这时cur P落在曲面S 上,而S (u, v)恰好是它的投
影点。
为了得到精确点,需要对估计点进行求精。将P(t0 + ∆t)设为新的待投影
点cur P,可以根据用户指定的容差,使用 [8] 中介绍的基于牛顿迭代法的点投影
算法对估计点进行求精。其中,将得到的三维估计点S (u, v)作为迭代的初始点,
将cur P作为待投影点。同时采用 [8] 中定义的迭代的收敛条件:
1. ‖(ui+1 − ui )S u (ui , vi ) + (vi+1 − vi )S v (ui , vi )‖ ≤ ε1 ,
2. ‖S (ui , vi ) − cur P‖ ≤ ε1 ,
|S u (ui , vi )· (S (ui , vi ) − cur P)| |S v (ui , vi )· (S (ui , vi ) − cur P)|
3. ≤ ε2 , ≤ ε2 。
‖S u (ui , vi )‖ · ‖S (ui , vi ) − cur P‖ ‖S v (ui , vi )‖ · ‖S (ui , vi ) − cur P‖

17
第 2 章 参数曲线到自由曲面的法向投影

v v

u u
(a) (b)

图 2.3 曲面S 参数域中的初始近似折线段,其中:(a) ∆s = 0.1;(b) ∆s = 0.05

这里(ui , vi )是第i次迭代的参数,ε1 ,ε2 分别是欧氏距离和余弦的容差。如果上面


三个条件中的任何一个得到满足,那么迭代收敛停止。迭代的收敛性取决于估
计得到的初始值的误差,而且如第2.3节所示,本文算法的估计误差与目前常用
的一阶算法 [1,2] 相当。
假设next Q ∈ R2 为在S 参数域中对估计点的求精结果。使用直线段L连
接cur Q和next Q,并且将L加入到近似折线段中。将next Q设为新的跟踪点,
然后继续寻找下一个跟踪点。
算法将一直对投影曲线进行跟踪,直到得到的待投影点到达了P(t)的结束
点。这样,就在S 的参数域中得到了q(t)的初始近似折线段,如图 2.3所示。

2.1.4 待投影曲线经过曲面曲率中心情况的处理

第2.1.2节中,在推导q(t)的一阶和二阶导数的时候,本文假设待投影曲
线P(t)不经过S 的任何一个主曲率中心,从而保证矩阵K 为非奇异矩阵。很明显
的,这一假设在实际情况中并不总是成立。那么当P(t)恰好经过S 的主曲率中心
时,如何估计下一个跟踪点的位置?为了处理这种情况,本文提出了另一种估
计方法。这一方法计算当前跟踪点处 du dv
dt 和 dt 的近似值,并且使用一段三次弗格
森曲线来估计下一个跟踪点的位置。

18
第 2 章 参数曲线到自由曲面的法向投影

首先,以多项式形式重写式(2-2):




⎪ dp


⎪ du · (k22 S u − k21 S v )




⎪ = dt
⎨ dt

⎪ k11 k22 − k21 k12

⎪ 。 (2-14)
dp




· (k11 S v − k12 S u )


dv

dt

=




dt k11 k22 − k21 k12

假设当前的待投影点cur P为曲面S 在S (cur Q)处的主曲率中心,因此矩阵K为


奇异矩阵,并且有以下的式子成立:

|K| = k11 k22 − k21 k12 = 0,

即会导致式(2-14)中的分母为零而使其没有意义。在这种情况下,先将式(2-
14)中的两个式子相除,即可消去零项(k11 k22 − k21 k12 ),从而可以得到下面的式
子:

du dp
· (k22 S u − k21 S v )
dt = dt , (2-15)
dv dp
· (k11 S v − k21 S u )
dt dt
此式即为曲线q(t)的切向。这意味着,即使待投影曲线P(t)确实经过S 在cur P处
的主曲率中心,也可以计算曲线q(t)在cur Q处的切向。
对式(2-10)两端分别关于∆t求导,则可以得到:

q′ (t0 + ∆t) = q′ (t0 ) + q′′ (t0 )∆t, (2-16)

其中t0 是前一个跟踪点的参数值,∆t是cur Q处的参数增量。同时,可以分别得


到式(2-16)在u向和v向的表达式:

d2 u ⃒⃒⃒
⃒ ⃒
du ⃒⃒ du ⃒⃒
⃒ = ⃒ + ∆t 2 ⃒ , (2-17)
dt ⃒t=t0 +∆t dt ⃒t=t0 dt ⃒t=t0


d2 v ⃒⃒⃒
⃒ ⃒
dv ⃒⃒ dv ⃒⃒
⃒ = ⃒ + ∆t 2 ⃒ 。 (2-18)
dt ⃒t=t0 +∆t dt ⃒t=t0 dt ⃒t=t0

19
第 2 章 参数曲线到自由曲面的法向投影

根据式(2-17)和式(2-18),便可以分别得到 du dv
dt 和 dt 的值,并且可以使用这两个值
du dv
来临时近似 dt 和 dt 在cur Q处的值。
假设A = dudt + dt ,B等于式(2-15)的右端值,那么便可以得到下面的近似方
dv

程组:



⎪ du dv
⎨ dt + dt = A





⎪ 。


⎪ du/dt
=B




dv/dt

dt 和 dt 近似值的计算表达式: dt =
对该方程组进行求解,便得到了 du =
dv du AB dv
1+B , dt
A
1+B 。
du1 dv1 du1 dv1
假设在cur Q处得到的 du dv
dt 和 dt 的近似值为 dt 和 dt ,下面将根据 dt 和 dt 使用
一条三次弗格森曲线段来估计下一个跟踪点的位置。首先,引入以下符号:
P0 , P0 ′ , P1 , P1 ′ 。其中,P0 ′ 和P0 分别是前一个跟踪点的一阶导数和位置矢量,
P1 ′ 和P1 分别是当前跟踪点的一阶导数和位置矢量,并且有P1 ′ = ( du
dt , dt ) 。同
1 dv1 T

时,假设P0 和P1 的t参数值分别为t0 和t1 。令F0 (t)、F1 (t)、G0 (t)和G1 (t)分别是三


次调和函数,那么就可以得到如下的连接P0 和P1 的三次弗格森曲线段C:

C (s) = F0 (s) P0 + F1 (s) P1 + G0 (s) P0 ′ + G1 (s) P1 ′ , (2-19)

其 中, s为 三 次 弗 格 森 曲 线 的 参 数。 由 式(2-19)定 义 的 曲 线 段 在P0 和P1 处


与q(t)G1 连接,因此本文使用C(s)来近似q(t)上的对应曲线段。
根 据 du dv1
dt 和 dt , 可 以 使 用 式(2-11)和 式(2-12)得 到 近 似 参 数 增 量∆t。 根
1

据t和s之间的比例关系,可以使用下面的线性变换得到C(s)上下一个跟踪点
的s参数值:
∆t
s=1+ 。
t1 − t0
将s的值代入到式(2-19)中,便可以得到下一个跟踪点的估计位置。
在实现的过程中,如果根据当前跟踪点得到的矩阵K为奇异矩阵,那么就
在已经得到的跟踪点序列中找到最近的非奇异跟踪点,即对应待投影点不是曲
面主曲率中心的点,然后再使用上述方法来使跟踪继续下去。
特殊地,如果当前跟踪点恰好是q(t)的起始点,并且对应得到的矩阵K为奇

20
第 2 章 参数曲线到自由曲面的法向投影

异矩阵,本文按照下述方法进行处理。首先,按照用户指定的固定参数增量
∆t增加参数值,直到得到的待投影点不是对应曲面的主曲率中心。假设能够得
到这样的点,那么就将P(t)从这一点处断开成两段曲线,并且将它们分别法向
投影到曲面S 上。然后连接两段投影曲线作为P(t)到S 的法向投影曲线。否则,
如果得到的所有待投影点都位于曲面S 的主曲率中心。在这种情况下,本文认
为法向投影没有意义,无投影结果。

2.1.5 法向投影曲线出界情况的处理

在对初始近似折线段进行跟踪的过程中,法向投影曲线可能会超出基曲面
的边界,根据法向投影的定义 [1] ,落在基曲面之外的曲线部分不属于法向投影
曲线,因此不需要将出界的部分加入到投影曲线当中,即法向投影曲线会被基
曲面的边界所截断。如第1.2节中介绍的,CATIA只保留第一次遇到基曲面边界
之前的投影曲线段。然而,投影曲线的剩余部分也有可能回到基曲面的有效区
域之内,因此本文认为仍然有必要对该部分出界曲线进行计算。
本文采用如下的方式进行处理。如第2.1.3节所述,首先根据当前跟踪点来
估计下一个跟踪点的位置,然后再使用 [8] 中的点投影方法对估计位置进行求精。
而 [8] 中介绍的点投影方法在投影点出界的情况下,会将投影点拉回曲面边界继
续迭代,这样就不能达到本文所期望的那样在曲面的界外进行跟踪,因此本文
对该方法进行了如下修改。设在使用点投影进行求精的过程中,当前的迭代参
数为(ui , vi ),曲面的定义域为[a, b] × [c, d],其中a, b, c, d ∈ R。
在对估计跟踪点进行求精的时候,点投影出界的情况分成两种:在曲面的
封闭边界(如回转面)出界和在曲面的非封闭边界出界。
首先,对于在曲面的封闭边界出界的情况,使用 [8] 中的处理方式,即:
以u向为例,假设曲面在u向是封闭的。如果ui ≤a,则做赋值ui = b − (a − ui );如
果ui >b,则做赋值ui = a + (ui − b)。同理对于v向的情况,也按照相同的方式进
行处理。
其次,如果点投影在曲面的非封闭边界出界,为了能够计算投影轨迹在该
点处的一阶和二阶导数,进而估计下一个投影点的位置,所以需要得到在整个
实数空间中的真实投影结果。因此不能使用 [8] 中的处理方式将投影点拉回边界,
而需要在曲面参数域中对于整个的实数空间中进行迭代,得到点投影结果,如

21
第 2 章 参数曲线到自由曲面的法向投影

图 2.4中的点P(ti )。因此,对于非封闭与封闭边界的出界情况,本文算法都可以
越过边界继续跟踪,如图 2.4所示。区别在于,对于封闭边界情况,可以保留越
界之后的投影曲线部分,如图 2.4(a)所示;而对于非封闭边界情况,需要将投
影曲线在边界处断开,如图 2.4(b)所示。因此,需要得到投影曲线与边界的交
点,即投影曲线的断开点,本文使用下面的方式计算。
假设P(ti )为基曲面参数域中的当前跟踪点,且P(ti )出界,其对应的参数域
坐标为(ui , vi ); P(ti−1 )为前一个跟踪点,且P(ti−1 )在界内,其对应的参数域坐标
为(ui−1 , vi−1 )。
以边界u = a为例,该边界在曲面上对应着一条边界曲线,需要计算待投影
曲线上的对应点在该边界曲线上的点投影,并将点投影结果作为投影曲线在曲
面边界处的断开点。先需要得到断开点在投影曲线上对应的参数值。设对应的
参数值为t0 ,使用如下的式子得到t0 的近似值:
a − ui t0 − ti
= 。
ui−1 − a ti−1 − t0
对上式整理进行整理,可得t的计算公式:
ti (ui−1 − a) + ti−1 (a − ui )
t0 = 。
ui−1 − ui
得到近似参数后,便可以得到对应的待投影点P(t0 )。取P(ti )和P(ti−1 )连线与边
界u = a的交点作为点投影迭代的初始点。该初始点在参数域上的坐标InitP为:
vi (ui−1 − a) + vi−1 (a − ui )
(︃ )︃
a, 。
ui−1 − ui

然后便可以使用 [8] 中介绍的点到曲线的点投影算法来计算投影曲线上在对应边


界处的断开点,如图 2.4(b)所示。

2.2 控制近似曲线的近似度和连续性
在这一节中,根据得到的初始近似折线段,本文将要通过在q(t)上进一步采
样来控制Q(t)与近似曲线之间的误差。而且,在本节的最后还要介绍如何控制
近似曲线的连续性。
首先给出误差控制过程中将要涉及到的一些基本定义和定理。

22
第 2 章 参数曲线到自由曲面的法向投影

界外 界内 界外 界内

v v InitP
P(ti ) P(ti−1 ) P(ti ) P(ti−1 )
u u P̄(t0 )

(a) (b)

图 2.4 投影曲线出界情况的处理:(a) 封闭曲面情况;(b) 非封闭曲面情况

C(t) P0
L(t)
Q
P1
C(t) P1
L(t)
P0
(a) (b)

图 2.5 [4]
曲线段的两种类型:(a) 单侧曲线段;(b) 双侧曲线段

2.2.1 基本定义和定理介绍

在构造初始近似折线段的过程中,q(t)也同时被折线段的间断点分成了很多
条曲线段。假设C(t)为q(t)上任意一条曲线段,而L(t)为近似折线段中连接C(t)两
个端点的直线段。根据曲线段和对应直线段之间的相对位置,曲线段C(t)可以
被分成下面两种类型 [4] :
1. 单侧曲线段:曲线段C(t)落在L(t)的一侧,如图 2.5(a)所示。
2. 双侧曲线段:曲线段C(t)分布在L(t)两侧,如图 2.5(b)所示,双侧曲线段可
以在与L(t)的交点处分成多条单侧曲线段。
为 了 控 制 近 似 曲 线 的 近 似 度, 本 文 下 面 引 入Hausdorff距 离 的 概 念,

23
第 2 章 参数曲线到自由曲面的法向投影

而Hausdorff距离正是不同对象之间差别的一种度量。

定义 2.2: 给定单独的一个点P和一个非空有界闭集A,P到A的距离定义为:
‖P − A‖ = min ‖P − Q‖。
Q∈A

定义 2.3: 给 定 两 个 非 空 有 界 闭 集A和B, 从A到B的 单 向Hausdorff距 离 定


义 为: h(A, B) = max ‖P − B‖。 A和B之 间 的Hausdorff距 离 为: H(A, B) =
P∈A
max(h(A, B), h(B, A))。

因 此, C(t)和L(t)之 间 的Hausdorff距 离 为H(C(t), L(t)) =


max(h(C(t), L(t)), h(L(t), C(t)))。 特 别 的, 如 果C(t)为 一 条 单 侧 曲 线 段, 那
么 根 据 [4] 中 的 证 明, C(t)和L(t)之 间 的Hausdorff距 离 就 等 于C(t)到L(t)的 单
向Hausdorff距离,也就是说有下面的式子成立:

H(C(t), L(t)) = h(C(t), L(t))。 (2-20)

对应的,如果C(t)为一条双侧曲线段,式(2-20)就不总是成立了。在 [4] 中,所有


双侧曲线段都被断开成了单侧曲线段。因此会使曲线段的段数增加,从而导致
了计算复杂度的上升以及最终的近似曲线表达式更加复杂。为了克服这一缺点,
下面将会讨论如何在计算Hausdorff距离的过程中,尽量不将双侧曲线段断开成
多段单侧曲线。为此,先给出下文中将会用到的几个定理。

引理 2.2: 给定三个非空有界闭集A,B和C,假设A到C的单向Hausdorff距离
为ε1 ,B到C的单向Hausdorff距离为ε2 , A ∪ B到C的单向Hausdorff距离为ε。那
么有下面的不等式成立:

ε ≤ max(ε1 , ε2 )。

证明 对于所有的P ∈ A ∪ B,P ∈ A或者P ∈ B成立。根据点到点集距离的定义,


得:
如果P ∈ A,那么P到C的距离:‖P − C‖ ≤ ε1 ,否则如果P ∈ B,那么P到C的
距离: ‖P − C‖ ≤ ε2 。
综上所述,P到C的距离: ‖P − C‖ ≤ max(ε1 , ε2 )。

24
第 2 章 参数曲线到自由曲面的法向投影

C3
C(t) C1

L3
L2
L1
L(t) C2

图 2.6 双侧曲线段与其对应直线段之间的Hausdorff距离

同时,因为P是集合A ∪ B中的任意一点,所以下面的式子成立:

h(A ∪ B, C) = max ‖P − C‖ = ε ≤ max(ε1 , ε2 )。


P∈A∪B

证毕。 

在曲面S 的参数域中,假设C(t)为任意一条双侧曲线段,L(t)为对应的直线
段。C(t)和
̃︀ L(t)分别是C(t)和L(t) 在S 上的三维映像曲线。
̃︀
C(t)和L(t)可 以 互 相 分 割 成 多 条 单 侧 曲 线 段 和 对 应 的 直 线 段:
C1 , C2 , . . . , Cn 和L1 , L2 , . . . , Ln 。同时,假设他们在S 的三维映像曲线分别为:
̃︁1 , C
C ̃︁2 , . . . , C
̃︁n 和L̃︀1 , L̃︀2 , . . . , L̃︀n 。

定理 2.1: 假 设(C1 , L1 ),(C2 , L2 ),. . .,(Cn , Ln )之 间 的Hausdorff距 离 分 别 为:


ε1 ,ε2 ,. . .,εn 。同时,假设C(t)和L(t)之间的Hausdorff距离为ε。那么下面的式
子成立:

ε ≤ max(ε1 , ε2 , . . . , εn )。

证明 不失一般性,置n = 3,如图 2.6所示。因此,就有三对单侧曲线段和直线


段:C1 ,C2 ,C3 和L1 ,L2 ,L3 。
首先,考虑从C(t)到L(t)的单向Hausdorff距离:
以C1 为例,假设C1 和L1 之间的Hausdorff距离为ε1 。∀P ∈ C1 ,由于L1 ⊂ L(t),
因此有下式成立:

‖P − L(t)‖ ≤ ‖P − L1 (t)‖ 。 (2-21)

25
第 2 章 参数曲线到自由曲面的法向投影

同时,因为C1 和L1 之间的Hausdorff距离为ε1 ,有下式成立:

‖P − L1 (t)‖ ≤ ε1 。 (2-22)

综合式(2-21)和式(2-22),有下式成立:

‖P − L(t)‖ ≤ ε1 。

由于P为C1 上的任意一点,根据上面的不等式,下式成立:

max ‖P − L(t)‖ ≤ ε1 。
P∈C1 (t)

所以,根据单向Hausdorff距离的定义,从C1 到L(t)的单向Hausdorff距离小于ε1 。
类似地,这样的结论也成立:C2 ,. . .,Cn 到L(t)的单向Hausdorff距离分别小
于ε2 ,. . .,εn 。综上,根据引理2.2,下式成立:

h(C(t), L(t)) ≤ max(ε1 , ε2 . . . εn )。

反过来,如果要考虑从L(t)到C(t)的单向Hausdorff距离,那么使用与上面相
似的证明就可以得到下面的结论:

h(L(t), C(t)) ≤ max(ε1 , ε2 . . . εn )。

回顾Hausdorff距离的定义:

H(C(t), L(t)) = max(h(C(t), L(t)), h(L(t), C(t)))。

因此,有下式成立:

H(C(t), L(t)) ≤ max(ε1 , ε2 . . . εn )。

证毕。 

因此,可以通过有关单侧曲线段Hausdorff距离的计算来得到有关双侧曲线
段Hausdorff距离的上限。
同时,使用相似的证明过程,定理2.1可以很容易地推广到三维,即:

26
第 2 章 参数曲线到自由曲面的法向投影

v
D3
D2
Q2Q4
D1 Q3
C(t)
Q1
Pn
L(t)
P0

u
图 2.7 [4]
单侧曲线段与其对应的直线段

定理 2.2: 假 设(C ̃︁1 , L̃︀1 ), (C


̃︁2 , L̃︀2 ), . . ., (C
̃︁n , L̃︀n )之 间 的 Hausdorff距 离 分 别 为:
ε̃︀1 , ε̃︀2 ,. . ., ε̃︀n 。同时,假设C(t)和 ̃︀ L(t)之间的Hausdorff距离为̃︀
̃︀ ε,那么有下式
成立:

ε ≤ max(ε̃︀1 , ε̃︀2 , . . . , ε̃︀n )。


̃︀

2.2.2 计算单侧和双侧曲线的Hausdorff距离

给 定 一 条 单 侧 曲 线 段C(t)以 及 对 应 的 直 线 段L(t), L(t)连 接C(t)的 两 个 端


点P0 和Pn 。为了能够计算H(C(t), L(t)),在 [4] 中,C(t)被L(t)两个端点处的垂线分
成了三个区域:D1 ,D2 和D3 ,如图 2.7所示。为了计算从C(t)到L(t)的最远点,
Yang等人 [4] 将候选的最远点分成了如下三类:
1. 过L(t)两 端 点 的 垂 线 与C(t)的 交 点, 例 如 图 2.7中 的 点Q1 和Q2 。
设Dir为L(t)的方向向量,即Dir平行于向量(Pn − P0 )。由于Q1 为L(t)过P0 的
垂线与C(t)的交点,因此向量(Q1 − P0 )垂直于Dir。所以Q1 在C(t)上的参数
值满足如下方程:

(C(t) − P0 ) · Dir = 0。 (2-23)

可以使用迭代法对式(2-23)进行求解,从而得到Q1 在C(t)上的参数值。类
似地Q2 在C(t)上的参数值也可以通过对下面的方程进行求解来得到:

(C(t) − Pn ) · Dir = 0。 (2-24)

27
第 2 章 参数曲线到自由曲面的法向投影

2. C(t)上切向量与Dir平行的点,例如图 2.7中的点Q3 。设V Dir为L(t)的法向


量,即V Dir与Dir垂直。因此, Q3 在C(t)上的参数值满足如下方程:

C ′ (t) · V Dir = 0, (2-25)

其中,C ′ (t)表示C(t)的一阶导数。
3. 位于C(t)上且其切向垂直于它与L(t)端点连线的点,例如图 2.7中的点Q4 。
同样的,通过求解方程:

C ′ (t) · (C(t) − P0 ) = 0, (2-26)

C ′ (t) · (C(t) − Pn ) = 0, (2-27)

便可以分别得到C(t)上位于区域D1 和D3 中候选点的参数值。


正如上面提到的,候选点的参数值可以通过使用迭代法对式(2-23)∼式(2-
27)求解得到。但是与 [4] 不同的是,本文并不知道曲线q(t)的精确表达式。因此,
本文使用下面的方法进行处理。
以牛顿迭代法为例,设 f (t) = 0表示式(2-23)∼式(2-27)中的一个式子。根据
牛顿迭代法的定义,迭代的步长定义为:

f (ti−1 )
ti = ti−1 − ,
f ′ (ti−1 )
其中,ti−1 和ti 分别是第(i−1)次和第i次的迭代参数。因此,这里不需要知道 f (t)的
精确表达式,而只需要计算 f (t) 和 f ′ (t)在一些给定参数处的值。
例如,如果需要得到第二类候选点,即需要对式(2-25)进行求解,因此有如
下的对应关系:

f (t) = C ′ (t) · V Dir,

f ′ (t) = C ′′ (t) · V Dir。

所以,需要根据一个给定的参数值来计算C ′ (t)和C ′′ (t),而这正是第2.1节所关


注的内容。所以在第 2.1节中介绍的跟踪法的辅助下,可以使用迭代法对式(2-

28
第 2 章 参数曲线到自由曲面的法向投影

25)进行求解,并且可以得到第二类候选点。类似地,也可以使用迭代法计算另
外两类候选点。
对于得到的每个候选点,计算它们到L(t)的距离,并且取距离最大的点作
为C(t)到L(t)的最远点。相应的最大距离即为从C(t)到L(t)的单向Hausdorff距离。
根据式(2-20),这同时也是C(t)和L(t)之间的Hausdorff距离。
也就是说,现在已经可以计算关于单侧曲线段的Hausdorff距离。相应地,
对于双侧曲线段,本文按照下面的方式处理。
如果C(t)为一条双侧曲线段,本文首先将它在与L(t)的交点处断开成多条单
侧曲线段。而交点可以通过使用迭代法对如下方程进行求解来得到:

(C(t) − P0 ) · V Dir = 0,

其中,P0 为L(t)的两个端点之一,V Dir为L(t)的法向量。对于图 2.8中所示的曲


线,双侧曲线段C(t)在其与直线段L(t)的内部交点P1 与P2 处断开成三条单侧曲
线段。然后,使用前面介绍的方法计算每一段单侧曲线段与对应直线段之间
的Hausdorff。根据定理2.1,便可以计算C(t)与L(t)之间Hausdorff距离的上限。
因 此, 不 管 曲 线 段C(t)属 于 哪 种 类 型 (单 侧 或 者 双 侧), 都 可 以 计
算C(t)与L(t)之 间Hausdorff距 离 的 上 限。目 前 唯 一 的 问 题 就 是,给 定 任 意 一
对曲线段 C(t)和对应的直线段L(t),如何判断C(t)是单侧曲线段还是双侧曲线
段。本文使用如下的方式来进行判断。
因 为L(t)连 接C(t)的 两 个 端 点, 根 据 拉 格 朗 日 定 理, 知 道 一 定 至 少 存
在C(t)上的一个点p,并且保证C(t)在点p处的切向平行于L(t),而这也恰好满
足第二类候选点的定义。因此本文首先使用迭代法计算C(t)上的第二类候选点,
而根据上面所说的,至少可以得到一个解。如果得到的所有的点都落在L(t)的一
侧,那么C(t)就是单侧曲线段,否则为双侧曲线段,如图 2.8所示。

2.2.3 控制近似曲线的近似度

给定一张Bézier曲面,设其表达式为:
m ∑︁
∑︁ n
T (u, v) = Bm n
i (u)B j (v)Pi, j 。
i=0 j=0

29
第 2 章 参数曲线到自由曲面的法向投影

C3
C(t) C1

L3
L2
L1 P3
P2
L(t) P0 P1 C2

图 2.8 双侧曲线段与其对应的直线段

假 设C(t)为T 参 数 域 中 的 一 条 曲 线 段,而L(t)为 连 接C(t)两 个 端 点 的 直 线 段;


C(t)和
̃︀ L(t)分别是C(t)和L(t) 在T 上的三维映像曲线。Yang等人 [4] 推导了如下的参
̃︀
数域中和三维空间中Hausdorff距离的映射关系:
ε
dm = ⃦⃦ ⃦⃦ D ⃦ ⃦, (2-28)
nmax ⃦Ph,i+1 − Pk,i+1 ⃦ + mmax ⃦⃦Pi+1,h − Pi,k ⃦⃦
i,h,k i,h,k

其中,εD 是用户指定的三维中间中的Hausdorff距离容差,而dm是对应曲面参数
域中的Hausdorff距离容差。在 [4] 中得到了下面的结论:

引理 2.3: 假设C(t)为单侧曲线段,如果H(C(t), L(t))小于dm,那么C(t)和


̃︀ L(t)之
̃︀
间的Hausdorff距离就会小于εD 。

如果C(t)为双侧曲线段,对应地,可以得到下面的结论:

定理 2.3: 假设C(t)为双侧曲线段,如果得到的H(C(t), L(t))的上限小于dm,那


么C(t)和
̃︀ L(t)之间的Hausdorff距离就会小于εD 。
̃︀

证明 因为H(C(t), L(t))的上限小于dm,而且C(t)可以被L(t)分成多条单侧曲线
段。
根据定理2.1中有关Hausdorff距离上限的定义,可知在断开结果中,所有的
单侧曲线段相关的Hausdorff距离都小于dm。
根据引理2.3,可以得到结论:所有单侧曲线的映像曲线相关的Hausdorff距
离都小于εD 。

30
第 2 章 参数曲线到自由曲面的法向投影

d
d
L(t)
d

u
(a) (b)

图 2.9 直线段大小为d的包围盒:(a) 包围盒的定义; (b) 参数域中的包围盒

根据定理2.2,便可以得到结论:

H(C(t),
̃︀ ̃︀ L(t)) ≤ max(εD , εD , . . . , εD ) = εD 。

证毕。 

在 实 现 过 程 中,如 第2.2.1节 中 所 介 绍 的,在 曲 面S 的 参 数 域 中q(t)被 初


始近似折线段分成了多条曲线段。对于q(t)中的每一条曲线段C(t) 以及初始
近似折线段中对应的直线段L(t),根据第2.2.2节所述,可以计算C(t)和L(t)之
间Hausdorff距离的上限。
假设计算得到的Hausdorff距离上限为d。这里构造L(t)的一个大小为d的包
围盒,该包围盒是由满足‖p − L(t)‖ = d的所有的点构成的,如图 2.9(a)所示。
因此,可以确定C(t)一定落在该包围盒内。在第2.1.1节中,B样条曲面S 被分
成了多张 Bézier曲面片。在S 的参数域中,如果某一张Bézier曲面片的参数域
与L(t)的大小为d的包围盒有相重叠的部分,那么该Bézier曲面片便被选为候
选曲面片(如图 2.9(b)中的深色方格)。对于每个候选曲面片,可以使用式(2-
28)来计算对应其参数域中的Hausdorff距离容差。假设得到的候选Hausdorff距离
容差为:dm1 , dm2 , . . . , dmn ,那么选择dm = min(dm1 , dm2 , . . . , dmn )作为C(t)最终
的Hausdorff距离容差。如果d ≤ dm成立,根据引理2.3和定理2.3,C(t)与 ̃︀ L(t)之
̃︀
间 的Hausdorff距 离 一 定 小 于 用 户 指 定 的 距 离 容 差εD , 这 里C(t)和
̃︀ L(t)分 别
̃︀
是C(t)和L(t)在曲面S 上的三维映像曲线,那么L(t)将被保留在近似折线段中。
否则,如果d > dm,那就意味着C(t)与
̃︀ L(t)之间的Hausdorff距离可能会超过距离
̃︀

31
第 2 章 参数曲线到自由曲面的法向投影

P0

P1 Q
P1
P0
(a) (b)

图 2.10 将曲线段细分:(a) 单侧曲线段;(b) 双侧曲线段

容差εD 。在这种情况下,如果C(t)为单侧曲线段,本文按照下面的步骤进行处
理:
1. 将C(t)在其与L(t)的距离最远点处断开,如图 2.10(a)所示。
2. 如果子曲线段为双侧曲线段,便将它们在与对应直线段的交点处分成多段
单侧曲线段。
3. 对于所有的子曲线段,检查d ≤ dm是否成立,对于每一条不满足条件的子
曲线段,返回第1步。
如果C(t)为双侧曲线段,本文首先将它在与对应直线段L(t)的交点处分成多段单
侧曲线段。然后对于每一条不满足条件d ≤ dm的子曲线段,使用上面三步来进
行检查,如图 2.10(b)所示。
当经过了上述计算过程之后,真实投影曲线Q(t)与最终的近似曲线之间
的Hausdorff距离便会小于用户指定的距离容差εD 。根据不同的距离容差εD ,在
曲面S 的参数域中,会对应得到不同的近似折线段,如图 2.11所示。

2.2.4 构造εT − G1 连续曲线

根据上一节中在曲面S 参数域中得到的新的近似折线段,在这一节中本文
将会使用 [4] 中提出的方法来控制最终的近似曲线的连续性,下面对该方法进行
介绍。
设曲线C(t)由多条G1 连续的曲线段构成,如果C(t)中任意两条相邻曲线段在
公共点处的切向夹角都小于角度容差εT ,那么称 C(t)为εT − G1 连续。令L(t)为曲
面S 参数域中近似折线段上的任意一条直线段,(u0 , v0 )、(u1 , v1 )分别是L(t)两个

32
第 2 章 参数曲线到自由曲面的法向投影

v v

u u
(a) (b)

图 2.11 曲面S 参数域中的近似折线段,其中:∆s = 0.05,(a) εD = 1 × 10−3 ;(b)


εD = 1 × 10−4

v v

u u
(a) (b)

图 2.12 曲面S 参数域中的近似折线段,其中:∆s = 0.05,εD = 1 × 10−3 ,(a) εT = 10∘ ;


(b) εT = 1∘

端点的坐标。那么便可以根据线性插值得到如下的L(t)的表达式:

L(t) = (u0 + (u1 − u0 ) t, v0 + (v1 − v0 ) t)T ,

33
第 2 章 参数曲线到自由曲面的法向投影

其中t ∈ [0, 1],可以进一步得到L(t)在S 上映像曲线̃︀


L(t)的表达式:

L (t) = S (L (t)) = S (u0 + (u1 − u0 ) t, v0 + (v1 − v0 ) t) ,


̃︀

其中t ∈ [0, 1]。根据链式法则,可以得到:


du dv
L′ (t) = S u + S v = (u1 − u0 ) S u (u0 + (u1 − u0 ) t, v0 + (v1 − v0 ) t)
̃︀
dt dt
+ (v1 − v0 ) S v (u0 + (u1 − u0 ) t, v0 + (v1 − v0 ) t) 。

通 过 置t = 0和t = 1, 便 可 以 分 别 得 到̃︀
L(t)在 两 个 端 点 处 的 切 向。 假
设C1 (t)和C2 (t)为S 参数域中q(t)上任意相邻的两条曲线段,而L1 (t)和L2 (t)为对
应C1 (t)和C2 (t)的两条直线段,̃︀ L2 (t)分别是 L1 (t)、L2 (t)在曲面S 上的映像
L1 (t)、̃︀
曲线。如果̃︀
L1 (t)和̃︀
L2 (t)在它们公共点处的切向夹角超过了用户指定的角度容
差εT ,那么在C1 (t)和C2 (t)中,距离其对应直线段较远的那条曲线段将会在对应
的最远点处(在第2.2.2节中得到)断开。算法会重复这一操作,直到所有的相
邻曲线段都满足角度容差。
在断开曲线段的时候,应该保证在断开后对应的近似曲线与真实投影曲线
之间的Hausdorff距离仍然小于距离容差εD 。因此,在 [4] 中证明了如下结论:

引理 2.4: 对于参数域中的一条单侧曲线段,如果对应的近似曲线与真实投影
曲线之间的Hausdorff距离小于距离容差εD ,那么在对曲线段进行分割之后,该
条件仍然成立。

对于一条双侧曲线段及其对应的直线段,在对其进行分割之后,距离限制
并不能总会得到满足。因此,在角度误差控制过程中,如果需要对一条双侧曲
线段进行分割,本文不得不先将它分成多条单侧曲线段,然后再对这些单侧曲
线段进行角度误差控制。
根据用户指定的角度容差,本文可以在曲面S 的参数域中得到一条新的近
似折线段,如图 2.12所示。
在曲面S 的参数域中,计算近似折线段与S 在u向和v向节点的交点,然后将
近似折线段在这些交点处断开,便可以在参数域中得到最终的近似折线段。使
用开花的方法 [17,18] 将这条折线段映射到Bézier曲面片(在第2.1.1节中得到的)
上,便可以得到Q(t)在曲面S 上的三维近似曲线,这条曲线是以Bézier形式表示

34
第 2 章 参数曲线到自由曲面的法向投影

的。这条三维近似曲线的次数为p + q,其中p和q分别是 B样条曲面S 在u向和v向


上的次数。

2.3 实验结果及比较

下面将针对本文提出的法向投影算法进行实验,其中P(t)表示的深色曲线
为待投影曲线,Q(t)表示的浅色曲线为法向投影曲线。为了验证本文算法的性
能,这一节将该算法与一阶法向投影算法 [1,2] 进行了比较。同时,也给出了本
文算法的运行效果及其对一些特殊案例的处理。本节中所有的实验都是在同
一台电脑上的Visual Studio 2005实现的,而这台电脑的硬件配置为:Intel Core2
Duo CPU 2.53 GHz,1GB内存。同时,在下面的实验中ε1 = ε2 = 10−10 ,其中ε1 ,
ε2 是 [8] 中点投影方法的收敛容差(在第2.1.3节中介绍)。

2.3.1 与一阶算法的比较

本文分别使用了二阶和四阶龙格库塔方法(R-K2和R-K4)对现有的两种一
阶法向投影算法 [1,2] 进行了实现,并且针对初始近似折线段的构造过程,将本文
算法与一阶法向投影算法 [1,2] 在执行效率以及精确度方面进行了比较。

为了公平起见,在实验中对于两种算法,本文都使用了固定的参数增量策
略(这是龙格库塔方法所需要的)。同时,由于两种算法都会使用估计跟踪点的
方式来构造初始近似折线段,为了度量两种算法的精确度,本文记录了两种算
法的估计误差(由式(2-13)定义)。具体地,对于两种算法,本文在跟踪过程中
记录每一个点的估计误差,并且计算每一个参数增量对应的平均估计误差。而
且,对于两种算法,本文都使用了基于点投影算法 [8] 的求精方法(在第2.1.3节
中介绍)。

在此给出三个实验案例,以显示算法的效果,下面将分别对这三个案例进
行介绍。

在例
例1中,一条三次B样条曲线P(t)被法向投影到一张双三次Bézier曲面上,

35
第 2 章 参数曲线到自由曲面的法向投影

如图 2.13(a)所示,具体地,P(t)的十个控制点为:
⎧ ⎧



⎪ P0 = (−110.01, 0.00, 0.00)T ⎪


⎪ P5 = (−67.11, −47.06, 0.00)T
⎪ ⎪
P1 = (−106.95, 13.14, 0.00)T P6 = (−46.84, 47.66, 0.00)T


⎪ ⎪




⎪ ⎪


⎪ ⎪
P2 = (−92.59, 64.86, 0.00)T P7 = (−43.60, −31.67, 0.00)T 。
⎪ ⎪

⎨ ⎨


⎪ ⎪


⎪ ⎪
P3 = (−93.08, −37.35, 0.00)T P8 = (−31.69, 13.06, 0.00)T


⎪ ⎪




⎪ ⎪


⎪ ⎪
P4 = (−63.93, 65.94, 0.00)T P9 = (−28.98, 25.30, 0.00)T


⎩ ⎪

对应的节点向量为:

(0.00, 0.00, 0.00, 0.00, 0.15, 0.30, 0.45, 0.61, 0.75, 0.86, 1.00, 1.00, 1.00, 1.00)。

曲面的4 × 4个控制点为:
⎧ ⎧




⎪ P00 = (−140.34, −39.06, 43.64)T ⎪



⎪ P01 = (−91.51, −20.19, 58.37)T
⎪ ⎪
⎨ P10 = (−130.39, 11.11, 8.14) = (−94.89, −1.85, 10.00)T
T
⎪ ⎪
⎨ P11


⎪ ⎪


, ,
= = (−85.48, 28.06, 10.00)T
⎪ T

P (−121.71, 42.82, 5.58) P21

⎪ ⎪



⎪ 20 ⎪


⎪ ⎪
⎩ P30 = (−99.60, 88.22, −31.01)T = (−76.07, 57.97, 10.00)T

⎪ ⎪

⎪ ⎩ P31

⎧ ⎧




⎪ P02 = (−84.50, −47.50, −18.48) T ⎪



⎪ P03 = (−36.14, −61.23, 16.38)T
⎪ ⎪
= (−78.18, −17.09, −24.28)T = (−4.41, −34.36, 1.57)T
⎪ ⎪
⎨ P12 ⎨ P13


⎪ ⎪


, 。
= (−1.07, 1.35, 64.94)T = (13.43, −11.48, −43.12)T
⎪ ⎪
P22 P23


⎪ ⎪




⎪ ⎪


= (−46.17, 48.56, 10.00)T = (−9.35, 49.06, −55.36)T

⎪ ⎪

⎩ P32
⎪ ⎩ P33

本文将比较过程中的平均误差记录在表2.1中,并将对应的运行时间以及近似折
线段中的离散点数记录在表2.2中。为了使结果更加明显,如图 2.14所示,本文
用表2.2中两种算法的运行时间除以对应的离散点数,从而得到了两种算法对于
例1的运行效率,即每一毫秒内得到的投影点数。
在例
例2中,一条三次B样条曲线P(t)被法向投影到一张双三次B样条表示的
维纳斯腹部曲面(17 × 17个控制点)上,如图 2.15(a)所示。两种算法的平均误
差记录在表2.3中,并将对应的运行时间以及近似折线段中的离散点数记录在
表2.4中。与例
例1 相同,本文根据表2.4中的运行时间与离散点数计算两种算法的
执行效率,并将其记录在图 2.16中。

36
第 2 章 参数曲线到自由曲面的法向投影

P(t)

Q(t)

(a) (b)

图 2.13 三次B样条曲线到双三次Bézier曲面的法向投影,其中∆s = 1,εD = 0.1,


εT = 10∘ :(a)待投影曲线和基曲面上的法向投影曲线;(b)近似投影曲线和它的间断点

表 2.1 例1中的算法精确度比较

参数增量 误差 离散点数

∆t R-K4 [1] R-K2 [1] R-K4 [2] R-K2 [2] 本文算法

1 × 10−2 9.71e-004 5.87e-003 9.63e-004 5.31e-003 4.25e-003 101


1 × 10−3 5.75e-005 8.79e-005 5.47e-005 8.38e-005 7.55e-005 1001
1 × 10−4 7.38e-007 8.39e-007 7.38e-007 8.40e-007 7.39e-007 10001
1 × 10−5 7.41e-009 8.46e-009 7.41e-009 8.46e-009 7.66e-009 100001
1 × 10−6 6.25e-011 7.37e-011 6.25e-011 7.37e-011 6.78e-011 1000001

在例
例3中,一条具有复杂形状的三次B样条曲线P(t)被法向投影到一张双三
次B样条表示的妇女面部曲面(18 × 18个控制点)上,如图 2.17(a)所示。两种
算法的平均误差记录在表2.5中,并将对应的运行时间以及近似折线段中的离散
点数记录在表2.6中。与例
例1 相同,本文根据表2.6中的运行时间与离散点数计算
两种算法的执行效率,并将其记录在图 2.18中。
如表2.1∼2.6所示,对于两种算法,随着参数增量的减小,平均误差会减
小,而运行时间和离散点的数量都会增加。首先,考虑平均误差。对于每一个

37
第 2 章 参数曲线到自由曲面的法向投影

表 2.2 例1中的运行时间比较

参数增量 时间(ms) 离散点数

∆t R-K4 [1] R-K2 [1] R-K4 [2] R-K2 [2] 本文算法

1 × 10−2 2.070 1.620 2.106 1.652 1.166 101


1 × 10−3 18.413 13.735 18.884 13.851 9.398 1001
1 × 10−4 179.999 136.961 183.021 139.519 91.885 10001
1 × 10−5 1789.588 1146.583 1828.628 1162.382 884.298 100001
1 × 10−6 18357.785 11657.576 18506.142 11793.293 7118.073 1000001

160
140
得到的投影点数

120
100
80
每毫秒内得

60
40
20
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14
参数增量次序

R-K4[1] R-K2[1] R-K4[2] R-K2[2] 本文算法

图 2.14 例 1中本文算法与一阶算法在效率上的比较

参数增量,本文算法的平均误差总是小于使用R-K2方法实现的一阶算法,并且
略大于使用R-K4方法实现的一阶算法。而两种算法在效率上的差距这可以通过
图2.14,2.16,2.18很明显地表示出来。
上述比较的结果显示,本文算法的精确性与一阶算法相当。同时,本文算
法比使用R-K4方法实现的一阶算法快2倍,而比使用R-K2方法实现的一阶算法
快1.5倍。而且,随着参数增量的减小,两种算法在效率上的差距还会增大。

38
第 2 章 参数曲线到自由曲面的法向投影

P(t)
Q(t)

(a) (b)

图 2.15 三次B样条曲线在双三次B样条表示的维纳斯腹部曲面上的法向投影,其
中∆s = 0.05,εD = 1 × 10−3 , εT = 10∘ :(a)待投影曲线和基曲面上的法向投影曲线;
(b)近似投影曲线和它的间断点

表 2.3 例2中的算法精确度比较

参数增量 误差 离散点数

∆t R-K4 [1] R-K2 [1] R-K4 [2] R-K2 [2] 本文算法

1 × 10−2 6.15e-004 3.77e-003 6.14e-004 3.67e-003 2.57e-003 101


1 × 10−3 6.59e-006 1.03e-005 6.58e-006 1.02e-005 7.90e-006 1001
1 × 10−4 6.10e-008 1.12e-007 6.10e-008 1.12e-007 6.21e-008 10001
1 × 10−5 6.25e-010 7.33e-010 6.25e-010 7.45e-010 6.63e-010 100001
1 × 10−6 3.73e-012 3.90e-012 3.53e-012 3.80e-012 3.77e-012 1000001

上述实验结果显示,本文提出的二阶算法在效率上明显优于一阶算法。在
分析两种算法的主要执行步骤后,可以发现:不同于一阶算法,二阶算法需要
计算曲面的三阶混合偏导,而三阶导数的执行时间主要由曲面的次数决定。因
此本文猜测,当曲面的次数升高的时候,二阶算法与一阶算法的执行效率会不
断接近。为了验证这一猜测,本文进行了下面的实验。
对于例
例1和例
例2中的曲面,本文将它们的次数从最初的3 × 3按照4 × 4,5 × 5,
. . .,的次序提升,直到30 × 30,并分别记录两种算法在每一种曲面次数下的运

39
第 2 章 参数曲线到自由曲面的法向投影

表 2.4 例2中的运行时间比较

参数增量 时间(ms) 离散点数

∆t R-K4 [1] R-K2 [1] R-K4 [2] R-K2 [2] 本文算法

1 × 10−2 2.885 2.234 2.902 2.235 1.646 101


1 × 10−3 25.179 19.452 25.555 19.641 13.568 1001
1 × 10−4 246.957 173.787 253.819 177.109 126.246 10001
1 × 10−5 2499.463 1640.180 2555.963 1677.543 1225.419 100001
1 × 10−6 25616.118 16558.856 25758.710 16628.983 9511.927 1000001

120
得到的投影点数

100

80

60
每毫秒内得

40

20

0
1 2 3 4 5 6 7 8 9 10 11 12 13 14
参数增量次序

R-K4[1] R-K2[1] R-K4[2] R-K2[2] 本文算法

图 2.16 例 2中本文算法与一阶算法在效率上的比较

行时间。如图 2.19,2.20所示。可以看出,随着曲面次数的提高,两种算法的
运行时间都会增加,但一阶算法的增加速度高于本文算法。
为了更明显的表示两种算法的效率差距。本文计算一阶算法与本文算法的
执行时间比,从而得到一阶算法相对于本文算法执行时间的倍数,计算结果如
图 2.21,2.22所示。
上述实验结果显示,随着曲面次数的升高,两种算法的执行时间比并没有

40
第 2 章 参数曲线到自由曲面的法向投影

Q(t)

P(t)

(a) (b)

图 2.17 三次B样条曲线在双三次B样条表示的妇女面部曲面上的法向投影,其中∆s =
0.02,εD = 1 × 10−3 , εT = 10∘ :(a)待投影曲线和基曲面上的法向投影曲线;(b)近似投
影曲线和它的间断点

表 2.5 例3中的算法精确度比较

参数增量 误差 离散点数

∆t R-K4 [1] R-K2 [1] R-K4 [2] R-K2 [2] 本文算法

1 × 10−2 1.02e-002 1.42e-002 1.01e-002 1.44e-002 9.54e-003 101


1 × 10−3 7.54e-005 6.35e-004 8.62e-005 6.82e-004 8.72e-005 1001
1 × 10−4 1.71e-007 1.31e-006 1.71e-007 1.32e-006 2.23e-007 10001
1 × 10−5 2.76e-009 6.50e-009 2.77e-009 6.47e-009 3.03e-009 100001
1 × 10−6 7.37e-011 7.53e-011 7.38e-011 7.60e-011 7.43e-011 1000001

像预想的那样不断接近,而是一直稳定在一定范围之内。而且曲面的次数最高
已经达到30 × 30,这样高的次数在很多实际应用中是不能接受的。这说明曲面
次数的高低,对于两种算法执行效率的影响并不明显。随着曲面次数的升高,
本文算法的执行效率一直大约保持在一阶算法的1.5到2倍。这更加证明了本文
算法的执行效率优于一阶算法。
在上文中,本文针对初始近似折线段的构造过程,将本文算法与一阶算法
进行了比较。除此之外,本文也对该算法在整个投影计算过程中进行了测试,

41
第 2 章 参数曲线到自由曲面的法向投影

表 2.6 例3中的运行时间比较

参数增量 时间(ms) 离散点数

∆t R-K4 [1] R-K2 [1] R-K4 [2] R-K2 [2] 本文算法

1 × 10−2 3.491 2.884 3.457 2.950 1.758 101


1 × 10−3 30.959 24.834 31.548 25.011 13.936 1001
1 × 10−4 305.788 227.521 306.926 230.181 130.612 10001
1 × 10−5 2991.812 2144.529 3060.313 2205.265 1242.772 100001
1 × 10−6 30344.037 21630.734 30514.567 21730.232 9795.980 1000001

120
每毫秒内得到的投影点数

100

80

60

40

20

0
1 2 3 4 5 6 7 8 9 10 11 12 13 14
参数增量次序

R-K4[1] R-K2[1] R-K4[2] R-K2[2] 本文算法

图 2.18 例 3中本文算法与一阶算法在效率上的比较

即包括了弧长增量策略与近似曲线的距离误差控制和连续性控制,如图 2.13,
2.15,2.17所示,并将本文算法的运行结果记录在表2.7中。
实验结果显示,本文算法具有较高的运行效率,并且可以生成完全落在基
曲面上的低次近似曲线,其中近似曲线与真实法向投影曲线之间的Hausdorff距
离小于用户指定的距离容差,而近似曲线的连续性为εT − G1 ,这样的连续性足
以在很多应用中(例如数控制造与曲面混合 [4] )进行使用。

42
第 2 章 参数曲线到自由曲面的法向投影

450000
400000
350000
300000
法运行时间

250000
200000
算法

150000
100000
50000
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

曲面次数序列

R‐K4[1] R‐K4[2] R‐K2[1] R‐K2[2] 本文算法

图 2.19 例 1中不同次数下两种算法的运行时间

表 2.7 本文算法的运行结果

例1 例2 例3

弧长增量∆s 1 1 0.05 0.05 0.02 0.02


εD /εT 10−1 /10∘ 10−1 /1∘ 10−3 /10∘ 10−3 /1∘ 10−3 /10∘ 10−3 /1∘
次数 6 6 6 6 6 6
段数 258 1265 73 457 129 224
控制点数 1549 7591 439 2743 775 1345
连续性 10∘ − G1 1∘ − G1 10∘ − G1 1∘ − G1 10∘ − G1 1∘ − G1
时间(ms) 15.550 29.496 4.747 12.954 11.046 19.861

2.3.2 特殊情况处理

上面的几个例子主要是针对一些常规情况下的法向投影,即法向投影曲线
保持在基曲面的边界内,并且假设待投影曲线不经过基曲面的任何一个主曲率
中心。在实际计算中,并不能够总是保证上述条件成立,即可能出现特殊情况

43
第 2 章 参数曲线到自由曲面的法向投影

1600000

1400000

1200000
法运行时间

1000000

800000
算法

600000

400000

200000

0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

曲面次数序列

R‐K4[1] R‐K4[2] R‐K2[1] R‐K2[2] 本文算法

图 2.20 例 2中不同次数下两种算法的运行时间

下的法向投影,而针对这些特殊情况,本文在第2.1.4节和第2.1.5节中介绍了相
应的处理方法。下面分别对待投影曲线通过基曲面的主曲率中心以及法向投影
曲线出界两种情况进行实验,以显示本文方法对于这两种特殊投影的处理情况。
其中,部分实验样例与第1章中CATIA或UG 处理出错的例子相同。

2.3.2.1 待投影曲线经过基曲面的主曲率中心

如第2.1.4节所述,在构造法向投影初始近似折线段的过程中,需要通过计
算法向投影张量矩阵来计算法向投影曲线的一阶导数和二阶导数,进而估计跟
踪点并构造初始近似折线段。当待投影曲线通过基曲面在对应点处的主曲率中
心时,对应的法向投影张量矩阵将变为奇异矩阵,因而不能使用直接计算法向
投影曲线一阶和二阶导数的方式来估计跟踪点,为此本文提出了一种基于三次
弗格森曲线的估计方法,该方法可以在法向投影张量矩阵将变为奇异矩阵时,
估计跟踪点,从而使得法向投影曲线在对应点处连续。下面给出几组实验,以
显示本文方法的处理效果。

44
第 2 章 参数曲线到自由曲面的法向投影

2.5

2
行时间比

1.5
运行

0.5

0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

曲面次数序列

R‐K4[1] R‐K4[2] R‐K2[1] R‐K2[2]

图 2.21 例 1中不同次数下一阶算法对本文算法的运行时间比

图 2.23(a)和(b)为 两 条3次B样 条 平 面 曲 线 分 别 向 一 张 圆 柱 面 (转 化
成Nurbs曲面)做法向投影。两条待投影曲线都与圆柱面的轴线有交点,即通
过曲面的曲率中心。其中,圆柱面的上下底面中心坐标分别为:(31.97, 0, 0)T ,
(−31.97, 0, 0)T ,半径为40。图 2.23(a)中待投影曲线的控制点为:
⎧ ⎧



⎪ P 0 = (0.00, 41.73, 28.09) T ⎪


⎪ P3 = (0.00, −24.97, 5.06)T
⎪ ⎪
P1 = (0.00, 27.46, 19.88)T , ⎪ P4 = (0.00, −37.47, 5.03)T
⎪ ⎪

⎨ ⎨


⎪ ⎪

⎪ ⎪
⎩ P2 = (0.00, 7.69, 9.49)T

⎪ ⎩ P5 = (0.00, −43.36, −11.22)T

对应的节点向量为:

(0.00, 0.00, 0.00, 0.00, 0.48, 0.75, 1.00, 1.00, 1.00, 1.00)。

图 2.23(c)和(d)为两条3次B样条平面曲线分别向一张半球面(转化成Nurbs曲面)
做法向投影。两条待投影曲线都在半球面的上平面内,并且都通过半球面的球
心,即曲面的曲率中心。其中,实线为待投影曲线,带有间断点的分段曲线为
所得法向投影曲线。通过实验可以看出,使用本文提出的方法,可以保证法向

45
第 2 章 参数曲线到自由曲面的法向投影

3.5

2.5
行时间比

2
运行

15
1.5

0.5

0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

曲面次数序列

R‐K4[1] R‐K4[2] R‐K2[1] R‐K2[2]

图 2.22 例 2中不同次数下一阶算法对本文算法的运行时间比

投影曲线在曲面曲率中心投影点处的连续性,并且可以估计出下一个投影点的
位置,使得投影跟踪继续进行。

2.3.2.2 法向投影曲线出界

如第2.1.5节所述,投影曲线可能会有一部分超出基曲面的边界,而本文认
为此时应该继续跟踪投影曲线,并保留投影曲线所有在基曲面内部的部分,而
不是像CATIA那样,只保留一段内部曲线。因此,本文提出了处理法向投影曲
线出界情况的处理方法。下面给出几组实验,以显示本文方法的处理效果。

图 2.24(a)和(b)为 法 向 投 影 曲 线 在 非 封 闭 曲 面 上 的 出 界 情 况,其 中,两


条3次B样条曲线分别向两张双三次Bézier曲面做法向投影,实线为待投影曲线,
带有间断点的分段曲线为所得法向投影曲线。图 2.24(a)中,待投影曲线的控制

46
第 2 章 参数曲线到自由曲面的法向投影

(a) (b)

(c) (d)

图 2.23 待投影曲线通过基曲面曲率中心情况的处理

点为:
⎧ ⎧



⎪ P0 = (−61.18, −46.78, 50.00)T ⎪


⎪ P5 = (−1.01, −13.29, 50.00)T
⎪ ⎪
= (51.42, 51.87, 50.00)T P6 = (−25.39, −13.34, 50.00)T
⎪ ⎪
P1


⎪ ⎪




⎪ ⎪


= (−29.6, −58.37, 50.00)T P7 = (−46.28, −16.32, 50.00)T 。
⎪ ⎪

⎨ ⎨


⎪ P2 ⎪


⎪ ⎪
= (23.11, −79.87, 50.00)T P8 = (−56.53, −11.86, 50.00)T
⎪ ⎪




⎪ P3 ⎪




⎪ ⎪
= (25.77, −25.98, 50.00)T P9 = (−58.56, −10.85, 50.00)T

⎩ P4
⎪ ⎪

47
第 2 章 参数曲线到自由曲面的法向投影

(a) (b)

(c) (d)

图 2.24 法向投影曲线出界情况的处理

对应的节点向量为:

(0.00, 0.00, 0.00, 0.00, 0.16, 0.41, 0.59, 0.70, 0.82, 0.97, 1.00, 1.00, 1.00, 1.00)。

投影曲面的4 × 4个控制点为:
⎧ ⎧




⎪ P00 = (−160.19, −52.85, 30.00)T ⎪



⎪ P01 = (−122.49, −64.71, 30.00)T
⎪ ⎪
= (−148.34, −15.15, 30.00)T = (−105.85, −36.89, 44.38)T
⎪ ⎪
⎨ P10 ⎨ P11


⎪ ⎪


, ,
= (−116.55, 8.34, −11.97)T = (−92.01, 16.39, 17.25)T
⎪ ⎪
P20 P21


⎪ ⎪




⎪ ⎪


= (−124, 62, 60.26, 30.00)T = (−86.92, 48.40, 30.00)T

⎪ ⎪

⎩ P30
⎪ ⎩ P31

48
第 2 章 参数曲线到自由曲面的法向投影

⎧ ⎧




⎪ P02 = (−86.35, −79.15, 32.17)T ⎪



⎪ P03 = (−17.33, −88.51, 19.17)T
⎪ ⎪
= (−82.51, −44.32, 44.81)T = (−21.28, −44.06, 10.05)T
⎪ ⎪
⎨ P12 ⎨ P13


⎪ ⎪


, 。
= (−61.07, −1.16, 30.00)T = (−17.80, −11.79, 23.83)T
⎪ ⎪
P22 P23


⎪ ⎪




⎪ ⎪


= (−62.47, 23.34, 57.56)T = (−4.54, 30.24, 11.25)T

⎪ ⎪

⎩ P32
⎪ ⎩ P33

图 2.24(c)和(d)为法向投影曲线在封闭曲面上的出界情况,其中,两条3次B样条
曲线分别向圆柱面(转化成Nurbs曲面)和球面(转化成Nurbs曲面)做法向投
影,实线为待投影曲线,带有间断点的分段曲线为所得法向投影曲线。通过实
验可以看出,使用本文提出的方法,可以保证法向投影曲线连续的通过封闭曲
面边界,而在非封闭曲面边界处法向投影曲线会分成多段,并且能够完整得到
在界内的各段法向投影曲线。

2.3.3 实际工程应用举例

如第1.1.1节中所述,曲线在曲面上的法向投影在实际应用中有着很重要的
作用。下面给出两个实际工程中的例子,以显示法向投影在实际中的应用。
首先,对于第一个例子。如图 2.25所示,构造空间中的造型曲线(图中所
示为“CAD”三个字符)。计算该曲线到汽车散热板曲面的法向投影,并得到
对应的投影曲线。可以看到,得到的投影曲线落在对应的曲面上,并随着曲面
的弯曲而变化,达到了曲线曲面造型设计的目的。

图 2.25 在汽车表面上进行曲线曲面造型设计

对于第二个例子。如图 2.26所示,有空间中的一个轴承零件。如果要在它

49
第 2 章 参数曲线到自由曲面的法向投影

的外圈曲面上开一个锯齿状的槽(或孔),可以首先构造一个空间中的锯齿状
曲线,该曲线可以作为加工刀具的刀柄轨迹。然后计算该曲线到轴承曲面的法
向投影,可以得到对应的投影曲线。投影曲线作为刀具的刀头轨迹。由于使用
的是法向投影,这样可以保证刀柄和刀头连线始终垂直于曲面,从而避免由于
曲面波动以及刀头的不规则而造成的切深变化 [38] 。

图 2.26 轴承表面造型刀具路径的生成

从总体来说,对于本文实验中的例子,本文算法都能够有效地运行。但是
对于一些具有复杂拓扑结构的曲面,就需要考虑一些曲面的连续性条件来保
证法向投影曲线存在并且连续。同时,本文算法也存在着一些缺陷。例如,在
第2.1.2节中,本文假设基曲面至少为C 3 连续,而这一限制要高于一阶法向投影
算法 [1,2] 。因此,如何降低对基曲面的连续性要求是本文未来的研究方向。

50
第 3 章 参数曲线到自由曲面的给定方向投影

第 3 章 参数曲线到自由曲面的给定方向投影

上一章介绍了法向投影的二阶近似算法。该算法根据法向投影曲线的一阶
和二阶导数构造近似折线段,并可以控制近似曲线的近似度和连续性,是对现
有法向投影算法的改进。本章将要介绍如何使用该近似算法的思路计算曲线到
曲面的给定方向投影。
首先给出在下文中将要用到的几个符号。在三维空间中,给定一条参数曲
线P(t)和一张B样条曲面S (u, v),同时给定一个投影的方向向量Dir。 S (u, v)的表
达式为:
nv
nu ∑︁
∑︁
S (u, v) = Nip (u)N qj (v)Pi, j ,
i=0 j=0

其中t ∈ [m, n],u ∈ [a, b],v ∈ [c, d],Pi, j 为控制顶点,Nip (u) 和 N qj (v)分别是B样
条曲面的p次和q次基函数,如图 3.1所示。
假设P(t)到S 的给定方向投影曲线为Q(t)。与法向投影相同,由于Q(t)落
在S 上,则在S 的参数域中存在Q(t)的一条原像曲线 q(t) = (u(t), v(t))T ,且Q(t) =
S (u(t), v(t))成立。本文假设Q(t)至少为G1 连续,并且q(t)可以用Bézier形式表示。
同法向投影类似,这里需要在曲面S 的参数域中构造q(t)的近似折线段,并

Dir

图 3.1 维纳斯的腹部曲面:B样条基曲面、待投影曲线以及投影方向

51
第 3 章 参数曲线到自由曲面的给定方向投影

控制近似曲线的近似度和连续性。与法向投影的区别在于,在构造初始近似折
线段的过程中,需要计算给定方向投影的一阶和二阶导数,目的是为了估计跟
踪点。而给定方向投影的一阶和二阶导数计算公式是与法向投影不同的。同时,
在构造给定方向投影的近似曲线时,需要考虑特殊的投影情况,而这不同于法
向投影中的情况。而对于如何控制近似曲线的近似度和连续性,这里使用与法
向投影近似算法相同的策略。
算法的主要流程与法向投影的近似算法类似,在此不再复述。下面主要介
绍构造初始近似折线段的过程,以及特殊情况的处理。

3.1 构造初始近似折线段
首先,需要使用一种二阶跟踪法在S 的参数域中构造初始近似折线段。构
造的过程与法向投影的类似,可以归纳为以下几步:
1. 计算P(t)起始点到S 的给定方向投影,并将投影结果点作为当前的跟踪
点。
2. 在S 参数域中计算q(t)在当前跟踪点处的一阶和二阶导数,并且使用二阶
泰勒展开式局部近似q(t)。
3. 使用固定弧长增量计算参数增量,则可以得到P(t)上的下一个待投影点以
及对应的下一个投影点的估计位置。
4. 使用给定方向投影的牛顿迭代法对估计点位置进行求精。用一条直线段连
接求精结果点和当前跟踪点,并将该直线段加入到近似折线段中。同时,
将求精结果点作为新的当前跟踪点。
5. 重复第2∼4步,直到得到的待投影点达到了P(t)的终点,便得到了初始近
似折线段。

3.1.1 跟踪法的准备

首 先 需 要 计 算P(t)的 起 始 点P0 到S 的 给 定 方 向 投 影 点,而 这 些 投 影 点 在


过P0 且平行于Dir的直线上,因此本文通过计算该直线与曲面的交点来得到这些
投影点。
首先,构造以P0 为起始点且平行于Dir的直线L,并将基曲面在其内部节点

52
第 3 章 参数曲线到自由曲面的给定方向投影

向量处断开成多张Bézier曲面片。接下来,本文按照下面的步骤计算L与基曲面
的交点:
1. 首先判断哪些曲面片的控制网格与L有交点,并将这些曲面片作为候选曲
面片。根据Bézier曲面的凸包性,便可以排除其他的曲面片。
2. 对于每个候选曲面片,使用 [37] 的方法计算L与其的各个交点,并将每个交
点作为L与基曲面的候选交点。
3. 对于每个候选交点p,判断(p − P0 ) · Dir > 0是否成立,并排除不满足条件
的交点。
这样便得到了L与基曲面的各个交点。而对于得到的每一个交点,都以其作为
各自投影曲线段的起始点进行跟踪。下面以一条投影曲线为例,介绍如何构造
投影曲线的近似曲线。

3.1.2 给定方向投影曲线的一阶和二阶微分方程组

因为本文希望使用跟踪法在S 的参数域中构造初始近似折线段,所以需要
根据当前的跟踪点估计下一个跟踪点。与上一章相同,这里使用q(t)的二阶泰勒
展开式来估计下一个跟踪点的位置,因此需要计算其一阶和二阶导数。下面就
来推导q(t)的一阶和二阶微分方程组。
首先,根据给定方向投影的定义:

(q − p) × Dir = 0, (3-1)

其中p为待投影曲线P(t)上的点,q为给定方向投影曲线Q(t)上的对应点,Dir为
投影的方向向量。且Q(t) = S (u(t), v(t)),S (u, v)为基曲面。
对式(3-1)两边关于t求导,得:
(︃ )︃
du dv d p
Su + Sv − × Dir = 0,
dt dt dt

根据向量差乘的分配率,得:

du dv d p
(S u × Dir) + (S v × Dir) = × Dir,
dt dt dt

53
第 3 章 参数曲线到自由曲面的给定方向投影

在上式的两边分别乘以S u 和S v ,得:
⎧ (︃ )︃
du dp
= Sv ·

S v · (S u × Dir) × Dir



dt dt



)︃ 。

(︃
dv dp


⎩ S u · (S v × Dir) dt = S u · dt × Dir




对上述方程进行求解,可得:
⎧ (︁ d p )︁

⎪ du S v · dt × Dir
=




⎨ dt

⎪ S v · (S u × Dir)
(︁ )︁ 。 (3-2)
S u · ddtp × Dir


dv


=




dt S u · (S v × Dir)

方程组(3-2)即为给定方向投影的一阶微分方程组。对方程组(3-2)中的各式
两边分别关于t求导,得:
⎧ (︂ 2 )︂ (︁ )︁ (︁ d p )︁
d p


⎪ 2
d u S v · dt 2 × Dir + S vu
du
dt + S vv
dv
dt · dt × Dir
=




2
(︁(︁ )︁ )︁ (︁ )︁
+ + +

dt · du dv
× du dv
S S S Dir S S dt · (S u × Dir)



⎪ v uu dt uv dt vu dt vv
。 (3-3)

⎪ (︂ 2 )︂ (︁ )︁ (︁ )︁
d p dp
S u · dt2 × Dir + S uu dt + S uv dt · dt × Dir
du dv



d2 v


=




⎩ dt2
(︁(︁ )︁ )︁ (︁ )︁
S u · S vu du + S vv dv × Dir + S uu du + S uv dv · (S v × Dir)


dt dt dt dt

方程组(3-3)即为给定方向投影的二阶微分方程组。

3.1.3 得到下一个投影点

q(t)在当前跟踪点处的二阶泰勒公式表达式如下:
q′′ (t0 )∆t2
q(t0 + ∆t) = q(t0 ) + q′ (t0 )∆t + + o(∆t2 ), (3-4)
2
其中q(t0 )为当前跟踪点,∆t是参数增量,o(∆t2 )是二阶泰勒余项。余项为一个向
量值函数 f (∆t),并且 lim f (∆t)/∆t2 = 0成立。通过忽略该表达式的余项,便可
∆t→0
以得到如下的多项式:
q′′ (t0 )∆t2
q(t0 + ∆t) = q(t0 ) + q′ (t0 )∆t + , (3-5)
2
这里使用该式来局部近似q(t)。给定t0 的值,可以分别使用式(3-2)和式(3-3)来计
算q′ (t0 )和q′′ (t0 )的值。

54
第 3 章 参数曲线到自由曲面的给定方向投影

然后,通过使用一定的步长策略(例如第2.1.3节中介绍的固定弧长增量策
略),便可以得到下一个跟踪点的估计位置。通常,得到的估计点存在着误差。
那么,问题就变成了如何根据估计点得到精确的跟踪点。下面介绍如何对估计
点进行求精。
对式(3-1)两边分别乘以S u 和S v ,令r = ((S (u, v) − p) × Dir)可以得到方程组:


⎨ f (u, v) = ((S (u, v) − p) × Dir) · S u (u, v) = r · S u (u, v)



⎪ , (3-6)
⎩ g(u, v) = ((S (u, v) − p) × Dir) · S v (u, v) = r · S v (u, v)

这里使用牛顿迭代法对上述方程组进行求解,设:
⎡ ⎤ ⎡ ⎤
⎢⎢⎢∆u⎥⎥⎥ ⎢⎢⎢u − u ⎥⎥⎥
i+1 i
δi = ⎢⎢⎢⎢⎣ ⎥⎥⎥⎥⎦ = ⎢⎢⎢⎢⎣ ⎥⎥⎥⎥ ,
∆v vi+1 − vi ⎦

⎡ ⎤ ⎡ ⎤
⎢⎢⎢ f f ⎥⎥⎥ ⎢⎢⎢
u v⎥ S uu · r S uv · r + S u · (Dir × S )
v ⎥
⎥⎥
Ji = ⎢⎢⎣ ⎢
⎢ ⎥⎥⎦ = ⎢⎢⎣
⎥ ⎢
⎢ ⎥⎥⎥ ,
S uv · r + S v · (Dir × S u )
⎥⎦
gu gv S vv · r

⎡ ⎤
⎢⎢⎢ f (u , v )⎥⎥⎥
i i ⎥
ki = − ⎢⎢⎢⎢⎣ ⎥⎥⎥ 。
g(ui , vi ) ⎦

则迭代的参数增量可以通过求解如下的线性方程得到:

Ji δi = ki ,

其中,迭代的收敛条件如下:
1. ‖(ui+1 − ui )S u (ui , vi ) + (vi+1 − vi )S v (ui , vi )‖ ≤ ε1 ,
2. ‖S (ui , vi ) − cur P‖ ≤ ε1 ,
|Dir × (S (ui , vi ) − p)|
3. ≤ ε2 。
‖Dir‖ · ‖S (ui , vi ) − p‖
这里(ui , vi )是第i次迭代的参数,ε1 ,ε2 分别是欧氏距离和正弦的容差。如果上面
三个条件中的任何一个得到满足,那么迭代收敛停止。
这样,只要将得到的估计点作为上述迭代的初始值,便可以得到对应跟踪
点的精确点位置,而基曲面S 参数域中的初始近似折线段也可以被相应的构造
出来。

55
第 3 章 参数曲线到自由曲面的给定方向投影

在初始近似折线段的构造过程中,与法向投影相同,也有可能出现投影曲
线超出曲面边界的情况,这里采用与第2.1.5节中类似的方法处理投影曲线的出
界情况。
同时,随着曲线参数的增长,从P(t)上待投影点出发的射线与曲面的交点
可能会有产生跳跃,这样的跳跃有可能会导致出现新的跟踪曲线段,即给定方
向投影曲线可能会有多段。本文按照下面的方式处理这种情况:
对于每一段跟踪曲线,记录其当前跟踪点所在的曲面片编号。假设当前的
曲线参数为t0 ,当要计算新的曲线参数t1 对应的投影点时,首先构造以P(t1 )为起
始点,Dir为方向的射线R。判断各个曲面片的控制网格与R是否有交点,并记
录控制网格与R有交点的曲面片编号。根据Bézier曲面的凸包性,R与这些曲面
片有可能有交点。接下来,分别判断这些曲面片与各条跟踪曲线的当前曲面片
是否相邻,如果出现不相邻的情况,说明有可能出现上面所说的跳跃点情况。
这时,将可能出现跳跃点的曲面片按照 [37] 的方法计算R与它的交点,如果得到
交点,则构造一条新的跟踪曲线,并将该交点作为这条跟踪曲线的起始点。这
样便可以处理跳跃点的情况,从而保证不会漏掉跟踪曲线段。
得到初始近似折线段之后,需要控制对应近似曲线与真实投影曲线之间
的近似度(即本文中介绍的Hausdorff距离)与连续性,具体的操作与第2.2节相
同,这里就不再重复介绍了。

3.2 实验结果

下面针对上一节中介绍的给定方向投影算法进行实验。同时,也给出了本
文算法的运行效果及其对一些特殊案例的处理。本节中所有的实验都是在同
一台电脑上的Visual Studio 2005实现的,而这台电脑的硬件配置为:Intel Core2
Duo CPU 2.53 GHz,1GB内存。同时,在下面的实验中ε1 = ε2 = 10−10 ,其中ε1 ,
ε2 是上一节中介绍的牛顿迭代法的收敛容差。
首先,对算法进行常规情况下的测试。如图 3.2所示,分别将两条三次B样
条曲线按照z轴的负方向投影到双三次B样条曲面表示的维纳斯腹部曲面和妇女
面部曲面上。其中P(t)表示的深色曲线为待投影曲线,Q(t)表示的浅色曲线为给
定方向投影曲线。具体的投影结果如表3.1所示。

56
第 3 章 参数曲线到自由曲面的给定方向投影

Q(t)

P(t)
Q(t)

P(t)
(a) (b)

图 3.2 三次B样条曲线在双三次B样条曲面上的给定方向投影,其中投影方向为z轴负
向,εD = 1 × 10−3 , εT = 10∘ :(a)维纳斯腹部曲面;(b)妇女面部曲面

表 3.1 本文算法的运行结果

例1 例2

弧长增量∆s 0.05 0.05 0.05 0.05


容差(εD /εT ) 10−3 /10∘ 10−3 /1∘ 10−3 /10∘ 10−3 /1∘
次数 6 6 6 6
段数 90 121 97 126
控制点数 541 723 583 757
连续性 10∘ − G1 1∘ − G1 10∘ − G1 1∘ − G1
时间(ms) 187.036 215.652 340.406 583.298

可见,虽然使用相同的原理构造近似曲线,但由于在给定方向投影的计算
过程中需要进行多次的求交运算,因此给定方向投影的运行效率不如法向投影
的高。但是从其运行时间可以看出,本文提出的给定方向投影近似算法也已经
达到了实时的效果,并且可以控制近似曲线的近似度和连续性,因此具有实用
价值。
下面,对算法进行特殊情况的测试,共分为两种情况:投影曲线出界与多
段投影曲线。

57
第 3 章 参数曲线到自由曲面的给定方向投影

(a) (b)

图 3.3 给定方向投影曲线出界情况的处理

其中,对于投影曲线出界的情况,本文认为此时应该继续跟踪投影曲线,
并保留投影曲线所有在基曲面内部的部分。因此,本文对这种情况进行了特殊
处理。下面给出几组实验,以显示本文方法的处理效果。
图 3.3(a)和(b)为 给 定 方 向 投 影 曲 线 在 曲 面 上 的 出 界 情 况, 其 中, 两
条3次B样条曲线分别向两张双三次Bézier曲面做给定方向投影,实线为待投
影曲线,带有间断点的分段曲线为所得给定方向投影曲线。图 3.3(a)中,待投
影曲线的控制点为:
⎧ ⎧




⎪ P0 = (−152.13, 22.06, 60.00)T ⎪



⎪ P4 = (−167.37, −22.15, 60.00)T
⎪ ⎪
⎨ P1 = (−128.95, 27.21, 60.00) ⎨ P5 = (−37.89, −22.95, 60.00)
T T


⎪ ⎪


⎪ ⎪
, 。
= =
⎪ T
⎪ T
P (−105.16, 27.26, 60.00) P (−10.98, −24.17, 60.00)

⎪ ⎪



⎪ 2 ⎪

⎪ 6
⎪ ⎪
⎩ P3 = (−28.59, 4.51, 60.00)T ⎩ P7 = (12.14, −23.02, 60.00)T


⎪ ⎪

对应的节点向量为:

(0.00, 0.00, 0.00, 0.00, 0.23, 0.33, 0.55, 0.78, 1.00, 1.00, 1.00, 1.00)。

投影曲面的4 × 4个控制点为:
⎧ ⎧




⎪ P00 = (−160.19, −52.85, 30.00)T ⎪



⎪ P01 = (−122.49, −64.71, 30.00)T
⎪ ⎪
⎨ P10 = (−148.34, −15.15, 30.00) = (−105.85, −36.89, 44.38)T
T
⎪ ⎪
⎨ P11


⎪ ⎪


, ,
P20 = (−116.55, 8.34, −11.97)T = (−92.01, 16.39, 17.25)T
⎪ ⎪
P21


⎪ ⎪




⎪ ⎪


⎩ P30 = (−124, 62, 60.26, 30.00)T = (−86.92, 48.40, 30.00)T

⎪ ⎪

⎪ ⎩ P31

58
第 3 章 参数曲线到自由曲面的给定方向投影

(a) (b)

图 3.4 多段投影曲线情况的处理

⎧ ⎧




⎪ P02 = (−86.35, −79.15, 32.17)T ⎪



⎪ P03 = (−17.33, −88.51, 19.17)T
⎪ ⎪
= (−82.51, −44.32, 44.81)T = (−21.28, −44.06, 10.05)T
⎪ ⎪
⎨ P12 ⎨ P13


⎪ ⎪


, 。
= (−61.07, −1.16, 30.00)T = (−17.80, −11.79, 23.83)T
⎪ ⎪
P22 P23


⎪ ⎪




⎪ ⎪


= (−62.47, 23.34, 57.56)T = (−4.54, 30.24, 11.25)T

⎪ ⎪

⎩ P32
⎪ ⎩ P33

通过实验可以看出,使用本文提出的方法,可以保证给定方向投影曲线在曲面
边界处分成多段,并且能够完整得到在界内的各段给定方向投影曲线。
对于存在多段投影曲线的情况,本文认为应该在跳跃点处生成一段新的投
影曲线,而不是将跳跃点加入到已有的投影曲线之内,从而可以避免得到错误
的投影结果。
图 3.4(a)和(b)为给定方向投影曲线在曲面上出现跳跃点的情况,其中,两
条3次B样条曲线分别向圆环面和圆柱面(转化成Nurbs曲面)做给定方向的投
影,实线为待投影曲线,带有间断点的分段曲线为所得给定方向投影曲线。
图 3.4(a),待投影曲线的控制点为:
⎧ ⎧



⎪ P0 = (−47.93, −29.47, 100.00)T ⎪


⎪ P5 = (−23.32, 33.85, 100.00)T
⎪ ⎪
P1 = (−47.48, 15.67, 100.00)T P6 = (−29.87, 11.46, 100.00)T


⎪ ⎪




⎪ ⎪


⎪ ⎪
P2 = (−42.74, 9.40, 100.00)T P7 = (−25.91, −14.59, 100.00)T 。
⎪ ⎪

⎨ ⎨


⎪ ⎪


⎪ ⎪
P3 = (−55.36, 41.54, 100.00)T P8 = (−25.86, 26.84, 100.00)T


⎪ ⎪




⎪ ⎪


⎪ ⎪
⎩ P4 = (−33.32, 63.87, 100.00)T

⎪ ⎪

⎩ P9 = (−25.84, −30.09, 100.00)T

59
第 3 章 参数曲线到自由曲面的给定方向投影

对应的节点向量为:

(0.00, 0.00, 0.00, 0.00, 0.21, 0.44, 0.50, 0.60, 0.79, 0.95, 1.00, 1.00, 1.00, 1.00)。

投 影 圆 环 面 的 大 小 半 径 分 别 为: 44.22和13.64, 其 中 心 坐 标 为:
(−32.98, 1.46, 0.26)T ,中 心 圆 位 于XOY平 面 上。由 于 特 殊 的 投 影 方 向 以 及 投
影曲线和基曲面的相对位置,应该得到分开的多段给定方向投影曲线。如
图 3.4(a)所示,算法可以得到圆环面上的两段独立的投影曲线。图 3.4(b)所示为
一特殊的情况,圆柱面上的两段投影曲线恰好首尾相连,形成一个闭环。

3.2.1 实际工程应用举例

为了显示给定方向投影在实际中的应用,下面给出两个实际工程中的例
子。
首先,对于第一个例子。如图 3.5(a)所示,有空间中的一张毛坯曲面(包含
目标产品,只是边界还没有确定),需要在该曲面上构造汽车的前盖曲面。首
先,在设计图纸上提取前盖曲面的边界轮廓线,然后将该轮廓线按照给定的方
向投影到毛坯曲面上,便可以得到给定方向投影曲线。以该投影曲线作为曲面
的边界线,便得到了对应的汽车前盖曲面,如图 3.5(b)所示。

(a) (b)

图 3.5 汽车前盖曲面的设计

60
第 3 章 参数曲线到自由曲面的给定方向投影

对于第二个例子。如图 3.6所示,有空间中的一个压盖零件。如果要在其管
道上沿横向钻一个孔,可以如图构造空间中的一个圆,圆的法向平行于钻孔方
向。计算其到零件上对应曲面的给定方向投影,便可以得到给定方向投影曲线。
根据给定方向投影的贯穿性质,所得投影曲线即为零件上钻孔的轮廓线。

图 3.6 压盖零件钻孔轮廓的生成

61
第 4 章 总结与展望

第 4 章 总结与展望

这一章将对本文的内容进行总结,并简要回顾本文提出的近似投影算法。
同时,针对算法的不足,本章也给出了下一步需要重点解决的问题,以及未来
的研究方向。

4.1 总结
本文对常用的两种曲线曲面投影――法向投影和给定方向投影分别进行了
讨论。
首先,本文针对法向投影问题当前的研究情况,提出了一种计算参数曲线
到B样条曲面的法向投影近似算法。
该算法首先计算待投影曲线P(t)的起始点在S 上的点投影。然后以得到的投
影点作为起始点,并且使用二阶跟踪法在曲面参数域中构造初始近似折线段。
同时,法向投影曲线的原像曲线便被分成了多段。根据用户指定的距离容差εD ,
对不满足容差限制的曲线段进行细分,直到距离容差对于所有的曲线段都得
到满足。此外,根据用户指定的角度容差εT ,本文还将近似曲线的连续性限制
为εT − G1 。最后,将近似折线段映射到曲面上,便得到了真实投影曲线的三维
近似曲线。
在实验中,本文将提出的算法与现有的一阶算法 [1,2] (分别使用R-K2和R-
K4实现)进行了比较。对于实验中给出的例子,本文算法与现有算法的误差
相当(比R-K2实现的小,同时比R-K4实现的大),但两种算法在运行效率上的
差距非常明显(是R-K2实现的1.5倍,同时是R-K4实现的2倍)。为了进一步验
证所得到的实验结论,本文分析了两种算法的主要步骤,并发现两种算法的主
要区别是:本文算法需要计算曲面的三阶导数,而一阶算法不用。而曲面三阶
导数的计算主要决定于曲面的次数,因此本文猜测基曲面的次数是两种算法运
行效率差别的决定因素。本文针对这一猜想进行了实验,并且得到了曲面次数
从3 × 3到30 × 30时,两种算法的运行效率比。实验结果显示,随着曲面次数的
升高,两种算法的执行时间比并没有像预想的那样不断缩小,而是一直稳定

62
第 4 章 总结与展望

在一定范围之内(1.5∼2)。而这也更加证明了本文算法的执行效率优于一阶算
法。
除了一些常规情况下的法向投影,本文也考虑了投影过程中可能出现的两
种特殊情况――待投影曲线通过基曲面的主曲率中心和法向投影曲线出界。实
验结果显示,对于在CATIA或UG中出错的例子,本文算法都可以得到正确的结
果。
对于曲线在曲面上的给定方向投影,目前还没有文章进行过介绍,因此本
文使用提出的法向投影近似算法的思路计算给定方向投影。
类似地,本文首先使用直线与曲面求交的方法,计算待投影曲线P(t)的起
始点到基曲面S 的给定方向投影,并以得到的投影点作为跟踪法的起始点。本
文推导了给定方向投影的一阶和二阶微分方程组,并使用二阶跟踪法构造初始
近似折线段。然后,本文使用与法向投影相同的方式控制近似曲线的近似度
(即本文中介绍的Hausdorff距离)和连续性。
实验结果显示,给定方向投影近似算法的运行效率可以达到实时性要求,
并且同样地可以控制近似曲线的近似度和连续性。同时,对于两种特殊情况下
的投影――投影曲线出现跳跃的情况和投影曲线出界,该算法也可以得到正确
的结果。

4.2 展望

从总体来说,对于本文实验中的例子,本文算法都能够有效地运行。而且
与现有的算法相比,本文算法具有明显的优势。但是本文算法中也存在着一些
缺陷。
首先,对于法向投影的近似算法。如果基曲面的拓扑结构比较复杂,就需
要考虑一些曲面的连续性条件来保证法向投影曲线存在并且连续。同时,本文
算法也存在如下的限制。在第2.1.2节中本文假设基曲面至少为C 3 连续,而这一
限制要高于一阶法向投影算法 [1,2] ,并且这样的连续性要求在实际中并不总是能
够得到满足。因此,在未来的研究中,需要考虑如何降低对基曲面连续性的要
求,使该算法更具有通用性。同时,由于在构造初始近似折线段的过程中,为
了能够让离散点在投影曲线上均匀分布,本文使用了等距弧长增量。如果弧长

63
第 4 章 总结与展望

增量选择的合适,本文算法得到的投影效果就会比较好。但是如果弧长增量选
择不当,就会使得跟踪步长过大或者过小,进而导致整个算法效率低下。因此,
如何自动地生成合适的弧长增量,也是本文未来的主要研究方向。
对于给定方向投影,上述弧长增量的问题同样存在。同时,根据实验结果
可以看出,虽然使用相同的原理构造近似曲线,但由于在给定方向投影的计算
过程中需要进行多次的求交运算,因此给定方向投影的运行效率不如法向投影
的高。虽然其运行效率已经达到了实时的效果,但是本文认为还有提高的可能
性。因此,提出一种更加高效的直线与曲面的求交算法,也是本文下一步的研
究重点。

64
参考文献

参考文献

[1] Pegna J, Wolter F E. Surface curve design by orthogonal projection of space curves onto
free-form surfaces. Journal of Mechanical Design, 1996, 118(1):45–52.
[2] Wang X P, Zhang W Z, Zhou L S, et al. Constructing G1 continuous curve on a free-
form surface with normal projection. International Journal of Computer Mathematics, 2009,
1(1):113–135.
[3] 徐海银, 方雄兵, 胡利安. 参数曲线到隐式曲面的正交投影算法. 计算机辅助设计与图
形学学报, 2010, 22(12):2103–2110.
[4] Yang Y J, Cao S, Yong J H, et al. Approximate computation of curves on B-spline surfaces.
Computer Aided Design, 2008, 40(2):223–234.
[5] Liu X M, Yang L, Yong J H, et al. A torus patch approximation approach for point projection
on surfaces. Computer Aided Geometric Design, 2009, 26(5):593–598.
[6] Anis L, Francois T. Geometric algorithms for the intersection of curves and surfaces. Com-
puters and Graphics, 1995, 19(3):391–403.
[7] Hartmann E. On the curvature of curves and surfaces defined by normalforms. Computer
Aided Geometric Design, 1999, 16(5):355–376.
[8] Piegl L A, Tiller W. The NURBS Book, second ed. Berlin, Heidelberg, New York: Springer-
Verlag, 1997.
[9] Piegl L A, Tiller W. Parameterization for surface fitting in reverse engineering. Computer
Aided Design, 2001, 33(8):593–603.
[10] Johnson D E, Cohen E. A framework for efficient minimum distance computation. Proceed-
ings of Proceedings - IEEE International Conference on Robotics and Automatio, Volume 4,
1998. 3678–3684.
[11] Ma Y L, Hewitt W. Point inversion and projection for NURBS curve and surface: Control
polygon approach. Computer Aided Geometric Design, 2003, 20(2):79–99.
[12] Chen X D, Su H, Yong J H, et al. A counterexample on point inversion and projection for
NURBS curve. Computer Aided Geometric Design, 2007, 24(5):302.
[13] Selimovic I. Improved algorithms for the projection of points on NURBS curves and sur-
faces. Computer Aided Geometric Design, 2006, 23(5):439–445.
[14] Hoschek J, Lasser D. Fundamentals of Computer Aided Geometric Design. A.K. Peters,
1993.
[15] Hu S M, Wallner J. A second order algorithm for orthogonal projection onto curves and
surfaces. Computer Aided Geometric Design, 2005, 22(3):251–260.

65
参考文献

[16] Renner G, Weiβ V. Exact and approximate computation of B-spline curves on surfaces.
Computer Aided Design, 2004, 36(4):351–362.
[17] DeRose T D. Composing Bézier simplexes. ACM Transactions on Graphics, 1988,
7(3):198–221.
[18] DeRose T D, Goldman R N, Hagen H, et al. Functional composition algorithm via blossom-
ing. ACM Transactions on Graphics, 1993, 12(2):113–135.
[19] Hu Y P, Sun T C. Moving a B-spline surface to a curve-A trimmed surface matching algo-
rithm. Computer Aided Design, 1997, 29(6):449–455.
[20] Lee E. Computing a chain of blossom, with application to products of splines. Computer
Aided Geometric Design, 1994, 11(6):597–620.
[21] Liu W, Mann S. An optimal algorithm for expanding the composition of the polynomials.
ACM Transactions on Graphics, 1997, 16(2):155–78.
[22] Renner G, Weiβ V. Curves on surfaces: Analysis and new solutions. The mathematics of
surfaces, 1998, 8:57–71.
[23] Lee I K. Curve reconstruction from unorganized points. Computer Aided Geometric Design,
2000, 17(2):161–177.
[24] Wang W P, Pottmann H, Liu Y. Fitting B-spline curves to point clouds by curvature-based
squared distance minimization. ACM Transactions on Graphics, 2006, 25(2):214–238.
[25] Yang H P, Wang W P, Sun J G. Control point adjustment for B-spline curve approximation.
Computer Aided Design, 2004, 36(7):639–652.
[26] Srijuntongsiri G, Vavasis S A. A condition number analysis of a line-surface intersection
algorithm. SIAM Journal on Scientific Computing, 2007, 30(2):1064–1081.
[27] Rubin S M, Whitted T. 3-Dimensional Representation For Fast Rendering Of Complex
Scenes. Computer Graphics (SIGGRAPH’80 Proceedings), 1980, 14(3):110–116.
[28] Whitted T. Improved Illumination Model For Shaded Display. Communications of the
ACM, 1980, 23(6):343–349.
[29] Nishita T, Sederberg T W, Kakimoto M. Ray tracing trimmed rational surface patches.
Computer Graphics (SIGGRAPH’90 Proceedings), 1990, 24(4):337–345.
[30] Daniel T. On Ray Tracing Parametric Surfaces. Computer Graphics (SIGGRAPH’85 Pro-
ceedings), 1985, 18(4):171–179.
[31] Daniel L, Jakob G. Improved techniques for ray tracing parametric surfaces. The Visual
Computer, 1990, 6(3):134–152.
[32] Barth W, Sturzlinger W. Efficient ray tracing for Bezier and B-spline surfaces. Computer
and Graphics, 1993, 17(4):423–430.
[33] Alain F, John B. Chebyshev polynomials for boxing and intersections of parametric curves
and surfaces. Computer Graphics Forum, 1994, 13(3):127–142.

66
参考文献

[34] Qin K H, Gong M L, Guan Y J, et al. New method for speeding up ray tracing NURBS
surfaces. Computer Graphics, 1997, 21(5):577–586.
[35] Michael S, Richard B. Ray Tracing Free-Form B-spline Surfaces. IEEE Computer Graphics
and Application, 1986, 6(2):41–49.
[36] Yang C G. On Speeding Up Ray Tracing Of B-spline Surfaces. Computer Aided Design,
1987, 19(3):122–130.
[37] Wang S W, Shih Z C, Chang R C. An efficient and stable ray tracing algorithm for parametric
surfaces. Journal of Information Science and Engineering, 2002, 18(4):541–561.
[38] Ahmet C, Ali U. Five-axis tool path generation for 3D curves created by projection on B-
spline surfaces. The Interational Journal Of Advanced Manufacturing Technology, 2010,
49:1047–1057.

67
致谢与声明

致 谢

衷心感谢导师雍俊海教授三年来的精心指导。他严谨的科研作风和一丝不
苟的工作态度给我树立了典范,使我终生受益。

声 明

本人郑重声明:所呈交的学位论文,是本人在导师指导下,独立进行研究
工作所取得的成果。尽我所知,除文中已经注明引用的内容外,本学位论文的
研究成果不包含任何他人享有著作权的内容。对本论文所涉及的研究工作做出
贡献的其他个人和集体,均已在文中以明确方式标明。

签 名: 日 期:

68
个人简历、在学期间发表的学术论文与研究成果

个人简历、在学期间发表的学术论文与研究成果

个人简历
1986 年 06 月 01 日出生于辽宁省朝阳市。
2004 年 9 月考入北京理工大学软件学院软件工程专业,2008 年 7 月本科毕
业并获得软件工程学士学位。
2008 年 9 月免试进入清华大学软件学院攻读软件工程硕士学位至今。

发表的学术论文
[1] Hai-Chuan Song, Jun-Hai Yong, Yi-Jun Yang, Xiao-Ming Liu. Algorithm for
orthogonal projection of parametric curves onto B-spline surfaces. Computer-
Aided Design, 2011, 43(4):381-393. (Regular paper, SCI检索号 IDS:743KT,
EI检索号 20111013734335, 2009年影响因子:1.667)

69

You might also like