Point与AABB间的最远点对

点云包围盒AABB/OBB的生成 本篇文章主要讲pcl中如何生成点云AABB包围盒, 参考的文章pcl官网教程:http://pointclouds.org/documentation/tutorials/moment_of_inertia.php#moment-of-inertia 教程中提供了两种包围盒的生成方法: 一种是直接利用addcube进行生成立方体; 另外一种是获取每个角点的坐标,利用addLine进行划线。... 阅读详情

最近需要做一些碰撞检测相关的东西。AABB是游戏引擎中最常用的碰撞基本体了,具有各种优良的特性。其本身的自交判断很简单(这句话咋恁别扭呢*~*),而且与其它形体的相交判断也不是很复杂。求一点到AABB上的最近点对很常用,也比较简单,代码如下所示:

void ClosestPtPointAABB(const Point& p , const AABB& b , Point& q)
{
	for (int i = 0 ; i < 3 ; ++i)
	{
		float v = p[i];
		v = max(v , b.min[i]);
		v = min(v , b.max[i]);
		q[i] = v;
	}
}

反过来,求一点到AABB上的最远点呢?这个操作可能没有求最近点常用,但是还是会有使用场合的。分析一下可以发现AABB上到另外一点间的最远点其实就是组成其的8个点中的一个,但是该不会要逐个遍历吧,那也太原始了。其实只需要判断一下这个点在AABB中所处的大体位置,然后决定选用那个角点就Okay了。

void FurthestPtPointAABB(const Point& p , const AABB& b , Point& q)
{
	Point minP , maxP , c;
	minP = b.GetMin();
	maxP = b.GetMax();
	c    = b.GetCenter();

	// X
	q.x = (dstPoint.x > center.x) ? minPos.x : maxPos.x;

	// Y
	q.y = (dstPoint.y > center.y) ? minPos.y : maxPos.y;

	// Z
	q.z = (dstPoint.z > center.z) ? minPos.z : maxPos.z;
}

另外,还有关于计算生成Bounding Sphere的问题。比如对于一个Camera,可能需要从其对应的Frustum来生成一个Sphere作一些特殊目的的使用,比如Culling等。一般的方法(且也是之前用的方法)是直接求出Frustum对应的8个顶点的Average Point,然后得到球体的中心,接着选取该中心到8个顶点中的最远距离做为半径。但是某些情况下这种方法可能会得到极不好的结果,对于不均匀、不规则的Frustum可能会得到灰常巨大的Sphere,可以看下图对于一个2D三角形的说明。

 

更好的一种方法是先求出包围Frustum的AABB(当然,OBB会更好),然后从此AABB上来计算得到对应的Sphere,这样就会得到稍优化的Sphere。

当然对于计算包围Sphere最精确的方法就是计算出外切圆了,但是这代价就比较大了,应用会有所限制。

 

点云库PCL学习:提取最小包围盒(AABB、OBB) 提取最小包围盒(AABB、OBB)最小包围盒介绍AABB、OBB包围盒的提取提取结果 最小包围盒介绍 包围盒也叫外接最小矩形,是一种求解离散点集最优包围空间的算法,基本思想是用体积稍大且特性简单的几何体(称为包围盒)来近似地代替复杂的几何对象。 常见的包围盒算法有AABB包围盒、包围球、方向包围盒OBB以及固定方向凸包FDH。碰撞检测问题在虚拟现实、计算机辅助设计与制造、游戏及机器人等领域有着广泛... 阅读详情

相关推荐

Sphere-AABB Intersecting test

详细讲解如何进行Sphere-AABB交叉检测技术

i_dovelemon的专栏 1878

AABB上距离点最近的距离、AABB与球相交检测

AABB上距离点最近的距离、AABB与球相交检测 AABB 即轴对其矩形边界框(每一条边都平行于坐标轴的矩形边界框),2D中为无旋转的 矩形,3D中为无旋转的六面体,长宽高可以各不相同。 AABB内的点满足以下条件 Xmin < X < Xmax Ymin < Y < Ymax Zmin < Z < Zmax 两个重要的点 Pmin = (Xmin, Ymin, Zmin) Pmax = (Xmax, Ymax, Zmax) 中心点C C = (Pmin + Pmax)

lq 1207

VC++实现AABB碰撞检测:从原理到MFC可视化模拟系统

碰撞检测是计算机图形学与游戏开发中的基础技术,用于判断虚拟场景中物体是否发生接触。其核心原理是通过几何计算分析物体间的空间关系,其中包围盒(Bounding Volume)技术因其高效性而被广泛应用。AABB(轴对齐包围盒)作为最常用的包围盒类型,通过将物体包裹在一个边平行于坐标轴的长方体内,极大地简化了相交测试的复杂度,其检测算法仅需在每一坐标轴上进行区间重叠判断,计算效率极高。这项技术的核心价值在于,它为实时图形应用(如游戏、虚拟仿真)提供了高性能的空间查询能力,是构建物理引擎和交互系统的基石。本文聚焦

weixin_30924239的博客 345

AABB与球的相交检测、AABB到一个点最近的点

球与立方体碰撞检测 using System.Collections; using System.Collections.Generic; using UnityEngine; public class OBB : MonoBehaviour { public Transform target; // 立方体的最大顶点位置 private Vector3 max; ...

lq 2973

光线-AABB相交检测:3D实时交互的底层基石算法

AABB(轴对齐包围盒)是3D空间中用于快速粗筛的核心几何结构,其与光线的相交判断构成了碰撞检测、视锥裁剪和空间索引的性能基础。Slab Method通过将三维相交问题解耦为X/Y/Z三组一维区间裁剪,仅需6次除法与若干极值比较,实现纳秒级判定,远超球体检测的精度与OBB检测的速度。该算法支撑着游戏引擎的射线拾取、光线追踪的BVH遍历、3D打印切片的空间跳过及AR场景中的实时锚定等关键流程。作为工业级鲁棒实现的前提,它天然适配浮点容差处理、零分量分支规避与SIMD向量化优化,是连接数学原理与工程落地的典型入

weixin_30387423的博客 316

CloudCompare&PCL 点云AABB包围盒

AABB的算法思想相对简单,即求取点云的三个维度的最大最小值即可构成该包围盒。

dayuhaitang1的博客 1319

《3D 数学基础》几何检测-最近点

AABB(Axis-Aligned Bounding Box,轴对齐的包围盒)是一个在三维空间中常用于表示物体边界的几何形状,通常由两个对角点(最小点和最大点)定义。(2)带入公式p(t) = p_org + td即可求得q'=p_org + (d·(q-p_org))d。d是c-q,其中加粗都是向量表示的点坐标。其中q是平面外的点,平面公式是q·n=d. p是平面上的点,n是法向量。其中p_org是起始点,d是单位向量,t是自变量,可以无限大。q'是距离q的最近点,也就是q在直线上的投影。

一千零一夜的博客 1058

PCL 计算点云AABB包围盒的体积【2026最新版】

AABB包围盒又称了 轴对齐包围盒,是点云包围盒里最简单的一种,其计算方法也极其简单。获取包围盒之后,根据包围盒的长宽高进行体积计算即可!博客长期更新,本文最近一次更新时间为:2026年5月3日。

点云侠的博客 2294

《实时碰撞检测算法技术》读书笔记(五):最近点计算(上)

点到面的最近距离 一点P以及法线n定义了一个平面π,所有该平面上的点X都满足方程n·(X - P) = 0(即从点P指向X的向量垂直于n)。现令Q为空间内任意一点,则面内距Q的最近点R为点QQ在该面上的正交投影,即从顶点Q处向平面垂直(依据法线n)移动。同时,对于值t,有R = Q - tn,将该表达式代入平面方程求解t: 将t代入到R = Q - tn并得到投影点R:

未命名 2908

PCL 点云AABB包围盒

PCL 点云AABB包围盒

dayuhaitang1的博客 715

PCL(34)点云AABB、OBB包围盒

#pragma warning(disable:4996) #include <pcl/features/moment_of_inertia_estimation.h> #include <vector> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/visualization/cloud_viewer.h> #include <boost/thr.

kangjielearning的博客 1566

用PCL绘制AABB和OBB包围盒

本文主要介绍基于PCL的AABB包围盒和OBB包围盒代码,并对两个包围盒均进行了二次封装,函数输入为点云指针。 首先,包含必要的头文件: #include <iostream> #include <string> #include <vector> #include <pcl/point_cloud.h> #include <pcl/point...

u012010729的博客 7999

Rijndael密码算法

一 什么是Rijndael Rijndael是由比利时密码学家设计的分组密码算法,于2000年被选为新一代的标准密码算法——AES。今后会有越来越多的密码软件支持这种算法。 Rijndael的分组长度和密钥长度可以分别以32比特为单位在128比特和256比特的范围内进行选择。不过在AES的规格中,分组长度固定为128比特,密钥长度只有128、192和256比特三种。 二 Rijndael的加...

实践求真知 1万+

MPI-IS Mesh空间搜索:AABB树与最近点查询的实战应用

MPI-IS Mesh Processing Library是一个功能强大的网格处理工具库,其中空间搜索功能通过AABB树(Axis-Aligned Bounding Box Tree)实现高效的几何查询,尤其在最近点查询方面表现出色。本文将深入解析AABB树的核心原理及其在实际场景中的应用方法,帮助开发者快速掌握这一关键技术。 ## 📌 AABB树:空间搜索的核心引擎 AABB树是一种基于

gitblog_01080的博客 863

【可穿戴算法开发】-PPG信号检测方法

文章目录一、PPG(光电容积脉搏波法)信号的检测原理二.PPG技术目前存在的问题(挑战)三. **心电信号产生的原理** 随着经济的发展,在人们生活水平提高的同时,高脂肪摄入和低运动量成为了人们普遍的生活模式,近年来高血压、高血脂已经发展为危险性最高的病症。心电、血压、血氧等生理参数是预防和分析心血管疾病的重要生理参数。 常用的心电测量仪器有:多导ECG心电图仪、PPG心率检测器、心率带等; 常...

wxq_1993的博客 2万+

华为EC6110系列(3798mv310芯片)强刷固件全解析:从准备到实战

本文详细解析了华为EC6110系列(3798mv310芯片)强刷固件的全过程,从准备工作到实战步骤,包括固件特点、刷机工具准备、详细刷机步骤及常见问题解决方案。适合想要提升盒子性能的用户参考,特别强调了刷机过程中的注意事项和实用技巧。

rock5的博客 728

Unity 2D物理引擎实战:从零实现AABB碰撞系统与空间划分

碰撞检测是游戏开发中的核心技术,它决定了游戏对象之间的交互逻辑与物理反馈。其基本原理是通过几何计算判断物体是否相交,而AABB(轴对齐包围盒)因其计算高效、实现简单,成为2D游戏中最常用的碰撞形状之一。掌握AABB碰撞系统不仅能提升对物理模拟底层原理的理解,更能为特定游戏风格(如像素风、休闲游戏)提供高度可控、性能优化的解决方案,实现超越通用物理引擎的定制化效果。本文基于Unity引擎,深入探讨了AABB碰撞检测的核心算法、高效的空间划分策略(如空间哈希)以及碰撞响应处理,旨在帮助开发者构建轻量、可控的2D

weixin_30675247的博客 359

告别手动输入!用Access批量导入307种土壤数据到SWAT模型(附完整MDB操作流程)

本文详细介绍了如何利用Microsoft Access批量导入307种土壤数据到SWAT模型,显著提升数据录入效率。通过解析usersoil表结构、提供Access操作指南和VBA自动化脚本,帮助环境工程师避免手动输入错误,实现高效数据管理。文章还包含性能优化技巧和常见错误解决方案,是SWAT模型用户的实用指南。

weixin_28366053的博客 324

简单AABB包围盒(轴向包围盒)碰撞检测实现(C++代码)

AABB包围盒算法是基于轴对齐的边界框,通过在三维空间中定义一个最小的长方体来包围物体。该长方体的边与坐标轴平行,从而简化了计算过程。算法的核心在于快速判断两个物体是否可能发生碰撞,通过比较它们的AABB包围盒是否重叠来实现。如果两个包围盒在任意轴上不重叠,则可以确定这两个物体不会发生碰撞,从而避免了复杂的精确碰撞检测。这种方法在计算机图形学、物理仿真和游戏开发中广泛应用,因其高效性和简单性而备受青睐。

qq_36812406的博客 958

S7-200SMART 中如何实现单按钮启停功能(两种方法)?

S7-200SMART 中如何实现单按钮启停功能(两种方法),Toggle库指令,状态翻转

Robot_PLC_HMI_Automation 1万+

什么是 PD 电压诱骗?

电压诱骗” 的意思就是,使用某些方法让 PD 充电器误以为设备需要更高的电压,从而让充电器提供比实际需要更高的电压。手机可能只需要 5V,但笔记本电脑可能需要 20V,通过 PD 协议,充电器能够根据设备的需求输出合适的电压和电流。在“电压诱骗”的情况下,你通过某种手段让充电器以为设备需要 12V,于是充电器会按照这个伪造的请求输出 12V,而不是默认的 5V。充电器评估自己的能力,如果可以提供设备需要的电压和电流,它会调整输出电压,从默认的 5V 切换到设备请求的电压(如 12V)。

qq_45430571的博客 2657

边界检测与碰撞处理:从AABB到OBB的完整技术方案

边界检测是计算机图形学和游戏开发中的基础概念,通过几何算法判断物体间的空间关系。其核心原理包括坐标比较、分离轴定理和射线投射等技术,能够有效解决物体交互的精确性问题。在技术价值层面,高效的碰撞检测可以提升应用的交互真实感和性能表现,避免事件穿透和计算浪费。这一技术广泛应用于游戏开发中的物理交互、UI自动化测试的点击验证以及AR/VR场景的虚实结合等场景。特别是在游戏开发领域,边界框(Bounding Box)和方向包围盒(OBB)等算法成为解决物体碰撞的高频方案。本文深入探讨了从基础的AABB检测到复杂的连

weixin_30301449的博客 421

JEDEC JESD51-14 瞬态双界面测试方法详解

(瞬态双界面测试方法,用于测量具有单路径热流的半导体器件的结到壳热阻 RθJC,包括结到壳顶部 RθJCT 和结到壳底部 RθJCB)。该标准于 2010 年发布(版本 JESD51-14.1),旨在提供一种准确、可重复的瞬态方法来测量功率半导体器件(如 MOSFET、IGBT)的结到壳热阻(RthJC),取代传统的稳态测量方法(如 MIL-STD-883E METHOD 1012.1)。方法,通过比较两种不同热界面材料(TIM)下的瞬态温度响应曲线,提取 RthJC,而无需直接测量壳温(Tc)。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 604

Boost.Geometry在游戏开发中的妙用:从碰撞检测到AABB计算

本文探讨了Boost.Geometry在游戏开发中的高效应用,从碰撞检测到AABB计算,展示了其维度无关算法和零动态内存分配的优势。通过实战案例和代码示例,帮助开发者优化性能,解决几何计算中的精度和效率问题,特别适合大规模动态物体的处理。

weixin_29002209的博客 210

基于STM32的智能快递柜设计(全部资料)

本文设计了一种基于STM32F407ZGT6的智能快递柜系统,通过模块化硬件设计和软件算法优化,实现了24小时无人值守、温湿度智能调控、远程监控等功能。系统集成OLED显示、GSM通信、舵机控制、超声波检测等模块,存取响应时间≤3秒,识别准确率达99.2%,较传统模式效率提升60%。测试表明系统运行稳定,用户满意度达92%,具有成本低、安全性高、可扩展性强等特点,为智慧物流末端配送提供了创新解决方案。未来可引入AI算法、太阳能供电等功能进一步优化系统性能。

3254968421的博客 584

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 使用UMFPACK求解大型稀疏矩阵方程
下一篇: Rodrigues' Rotation Matrix(罗德里格旋转矩阵)
BugRunner
博客等级 码龄17年 791粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值