
容差设计与求交基础调研目录引言容差体系的理论基础精度、范围与容差变量点与高维几何的容差判定包含与重合无界小写几何求交与容差有界几何求交内核容差系统的设计要点附录五个常见问题FAQ1. 引言1.1 容差容差tolerance是几何内核一切数值判断的基石两点何时算重合、点何时算落在曲线上、两条曲线何时算相交最终都归结为与某个容差值的比较。把容差理论的正式阐述放在求交一起讲述——因为求交是容差被使用得最密集、最本质的场景。按几何维度递进组织点 → 曲线 → 曲面 → 三维 BODY容差机制随维度升高逐步展开正好构成一条完整的容差如何参与几何计算的叙事线。2. 容差体系的理论基础精度、范围与容差变量2.1 问题的起点点重合判断最简单的相交发生在零维判断两个 VERTEX点是否位于同一位置即测试重合coincidence。而什么算同一位置what constitutes the same由建模器自身的内部容差决定。2.2 精度与范围的权衡precision vs. range从一个思想实验出发阐述数值表示的根本约束计算机用固定位数的数字表示数值因此精度小数位数与范围可表示的最大与最小数之差必然是一场权衡trade-off。以一台只能用 5 位数字的计算机为例整数65591可想象为 5 个连续的数字盒子6 | 5 | 5 | 9 | 1若保留1 位小数可表示范围为0000.1 → 9999.9 0000.1 \to 9999.90000.1→9999.9即10 − 1 → 10 4 10^{-1} \to 10^{4}10−1→104若保留3 位小数范围缩小为00.001 → 99.999 00.001 \to 99.99900.001→99.999即10 − 3 → 10 2 10^{-3} \to 10^{2}10−3→102若保留4 位小数范围进一步缩小为0.0001 → 9.999 0.0001 \to 9.9990.0001→9.999即10 − 4 → 10 1 10^{-4} \to 10^{1}10−4→101。关键在每一种情况下可表示最大数与最小数之间的比值保持不变。ACIS 将该比值称为resnorresnor smallest largest const ( 本例中为 10 − 5 ) \text{resnor} \frac{\text{smallest}}{\text{largest}} \text{const} \quad (\text{本例中为 } 10^{-5})resnorlargestsmallestconst(本例中为10−5)这个比值反映了可用于表示一个数的数字位数动态范围。2.3 ACIS 容差变量总表在 ACIS 中可表示的最小数被称为 resabs。换言之给定位数约束提高精度必然压缩范围反之亦然而 resnor 作为数字预算的度量保持恒定。这是本次调研ACIS的核心表格原文完整内容如下变量名含义默认值resabs可表示的最小数Smallest number representable。若两点间距小于resabs则视为重合10 − 6 10^{-6}10−6resnor可表示最大值与最小值之间的比值Ratio between the biggest and the smallest values representable10 − 10 10^{-10}10−10resfit近似几何比较容差Tolerance applied to approximate geometric comparisons近似曲线或曲面上的每一点都必须位于其所近似的精确几何的resfit邻域之内10 − 3 10^{-3}10−3resmch计算机精度Computer precision给定计算机视为零的最大的小数即满足1 resmch ≠ 1 1 \text{resmch} \ne 11resmch1的量级反映数值计算的精度10 − 11 10^{-11}10−11四个变量的角色分工可以概括为resabs绝对分辨率——一切重合/为零类判定的基本门槛resnor动态范围约束——锁定建模世界的最大/最小尺度比本质上是数字位数预算resfit近似误差上限——约束 B 样条等近似表示与精确几何的偏差比resabs宽松 3 个数量级10 − 3 10^{-3}10−3vs10 − 6 10^{-6}10−6resmch机器精度基准——描述数值运算本身可信到什么程度。2.4 建模世界的尺度窗口单位制与 resabs 调整由 2.3 节可推出建模世界的尺度窗口。已知resabs最小值与resnor最大可表示值为largest resabs resnor \text{largest} \frac{\text{resabs}}{\text{resnor}}largestresnorresabsACIS文档里面讲到ACIS 内部是无单位的unit-less但为了方便应用间共享数据模型中会保存一个单位如 mm、inch、km见UNITS_SCALE类。若假定 1 个 ACIS 单位 1 毫米默认参数下的建模世界范围为10 − 6 mm → 10 4 mm 即 0.000001 mm → 10 m 10^{-6}\,\text{mm} \to 10^{4}\,\text{mm} \quad \text{即} \quad 0.000001\,\text{mm} \to 10\,\text{m}10−6mm→104mm即0.000001mm→10m调整规则原文关键设计决策只有resabs允许被应用修改Spatial 明确建议不要修改resnor它对应浮点格式的数字位数预算改它会破坏整个数值体系的一致性。单位换算通过改resabs实现。例如把内部单位从 mm 换成 inchresabs 10 − 6 25.4 3.937 × 10 − 8 \text{resabs} \frac{10^{-6}}{25.4} 3.937 \times 10^{-8}resabs25.410−63.937×10−8对应建模世界上限约 393.7 英寸。容差随文件持久化resnor与resabs的值在模型存盘时被写入文件。读入容差不同的模型时缩放是应用程序的责任ACIS 不自动做任何处理——这是一条明确的互操作性边界。更大的尺度跨越不必改容差而靠改变单位约定。原文举了一个生动的例子要建模跨度约10 14 10^{14}1014km10 万光年的银河系只需约定1 个 ACIS 单位 1 光年即可直接建模只要协作各方约定同一尺度而不是各自混用秒差距或天文单位就无需调整resabs。设计解读ACIS 的容差模型是绝对容差 固定动态范围resabs决定窗口下沿resnor决定窗口宽度二者共同确定上沿。改单位 平移窗口改resabs 改变窗口下沿同时按resnor恒等比移动上沿。这种设计使容差语义在整个建模世界内均匀一致代价是对超大/超小尺度场景要求应用层显式管理单位约定。2.5 容差的典型用途与比较函数族resabs的常见用途覆盖两端从判断点位于体积内部还是外部到检查模型的几何完整性geometric integrity。后者指确保各 FACE 的表面沿公共边界 EDGE 的曲线相交、且各 VERTEX 的点落在其所约束的 EDGE 曲线上。ACIS 提供了四个专用比较例程函数语义is_equal测试成对的double、position、vector、unit_vector是否在resabs之内彼此相等are_parallel测试成对的unit_vector/vector是否平行且指向同一方向are_perpendicular测试成对的unit_vector/vector是否在容差内垂直is_zero测试单个double、position、vector、unit_vector是否在resabs之内为零观察四个函数统一以resabs为门槛、覆盖相等/为零/平行/垂直四类基本谓词构成内核内所有数值判断的最小公理集。自研内核设计时应首先固化这一层避免各算法自行散落硬编码的容差数字。3. 点与高维几何的容差判定包含与重合前面解决点与点的比较接下来把容差推广到点与更高维几何曲线、曲面、实体的两种基本关系点在几何上on与点在实体内in。3.1 点-曲线/点-曲面判定test_point 家族curve与surface类中都定义了如下基于位置position的查询虚函数函数语义test_point测试一个点是否位于曲线或曲面上以resabs为容差test_point_tol测试一个点是否位于曲线或曲面上以给定精度与resabs中较大者为容差两点关键设计默认判定锚定resabs——与点-点重合判定同一门槛保证零维与一维/二维判定的一致性test_point_tol的取大策略given precision or resabs, whichever is larger应用可以放宽容差例如处理质量较差的输入数据但永远不会小于内核绝对分辨率——容差只能放大、不能击穿下限。这是一条重要的鲁棒性设计。3.2 点-实体包含分类api_point_in_body点相对实体BODY的包含关系由api_point_in_body判定给定一个点与一个 BODY返回该点位于内部inside、外部outside还是边界上on the boundary。该功能也可经 Scheme 扩展solid:classify-position调用。观察三态分类inside / outside / on本身即是容差的产物——在精确数学里恰在边界上是零测度事件只有引入容差后on才成为稳定可判定的状态。resabs在这里充当边界层厚度。4. 无界小写几何求交与容差4.1 小写几何类与大写 ENTITY 类的区分关键设计ACIS 用小写类名表示无界unbounded纯几何对象如straight、sphere、spline与之对应的大写类STRAIGHT、SPHERE、SPLINE是 ENTITY 体系成员。二者分工大写几何类如PLANE派生自ENTITY承载模型信息——例如记录有多少个 FACE 位于某个PLANE SURFACE上并支持回滚rollback等模型级操作小写几何对象如plane只表示纯几何不含任何支持回滚等模型操作的方法。无界的含义是其延伸不受 EDGE 的 LOOP 限制球面与圆虽无界但有限。4.2 三类求交例程与结果对象无界几何间的相交由不在 API 层的一组内核例程计算按维度组合分三类均返回描述单个相交结果的链表求交类型结果链表元素曲线–曲线curve_curve_int曲面–曲线curve_surf_int曲面–曲面surf_surf_int以int_plane_torus平面–圆环面求交为例交线结果按类型分流处理——可能是精确的ellipse椭圆也可能是intcurve用 B 样条近似的交线程序必须对结果类型做判断示例中遇到未知类型即报 “A surprise type” 退出。有界化选项面通常在布尔运算中作为 FACE 的一部分参与求交此时 FACE 有边界求交例程支持一个可选参数指定只在给定范围box内计算相交——把包围盒预过滤下沉到了最底层的无界几何求交。4.3 曲线-曲线求交的数学结构与容差压力一般曲线求交的算法骨架解析曲线对如圆/圆用特化解一般情况下对两条参数曲线s ( w ) s(w)s(w)与t ( u ) t(u)t(u)投影预检若两曲线相交其投影必相交——先利用这一点排除不相交情形。对 B 样条曲线可用控制点的投影做非相交测试控制凸包的分离性数值求解交点处s ( w ) t ( u ) s(w) t(u)s(w)t(u)即x ( w ) x ( u ) , y ( w ) y ( u ) , z ( w ) z ( u ) x(w) x(u), \quad y(w) y(u), \quad z(w) z(u)x(w)x(u),y(w)y(u),z(w)z(u)三个方程、两个未知数——超定方程组须用数值方法求解且过程因可能存在多个交点以及数字计算的有限精度而复杂化。容差视角投影预检是便宜的排除器数值求解才是容差真正发力的地方——收敛判据、重合判据、多交点去重全部依赖resabs级别的阈值。5. 有界几何求交5.1 API 层有界求交三件套进入有界几何后ACIS 在API 层提供三个级别的求交例程EDGE–EDGE、EDGE–FACE、FACE–FACE。5.2 轴对齐包围盒机制关键设计原文重点展开惰性创建所有几何 ENTITY 都可挂接轴对齐包围盒但默认不创建因布尔运算依赖快速相交测试布尔过程中会创建包围盒。需要使用包围盒的程序必须显式调用get_*_box例程强制计算*可为body、wire、shell、subshell、lump、face、loop、edge。坐标系归一比较两个 ENTITY 的包围盒时须把其中一个变换到另一个的坐标系。初步测试的做法是变换后再取盒transform then re-box——原文坦言这不是最优但足够快。缓存与失效包围盒按需计算计算后保存供复用ENTITY 被修改时只需删除旧盒如有。不持久、不回滚包围盒不记入回滚日志回滚记录中的盒指针恒为NULL也不存盘回滚后必须重算。盒运算重载符boxA boxBA 包含 B、boxA positionBA 包含点、boxA boxB两盒重叠、boxA boxB返回重叠盒即交集。5.3 曲面-曲面求交的数学结构与容差压力解析曲面对如球/锥用特化解一般情况下对两张参数曲面s ( u , w ) s(u, w)s(u,w)与t ( v , m ) t(v, m)t(v,m)交线上每点满足s ( u , w ) t ( v , m ) s(u, w) t(v, m)s(u,w)t(v,m)即x ( u , w ) x ( v , m ) , y ( u , w ) y ( v , m ) , z ( u , w ) z ( v , m ) x(u, w) x(v, m), \quad y(u, w) y(v, m), \quad z(u, w) z(v, m)x(u,w)x(v,m),y(u,w)y(v,m),z(u,w)z(v,m)初始点追踪。两大风险步长选择困难重重太大跳过特征、太小效率崩溃小段交线极易被漏掉。容差视角曲线追踪的每一步都内含容差判断——初始点是否存在等参数线求交是否命中、步进点精化的收敛阈值、相邻追踪段是否闭合全部以resabs/resfit级别的数量级为依据。6. 内核容差系统的设计要点四元容差分层各司其职。resabs绝对分辨率、resnor动态范围、resfit近似偏差、resmch机器精度四个量覆盖全部数值判断场景数量级依次拉开10 − 6 10^{-6}10−6、10 − 10 10^{-10}10−10、10 − 3 10^{-3}10−3、10 − 11 10^{-11}10−11。自研内核宜先定义这样一组宪法级容差常量禁止算法层私设阈值。只开放最安全的调节旋钮。仅resabs可改、resnor不建议改体现了容差可调但数值体系不可破坏的克制。自研内核应同样区分用户可调参数与系统不变量。无单位内核 单位约定承载尺度。大尺度问题靠改单位约定而非改容差解决避免容差被滥用为尺度补偿手段。容差随文件持久化缩放责任在应用。这是清晰的互操作性契约内核不猜、不自动缩放输入模型的容差不匹配由应用显式处理。容差只可放大、不可击穿。test_point_tol的取大策略给定值与resabs取较大者保证放宽容差时仍不违反内核绝对分辨率值得作为所有_tol变体接口的统一语义。谓词集中化。is_equal/is_zero/are_parallel/are_perpendicular四个比较函数是全部数值判断的入口便于全局审计与调试。附录五个常见问题FAQQ1ACIS 为什么用单一的resabs判定点重合而不引入相对容差因为resnor已经承担了相对职责它以恒定比值锁定了建模世界的动态范围使得在整个建模世界内绝对精度与尺度的关系是均匀的见 §2.2 的五位数字盒子模型。在这一前提下重合判定只需一个绝对阈值resabs即可语义简单且全局一致相对容差的复杂性被上移为单位约定 resabs平移§2.4。Q2resfit与resabs为什么相差三个数量级二者约束的对象不同resabs是两个几何元素是否可视为同一的判定门槛默认10 − 6 10^{-6}10−6resfit是近似表示如 B 样条与精确几何之间允许的最大偏差默认10 − 3 10^{-3}10−3。近似曲线的交线§4.2 中的intcurve本身就携带拟合误差若用resabs去卡近似偏差会导致大量合法近似被判为非法。Q3为什么 Spatial 建议不要修改resnorresnor反映的是可用数字位数浮点格式的固有属性改它等于宣称数字预算变了会使最大可表示值largest resabs / resnor整体漂移波及内核内所有与范围相关的假设。调整建模尺度应通过改resabs平移窗口或改单位约定实现§2.4。Q4为什么api_fafa_int返回 WIRE BODY 而不是曲线列表面-面交线在容差世界里天然分段、分环可能有多条闭合或开放交线且每条交线需要用带拓扑VERTEX/EDGE的结构表达端点与连接关系。WIRE BODY 正是交线的拓扑化容器与 ACIS的api_edfa_int返回ENTITY_LIST的思路一脉相承——结果形态的不确定性由容器类型吸收。Q5小写几何类plane与大写 ENTITY 几何类PLANE能否互相替代不能。小写类是纯几何对象无模型信息、无回滚支持大写类派生自ENTITY承载诸如哪些 FACE 位于该面上的模型级信息并支持回滚§4.1 脚注。底层求交例程如int_plane_torus操作小写对象API 层求交api_fafa_int等操作大写对象两层各司其职。