本文介绍一种空间过滤优化策略:先用轴对齐边界框(aabb)快速剔除明显超距的点,再对候选集精确计算欧氏距离,显著减少冗余运算,适用于php等通用语言实现的平面点集邻域查询。
在二维平面(如 800×800 像素画布)中查找以某点为中心、半径为 r 的圆形区域内所有点,若直接对全部点两两计算欧氏距离,时间复杂度为 O(n),当点集规模增大(如数百至数千点)时性能迅速下降。为提升效率,应采用「粗筛 + 精判」两级策略:
以目标中心点

该正方形完全包含目标圆(圆内接于正方形),因此所有圆内点必然落在该正方形内;反之,正方形外的点可立即排除,无需任何距离计算。
对通过正方形筛选的点(即满足 abs(x − cx) ≤ r && abs(y − cy) ≤ r 的点),再执行欧氏距离平方比较(避免开方提升性能):
$radiusSquared = $r * $r;
$neighbors = [];
foreach ($points as $point) {
$dx = $point['x'] - $cx;
$dy = $point['y'] - $cy;
// 利用距离平方避免 sqrt() 开销
if ($dx * $dx + $dy * $dy <= $radiusSquared) {
$neighbors[] = $point;
}
}该方法简单、无依赖、零学习成本,在中小规模点集(≤ 5000 点)下可稳定提速 3–10 倍,是 PHP 环境下实现地理围栏(非经纬度)、游戏碰撞检测、UI 元素邻近交互等场景的理想起点。