当前位置: 首页 > news >正文

假如有10条平行的轴线,怎样判断其中有4条是共面的

简化思路

因为方向平行,只需判断4个原点是否共面

4点共面条件: (P2-P1) × (P3-P1) · (P4-P1) = 0

代码

#include <vector> #include <algorithm> struct AxisInfo { CATCylinder_var spCylinder; CATMathPoint origin; CATMathVector direction; }; bool AreFourOriginsCoplanar(const CATMathPoint& p1, const CATMathPoint& p2, const CATMathPoint& p3, const CATMathPoint& p4, double tolerance = 1e-4) { CATMathVector v12 = p2 - p1; CATMathVector v13 = p3 - p1; CATMathVector v14 = p4 - p1; double mixed = (v12 ^ v13) * v14; return (fabs(mixed) < tolerance); } // 在10条轴线中找4条共面 void FindFourCoplanarAxes(const std::vector<AxisInfo>& axes, std::vector<std::vector<int>>& resultGroups, double tolerance = 1e-4) { int n = axes.size(); if (n < 4) return; // 遍历所有4组合 for (int i = 0; i < n - 3; i++) { for (int j = i + 1; j < n - 2; j++) { for (int k = j + 1; k < n - 1; k++) { for (int m = k + 1; m < n; m++) { if (AreFourOriginsCoplanar(axes[i].origin, axes[j].origin, axes[k].origin, axes[m].origin, tolerance)) { resultGroups.push_back({i, j, k, m}); } } } } } }

使用示例

// 准备数据(假设已从圆柱面获取轴线信息) std::vector<AxisInfo> axes; for (int i = 0; i < 10; i++) { AxisInfo info; info.spCylinder = vctCylinder[i]; info.origin = vctCylinder[i]->GetAxis().GetOrigin(); // 获取方向... axes.push_back(info); } // 找4条共面 std::vector<std::vector<int>> groups; FindFourCoplanarAxes(axes, groups); cout << "找到 " << groups.size() << " 组4条共面的轴线" << endl; for (const auto& g : groups) { cout << "组: " << g[0] << ", " << g[1] << ", " << g[2] << ", " << g[3] << endl; }
http://www.jsqmd.com/news/478878/

相关文章:

  • MongoDB知识点
  • 金融AI营销如何选型?原圈科技揭秘4大标准避坑指南
  • 2026年AI搜索生态爆发,用触有数据抢占六大平台可见率!
  • LangChain到底是啥?用大白话讲清楚
  • 将线程和锁构建图(后续通过检测环路以检测死锁)
  • 学长亲荐 9个降AI率软件降AIGC网站:本科生降AI率全测评与推荐
  • 2026年呼和浩特靠谱瓷砖大揭秘!哪种款式数量多你知道吗?
  • 哇塞!深圳市访客云产品1秒完成人证合一验证,你还不心动?
  • 拒绝纸上谈兵!破碎机振动治理,实测有效的定制化方案
  • 某端游外挂网络验证的分析与破解思路
  • 使用实时云渲染LarkXR顺利搭建云VR方案
  • Matlab中的一维无限能量艾里光束与一维有限能量艾里光束
  • 农经权二轮延包—带确认签字表的公示图
  • 方盾在口,安全在手:煤矿半面罩的职业健康使命
  • 轮毂电机分布式驱动车辆状态估计:EKF 与 UKF 的探索
  • 【Makefile 专家之路 | 基础篇】01. 万物起源:编译链接原理与 Makefile 的核心价值
  • Qt窗口模态设置
  • 别再拿AI生成“废片”了!Claude突发免费杀手锏,用动态白板降维打击传统图文交互
  • 讯维 AI 分布式可视化系统支持哪些 AI 智能应用,实际应用价值如何?
  • 老司机教你玩转智能避撞:从五次多项式到模型预测控制的那些事儿
  • 2026-03-14
  • YOLOv10全网首发:AAAI2026 | 融合PartialNet Block的C3k2-YOLO高效目标检测网络 | 轻量化涨点设计
  • 2026年好用的北京GEO优化公司排名出炉,哪家会是你的心头好?
  • 联合省选 2026
  • sdut-程序设计基础Ⅰ-实验四for循环(11-22)
  • 使用Conda和pip创建Python环境
  • 蓝牙连接不上的解决方法
  • 淘宝系逆向@阿里巴巴商家版-转人工逆向
  • 迁移学习中的负迁移风险:成因、检测与规避方案
  • 国家网络与信息安全信息通报中心通报OpenClaw安全风险预警