本文主要介绍了一种通过GPU加速(CUDA)的基于仿射算术的B样条曲面求交法。
2.1:IA(Interval Arithmetic)为区间算术,AA (Affine Arithmetic)为仿射算术,它们都是区间分析的有力工具。二者区别在于AA的区间估计范围比IA要小,因而AA更为精确。不过AA运算的效率低速度慢,并且应用于求交上时其最终产生的结果是一个带状区域而非曲线。
2.2:在求交领域,常见的方法包括:跟踪法(从起始点出发跟踪)、代数法(消去理论与结式)和分解法(对曲面建立起多面体估计)。目前主流的一种方法是先用分解法来判定分支,之后依靠跟踪法绘制曲线。
本文算法改进:
1.扩展了仿射算术到B样条曲面上。
2.给出了几种级别的空间分解。
3.提出有效方法来细化带状相交区域。
3:给出了仿射算术的表示形式,即仿射形式,并定义了仿射形式与常数的加法数乘和其自身的加减乘除。(问题:如何确定 x i x_i xi的个数与大小)
4.1:将仿射形式取代参数值代入B样条曲面的表达形式中(同时覆盖多个节点区间的要将仿射形式进行分解),进而得到一个三维坐标区间,获得一系列的AABB(axis-aligned bounding box)。
4.2:从相交区域中提取交线。将两个曲面的四个参数构成四维空间,对这四个参数提出了一个重叠测试方程组,来对AABB进行重叠测试。对于重叠测试通过的区间进行分解,不断的分解使得区间变小,最终达到需要的最低Level,在两个曲面上分别获得带状的相交区域(条带)。这里利用CUDA给出了一个基于GPU的分解方法。
5:
条带薄化:参数域矩形上的四个点,对应于三维曲面上的四个点,对这四个点生成最小AABB,将每个条带上不与另一曲面其他AABB相交的矩形删除,实现了条带薄化。
相交点列生成:
利用点列连接方法进行聚类。首先将一个曲面的参数空间分解为一个个与相交区域相同分辨率大小的矩形,之后将相交区域上的矩形看作特征矩形,其他矩形看作非特征矩形,选择一个特征矩形作为种子,不断扩展出类矩形的区域群(存在两个终止条件)。完成一个区域群的构建后,我们从某个与群邻接的特征矩形出发建立新的区域群。
每个区域群确定一个相交点。在曲面P上,对于区域群里的每个矩形确定一个重心
D
p
D_p
Dp,而P上的矩形会对应另一曲面Q上的矩形,从而确定另一个重心
D
q
D_q
Dq。在每个群中,我们找到
∣
∣
D
p
−
D
q
∣
∣
||D_p-D_q||
∣∣Dp−Dq∣∣最小的那个矩形,将
D
p
+
D
q
2
\frac{D_p+D_q}{2}
2Dp+Dq作为交点。通过这种方式,我们会获得三个点列,两个在参数空间上,一个在三维空间中。
提高准确度。通过初始获得的交点
p
1
p_1
p1以及与之相距最近的曲面上的点
d
1
1
d_1^1
d11和
d
2
1
d_2^1
d21,获得
p
2
p_2
p2,该点由对应于
d
1
1
d_1^1
d11和
d
2
1
d_2^1
d21的两个曲面切面和由两条线
p
1
d
1
1
p_1d_1^1
p1d11和
p
1
d
2
1
p_1d_2^1
p1d21决定的平面相交决定。不断重复这一过程,直到符合要求(问题:要求怎么来的)。