曲线曲面求交解析方案-平面+曲线
曲线曲面求交解析方案-平面曲线文章目录曲线曲面求交解析方案-平面曲线一. 通用约定1. 输入对象2. 容差规则3. 结果规则二. 直线与平面求交1. 有限线段的端点距离分类2. 穿越时的精确交点3. 无限直线情况三. 圆/椭圆与平面求交1. 为什么不直接用两平面交线与圆/椭圆求交2. 统一参数表达3. 先处理平面平行/共面4. 非平行时用最大/最小有向距离分类5. 交点数量分类5.1 无交5.2 一个切触/容差接触点5.3 两个交点6. 容差模糊区处理7. 伪代码附录 A椭圆到平面的最大/最小有向距离点推导附录 B两个交点参数 t phi ± acos(-D / S) 的推导本文档单独记录直线、圆、椭圆与平面的解析求交方案。核心目标是用原始曲线到目标平面的有向距离做稳定分类避免浅夹角情况下直接构造两平面交线导致的容差漏交。一. 通用约定1. 输入对象曲线对象LGKLine3dLGKCircle3dLGKEllipse3d曲面对象LGKPlane2. 容差规则平行、垂直等方向关系使用系统角度容差LGKConstants::AngleTolerance。点到平面、点到曲线相交判断使用调用方传入的长度容差例如曲线曲面求交 option 中的m_tol。参数范围过滤不能只用参数差扩张应最终回到空间距离校验。所有候选点加入结果前必须同时满足在曲线参数范围内在平面参数范围内如果平面被上层裁剪为有界参数域点在原始曲线和原始平面上。3. 结果规则离散交点至少记录3D 交点坐标曲线参数curveParam平面参数uv求交类型普通交点Simple或切触/容差接触Tangent。如果曲线整体位于平面内数学结果是重合区间不是离散交点。当前点求交接口若不能直接返回 overlap可暂时返回空点结果后续应通过 overlap 结果扩展表达。二. 直线与平面求交适用对象LGKLine3d或有限线段与平面。直线/线段与平面求交应优先使用点到平面的有向距离做分类而不是先直接套代数公式。原因是有向距离分类可以自然处理无交、穿越、端点接触和重合并且和圆/椭圆-平面求交的“先看距离范围再生成交点”的思路一致。1. 有限线段的端点距离分类设线段为L(t) P0 t (P1 - P0), t ∈ [0, 1]平面为n · (X - Q) 0其中n是单位法向。计算两个端点到平面的有向距离d0 n · (P0 - Q) d1 n · (P1 - Q)用d0、d1和长度容差tol分类d0 tol d1 tol两个端点都在平面正侧无交d0 -tol d1 -tol两个端点都在平面负侧无交|d0| tol |d1| tol整条线段在平面容差内返回重合区间只有一个端点满足|di| tol返回该端点作为端点接触d0、d1一正一负线段穿过平面计算精确交点。2. 穿越时的精确交点当端点有向距离异号时交点参数由线性插值得到t d0 / (d0 - d1)交点为P P0 t (P1 - P0)这个公式来自d(t) (1 - t) d0 t d1令d(t) 0(1 - t) d0 t d1 0得到t d0 / (d0 - d1)候选点加入结果前仍应检查t是否位于[0, 1]|n · (P - Q)| tol如果上层使用无限直线或射线按对应参数域规则过滤。3. 无限直线情况如果输入是无限直线L(t) O t D计算den n · D num n · (O - Q)|den| angleTol且|num| tol直线位于平面内返回重合直线|den| angleTol且|num| tol直线平行平面无交否则t -num / den P O t D对于有限线段即使底层用无限直线公式生成候选点最终也应回到端点有向距离和参数域做过滤。线段场景下端点距离分类是更稳定、更直接的主流程。三. 圆/椭圆与平面求交适用对象LGKCircle3d/LGKEllipse3d与平面。圆和椭圆都是位于自身平面内的完整平面曲线。与另一个平面求交时数学上可以转化为“曲线所在平面与目标平面的交线”再与圆/椭圆求交但是在几何内核中直接把两平面交线作为主判据会有小角度容差问题。因此本方案优先使用圆/椭圆上点到目标平面的最大/最小有向距离进行分类。1. 为什么不直接用两平面交线与圆/椭圆求交设曲线所在平面为Pi_c目标平面为Pi。当二者不平行时精确数学交点一定落在L Pi_c ∩ Pi因此直接计算L再做L与圆/椭圆求交看起来最自然。但当两个平面夹角很小时这个方案会变得不稳定两平面交线的位置对平面法向和点位误差非常敏感。夹角越小同样的平面距离误差会在交线位置上放大得越明显。L与圆/椭圆的求交通常是严格的曲线内判定。如果交线因为数值误差被推离曲线可能得到“无交”。但从原始几何角度看圆/椭圆上某个点到目标平面的距离可能已经在长度容差内这应该被识别为容差接触或切触。因此小角度时“交线没有精确碰到圆/椭圆”不等价于“圆/椭圆与目标平面在容差意义下无交”。换句话说线-圆/线-椭圆适合作为交点生成手段但不适合作为浅夹角情况下的唯一存在性判据。更稳定的判据是直接考察曲线上所有点到目标平面的有向距离范围dMin d(t) dMax如果整个距离范围都在目标平面一侧则无交如果极值距离在容差内则有一个切触/容差接触点如果最小值和最大值异号则有两个交点。这个判据直接作用在原始曲线和目标平面上不需要构造病态的两平面交线。2. 统一参数表达椭圆参数式E(t) C a cos(t) U b sin(t) V其中C椭圆中心U、V椭圆所在平面内的两个正交单位轴a、b两个半轴长度N U × V椭圆所在平面法向t椭圆参数完整椭圆通常取[0, 2pi)。圆是椭圆的特例a b R目标平面为n · (X - P0) 0其中n是单位法向P0是平面上一点。3. 先处理平面平行/共面先判断曲线所在平面和目标平面是否平行|N × n| angleTol或等价地使用abs(N · n)接近1。如果平行则判断中心到目标平面的有向距离D n · (C - P0)|D| tol曲线整体位于目标平面内返回重合类型参数区间为完整圆/椭圆参数域或弧段自身参数域|D| tol平行不共面无交。4. 非平行时用最大/最小有向距离分类非平行时曲线上点到目标平面的有向距离为d(t) n · (E(t) - P0)它可以写成d(t) D A cos(t) B sin(t)其中D n · (C - P0) A a (n · U) B b (n · V)令S sqrt(A^2 B^2) phi atan2(B, A)则最大/最小有向距离和对应参数为dMax D S, tMax phi dMin D - S, tMin phi pi对应空间点为PMax E(tMax) PMin E(tMin)这一步对圆和椭圆都成立不需要再按平面夹角是否大于45°分支。圆的最大/最小点退化为沿目标平面法向在圆平面内投影方向的两个点椭圆的最大/最小点是椭圆在该方向上的支撑点受半轴长度影响。5. 交点数量分类使用dMin、dMax和长度容差tol分类5.1 无交dMin tol或dMax -tol说明整条圆/椭圆都在目标平面同一侧无交。5.2 一个切触/容差接触点如果|dMin| tol则最小距离点PMin E(phi pi)是切触/容差接触点。如果|dMax| tol则最大距离点PMax E(phi)是切触/容差接触点。这里推荐直接返回极值点而不是再依赖两平面交线与圆/椭圆求交。因为这个分支正是浅夹角下最容易被交线法漏掉的情况。5.3 两个交点如果dMin -tol dMax tol说明曲线一部分在目标平面正侧一部分在负侧必然有两个交点。两个交点参数可以直接解析得到theta acos(clamp(-D / S, -1, 1)) t1 phi theta t2 phi - theta再计算P1 E(t1) P2 E(t2)候选点加入结果前仍需对周期参数做归一化如果是圆弧/椭圆弧检查参数范围用点到目标平面的空间距离做最终验证按 3D 点距离去重根据切向与平面法向关系标记普通交点或切触点。6. 容差模糊区处理可能出现以下接近退化的情况S非常小非平行判断和距离函数矛盾通常说明两个平面几乎平行、输入轴不规范或曲线退化dMin和dMax都在容差内数学上非平行完整非退化椭圆不应整体在平面内但在容差意义下整条曲线可能都接近目标平面两个解析交点非常接近接近相切应按空间距离去重并优先返回切触类型。这些情况不应通过宽泛异常或静默空结果掩盖。建议保留明确分支要么按近似重合/容差接触返回要么降级到通用数值校验并在调试日志中暴露原因。7. 伪代码IntersectEllipsePlane(E, Plane) { C E.center U normalize(E.axisU) V normalize(E.axisV) a E.radiusU b E.radiusV N normalize(U × V) n normalize(Plane.normal) P0 Plane.origin if IsParallel(N, n, angleTol): D n · (C - P0) if abs(D) tol: return Coincident(E, E.interval) return Empty D n · (C - P0) A a * (n · U) B b * (n · V) S hypot(A, B) if S tol: return HandleNearParallelOrDegenerateCase() phi atan2(B, A) dMin D - S dMax D S if dMin tol or dMax -tol: return Empty result EmptyResult if abs(dMin) tol: t NormalizePeriod(phi pi) result.AddTouch(E(t), t) if abs(dMax) tol: t NormalizePeriod(phi) result.AddTouch(E(t), t) if result not empty: result.UniqueBy3dDistance(tol) return result // dMin -tol dMax tol q clamp(-D / S, -1, 1) theta acos(q) t1 NormalizePeriod(phi theta) t2 NormalizePeriod(phi - theta) result.AddIfValid(E(t1), t1) result.AddIfValid(E(t2), t2) result.UniqueBy3dDistance(tol) return result }附录 A椭圆到平面的最大/最小有向距离点推导椭圆参数式为E(t) C a cos(t) U b sin(t) V平面有向距离为d(t) n · (E(t) - P0)代入椭圆参数式d(t) n · (C - P0) a (n · U) cos(t) b (n · V) sin(t)记D n · (C - P0) A a (n · U) B b (n · V)则d(t) D A cos(t) B sin(t)D是常数不影响极值点。只需要求g(t) A cos(t) B sin(t)的极值。对g(t)求导g(t) -A sin(t) B cos(t)极值点满足-A sin(t) B cos(t) 0即B cos(t) A sin(t)使用atan2避免A 0的除零问题得到phi atan2(B, A)并有cos(phi) A / S sin(phi) B / S S sqrt(A^2 B^2)因此在t phi时g(phi) A cos(phi) B sin(phi) A^2 / S B^2 / S S这是最大值在t phi pi时g(phi pi) -S这是最小值。所以dMax D S, tMax phi dMin D - S, tMin phi pi几何上最大点相对椭圆中心的向量为E(tMax) - C a cos(phi) U b sin(phi) V (a^2 (n · U) / S) U (b^2 (n · V) / S) V因此椭圆最大距离点是按a^2、b^2加权的支撑点。圆的情况下a b R该方向退化为目标平面法向在圆平面内的投影方向。附录 B两个交点参数t phi ± acos(-D / S)的推导交点满足点在目标平面上d(t) 0也就是D A cos(t) B sin(t) 0令S sqrt(A^2 B^2) phi atan2(B, A)则cos(phi) A / S sin(phi) B / S由余弦差角公式cos(t - phi) cos(t) cos(phi) sin(t) sin(phi)代入上式cos(t - phi) cos(t) A / S sin(t) B / S两边乘以SS cos(t - phi) A cos(t) B sin(t)因此距离函数可以写为d(t) D S cos(t - phi)交点条件变成D S cos(t - phi) 0即cos(t - phi) -D / S令q clamp(-D / S, -1, 1) theta acos(q)余弦方程在一个周期内有两个解t - phi theta t - phi -theta所以两个交点参数为t1 phi theta t2 phi - theta也就是t phi ± acos(-D / S)当|D| S时theta为0或pi两个参数退化为同一个空间点对应切触实现上应由dMin/dMax的极值容差分支提前处理。

相关新闻

2026年论文降AI保姆级教程:亲测5款好用的AI智能降重工具,教你从80%降至10%

2026年论文降AI保姆级教程:亲测5款好用的AI智能降重工具,教你从80%降至10%

2026年各大院校对AIGC的检测越来越严了!不少同学对着高AI率的文章发愁,但其实找对方法,降下来真没那么难。为了帮大家搞定AI率问题,我把市面上十几款主流降AI工具都挨个测了一遍,今天就来分享——怎么在保住文章逻辑的…

2026/6/28 3:23:16阅读更多 →
GPT-5.6 三款模型分层亮相、美团大规模开源、A 股周五大跌

GPT-5.6 三款模型分层亮相、美团大规模开源、A 股周五大跌

GPT-5.6 三款模型分层亮相、美团大规模开源、A 股周五大跌 免责声明:本文内容综合自公开媒体报道,仅供参考,不构成任何投资建议。股市有风险,投资需谨慎。作者不对因使用本文内容而产生的任何损失承担责任。 🔥 今天你…

2026/6/28 3:23:16阅读更多 →
AI率爆表怎么办?10款降AIGC平台实测(含免费降ai率工具)真实避坑指南

AI率爆表怎么办?10款降AIGC平台实测(含免费降ai率工具)真实避坑指南

最近这半年,我敢说,被“论文降aigc”折磨的同学,绝对比被查重折磨的还多。 说实话,现在这情况太难了。 你是不是也一样?有时候,你就是用AI帮你润色个摘要和前言,没写几个字,都可能被…

2026/6/28 3:23:16阅读更多 →
UnityUI中使用中文文本

UnityUI中使用中文文本

生成支持中文的.asset文件找到支持中文的字体,如:Windows 系统自带:C:\Windows\Fonts\simhei.ttf(黑体)、msyh.ttf(微软雅黑)导入Unity(导入的字体文件)选中刚导入的字体文件 → 右键 → Create…

2026/6/28 5:03:22阅读更多 →
基于大数据爬虫+Hadoop+深度学习的商品管理系统

基于大数据爬虫+Hadoop+深度学习的商品管理系统

选题背景 在数字经济浪潮席卷全球的今天,电子商务已成为驱动经济增长的核心引擎之一。海量的商品数据以前所未有的速度在互联网上生成、流动与沉淀,构成了一个庞大而复杂的数字商业生态。然而,面对如此浩瀚的数据海洋,传统的商品信…

2026/6/28 5:03:22阅读更多 →
将正在运行的 shell 进程从当前终端剥离,并重新挂载到新的 screen 会话中

将正在运行的 shell 进程从当前终端剥离,并重新挂载到新的 screen 会话中

别再担心 VPN 连接断开导致远程任务被杀掉了。你可以通过分离 screen 会话并在稍后重新连接,以安全可控的方式从笔记本电脑或台式机连接到远程服务器工作。 如何将正在运行的任务从当前 shell 会话中剥离? 有几种方法可以实现这一点。最简单且最常用的方式可能是将进程放入…

2026/6/28 5:03:22阅读更多 →
BSC链空窗期黑马:Crypto Lifeline低门槛办公室经营链游

BSC链空窗期黑马:Crypto Lifeline低门槛办公室经营链游

时隔一段时间,链游板块再度受到关注。目前Solana链上有几款链游表现活跃,单个游戏日内在线人数可达数千人,其龙头代币Kins市值峰值曾突破2000万美元,在短时间内吸引了较多玩家参与,链游叙事重新成为市场讨论点之一。随…

2026/6/28 5:03:22阅读更多 →
2026年蚌埠家电清洗培训公司盘点涵盖各类信息整理

2026年蚌埠家电清洗培训公司盘点涵盖各类信息整理

导语在当今注重生活品质的时代,家电清洗服务的需求日益增长,专业的家电清洗培训公司也如雨后春笋般涌现。2026年蚌埠地区的家电清洗培训公司为有兴趣投身这一行业的人提供了学习机会。小绿人家电清洗培训作为行业内较知名的品牌,以其独特的教…

2026/6/28 5:03:22阅读更多 →
unity 2d 平调跳跃 小游戏 源码 免费开源

unity 2d 平调跳跃 小游戏 源码 免费开源

【免费】unity2d平调跳跃小游戏源码免费开源资源-CSDN下载

2026/6/28 4:58:21阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/28 0:08:01阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/28 0:08:01阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/28 0:08:01阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/28 0:08:01阅读更多 →