计算机辅助设计系统中最困难的任务之一是在对复杂形状的对象进行建模时进行舍入。对于圆角的构建,以及 CAD 中的所有几何,几何内核负责。
从内核开发人员的角度来看,不可能涵盖所有的舍入选项,因为它们无穷无尽。我们的数学家不断在 C3D 的核心中添加新的特例,最近做了三面圆角(或全圆角)。
C3D Labs 的数学家兼程序员 Anna Ladilova 说,它的复杂性是什么以及该算法是如何工作的。
假设我们有一个包含三个面链的身体 - 中央(顶部)和侧面(右侧和左侧)。需要将中心面替换为与相邻侧面平滑连接的圆角曲面。这个新的表面将是一个完整的圆形。在一般情况下,它具有可变半径,该半径是自动确定的。
在许多著名的 CAD 系统中,都实现了全圆角运算,但并未公开其数学运算。
Solidworks 中的全圆角操作
因此,我们开发了自己的算法。它与其他开发人员的算法不同。
这些操作虽然名称相同,但导致的结果略有不同。这表明 SolidWorks 对圆三个面有不同的定义。
右边是原始模型,中间是 SolidWorks 中的整圆,左边是 C3D 中。
构建任何类型的舍入的任务包括几个阶段:
将给定的链分解为基本组件(对于圆三个面,它们恰好是三个面:左、右和中央)。
按顺序排列基本组件。
为每个基本组件构造一个圆角曲面。
将相邻的圆角曲面与边缘“缝合在一起”。
处理圆角链的末端部分,即将它们正确连接到修改后的主体。
此过程的关键点是第三步:为三个给定面创建圆角曲面。
要构建所需的曲面,首先需要确定圆角接触三个面的曲线。通常,这些曲线只能构造为通过预先计算的已知点的样条曲线。
考虑如何计算三个点 - 每个样条上一个。
处理基本组件。圆角接触沿曲线 I0 的三个面中的每一个I1 ,I2 蓝线显示
每个横截面中的横截面ABC:
(1)OA=OB=OC - 自动计算
(2)OA,OB,OC正交于对应点处表面的切平面
(3)PO锚点,位于平面中ABC。
左侧是取决于点的横截面。
在右侧,图形可能非常复杂,因此选择正确的“辅助”曲线是一项单独的任务。
既然我们知道如何为最简单的基本情况构建圆角曲面,我们可以继续进行一项更困难的任务:为一系列面构建曲面。
这里的主要问题是以平滑的方式“缝合”相邻的表面。这是算法的第四步。
困难恰恰在于缝合的平滑度,因为曲面是用不同的初始数据构建的。为了保证平滑,不得不使用各种技巧:在距离边界一定距离处改变纵向导数向量的方向和长度,改变边界处权重函数的导数值等. 结果在图中可见:更平滑的斑马线对应于更平滑的表面。
上面是没有抗锯齿算法的模型。下面 - 应用算法之后。
作为我们研究的结果,C3D 几何内核能够构建圆角的横截面、参考曲线、三个面的圆角;由于参数化的选择,可以使表面光滑;部分能够平滑地连接相邻的圆角曲面。 作者 — Anna Ladilova,博士,数学家兼程序员 C3D Labs