
本文介绍如何将一个给定坐标的较大正方形,按指定边长均匀分割为多个不重叠的小正方形,并返回其坐标数组;支持边界截断处理,自动忽略无法容纳完整小正方形的边缘区域。
本文介绍如何将一个给定坐标的较大正方形,按指定边长均匀分割为多个不重叠的小正方形,并返回其坐标数组;支持边界截断处理,自动忽略无法容纳完整小正方形的边缘区域。
在地理围栏、图像分块、网格化渲染或空间索引等场景中,常需将一个大矩形(此处特指正方形)按固定尺寸切分为若干子正方形。关键在于:确保每个子正方形严格对齐、不越界、边长恒定,且坐标格式统一为 [x1, x2, y1, y2](左上→右下,含端点)。
以下是一个健壮、可复用的 PHP 实现:
$x1 = 1; $x2 = 100; $y1 = 1; $y2 = 100; $smallerSquareSide = 10; $res = []; // 外层循环遍历 y 方向(行) for ($i = $y1; $i + $smallerSquareSide - 1 <p>✅ <strong>输出示例(前5项):</strong> </p><pre class="brush:php;toolbar:false;">[ [1, 10, 1, 10], [11, 20, 1, 10], [21, 30, 1, 10], [31, 40, 1, 10], [41, 50, 1, 10], // … 共 10×10 = 100 个小正方形 ]
⚠️ 注意事项:
- 边界处理:循环条件
- 空隙容忍:当大正方形边长不能被 smallerSquareSide 整除时(例如 $x2=105),右侧/底部多余区域(如 x=101–105)将被自动跳过,不生成不完整正方形——这是预期行为,避免数据失真。
- 扩展建议:如需保留边缘不完整区域(如生成 10×10 + 10×5 的残缺矩形),可改用 floor(($x2 - $x1 + 1) / $smallerSquareSide) 计算列数,并单独处理余数;但本方案坚持「只返回完整正方形」的设计原则,更适用于栅格化、瓦片服务等标准场景。
该方法时间复杂度为 O(n²),其中 n 为单边可容纳小正方形数量,高效且无依赖,可直接集成至空间计算工具链中。










