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

AABB包围盒

表达方法

AABB内的点满足不等式:\(\begin{align}x_{min}\leq x\leq x_{max}\\y_{min}\leq y\leq y_{max}\\z_{min}\leq z\leq z_{max}\end{align}\)

顶点:\(\begin{align} p_{min} = \begin{bmatrix} x_{min} & y_{min} & z_{min} \end{bmatrix}\\ p_{max} = \begin{bmatrix} x_{max} & y_{max} & z_{max} \end{bmatrix} \end{align}\)

中心点:\(c=(p_{min}+p_{max})/2\)

尺寸向量:\(s=p_{max}-p_{min}\),尺寸向量为\(p_{min}\)指向\(p_{max}\)的向量,包含矩形边界框的长、宽、高

半径向量:\(r=p_{max}-c=s/2\),半径向量为中心指向\(p_{max}\)的向量

明确定义一个AABB只需要\(p_{min}\)\(p_{max}\)\(c\)\(s\)\(r\)这5个向量中的两个(\(s\)\(r\)不能配对,其它任意两个都可以配对)

算法实现

struct Vec3 {float x, y, z;
};struct AABB {Vec3 min;Vec3 max;
};AABB ComputeAABB(const std::vector<Vec3>& vertices) {Vec3 min = vertices[0];Vec3 max = vertices[0];for (const auto& v : vertices) {if (v.x < min.x) min.x = v.x;if (v.y < min.y) min.y = v.y;if (v.z < min.z) min.z = v.z;if (v.x > max.x) max.x = v.x;if (v.y > max.y) max.y = v.y;if (v.z > max.z) max.z = v.z;}return { min, max };
}
bool PointInsideAABB(const Vec3& point, const AABB& box) {return (point.x >= box.min.x && point.x <= box.max.x) &&(point.y >= box.min.y && point.y <= box.max.y) &&(point.z >= box.min.z && point.z <= box.max.z);
}
bool AABBOverlap(const AABB& a, const AABB& b) {return (a.min.x <= b.max.x && a.max.x >= b.min.x) &&(a.min.y <= b.max.y && a.max.y >= b.min.y) &&(a.min.z <= b.max.z && a.max.z >= b.min.z);
}
http://www.sczhlp.com/news/3739/

相关文章:

  • 视频:Python对多行业板块股票数据LSTM多任务学习预测:SMA、RSI及K-means聚类实现涨跌趋势与价格联合预测-
  • Java编程提示词
  • 专题:2025半导体行业研究报告:从AI芯片到封测突围的生死局|附40+份报告PDF、数据汇总下载
  • EEG-CLIP:通过自然语言描述学习脑电图表征
  • 大模型开发提示词
  • 一文读懂GDDR7,与DDR、GDDR、GDDR6、HBM3、LPDDR5有啥区别
  • 读开源项目成功之道01什么是开源
  • Windows下部署多个redis
  • 00.01.一文读懂 HTTP 协议:从基础到核心知识点全解析
  • 抽象与性能:从 LINQ 看现代 .NET 的优化之道
  • DDR4仿真之仿真环境搭建
  • 揭秘AI芯片:CPU/GPU/NPU从计算到微架构
  • 深入解析:快速搭建Java服务指南
  • 大模型的发展历程
  • 狭义相对论
  • VMware NSX 4.2.3 发布,新增功能概览
  • 人源化单克隆抗体:精准医疗新利器
  • 研发了八年基础软件,57 岁的我在 AI 时代迎来了千亿机会
  • 设计模式(十七)行为型:迭代器模式详解 - 指南
  • 中国行政区划数据大全
  • 命令行日常使用指北 - Gon
  • 题解:T3 世界 / CF1184D2
  • 用隐函数求导解决高中约束极值问题
  • 一步一步学习使用LiveBindings(3) 绑定到ListView,用TProtoTypeBindSource创建样例数据
  • HackerOne漏洞报告:AddTagToAssets操作中的IDOR漏洞分析
  • 架构反思升级版:SSR / CSR 分层职责精炼总结
  • Error: Attempting to parse an unsupported color function oklab。html2canvas报错
  • 第十一天
  • Flutter 接入 Google Sign In(不用Firebase)
  • 2 增值税