如何从大正方形提取固定小正方形
作者:SunnyJourney
时间:2026-04-17
浏览:0
本文介绍如何将一个给定坐标的较大正方形,按指定边长均匀划分为多个不重叠的小正方形,并返回其坐标数组;支持边界截断处理,自动忽略超出原区域的部分。

本文介绍如何将一个给定坐标的较大正方形,按指定边长均匀划分为多个不重叠的小正方形,并返回其坐标数组;支持边界截断处理,自动忽略超出原区域的部分。
本文介绍如何将一个给定坐标的较大正方形,按指定边长均匀划分为多个不重叠的小正方形,并返回其坐标数组;支持边界截断处理,自动忽略超出原区域的部分。
在图像处理、网格布局、地图瓦片生成或游戏开发等场景中,常需将一个二维区域(如大正方形)按固定尺寸切分为若干个规则子区域(小正方形)。关键在于:确保每个小正方形完全落在原始区域内,且彼此无重叠、无缝隙(除可能存在的右/下边界余量外)。
给定大正方形的左上角坐标 (x1, y1) 和右下角坐标 (x2, y2)(注意:此处采用常规笛卡尔坐标系理解,即 x 向右递增、y 向下递增,且坐标为整数点),以及目标小正方形边长 $smallerSquareSide,我们可通过双重嵌套循环实现高效划分:
- 外层循环沿 y 轴方向,起始为 y1,每次步进 $smallerSquareSide,终止条件为 i + $smallerSquareSide - 1 <= $y2(确保小正方形底部不超过 $y2);
- 内层循环沿 x 轴方向,起始为 x1,步进同上,终止条件为 j + $smallerSquareSide - 1 <= $x2(确保小正方形右侧不超过 $x2);
- 每次迭代生成一个小正方形坐标四元组 [x1', x2', y1', y2'],其中:
- x1' = j
- x2' = j + $smallerSquareSide - 1
- y1' = i
- y2' = i + $smallerSquareSide - 1
以下是完整可运行的 PHP 示例代码:
$x1 = 1;
$x2 = 100;
$y1 = 1;
$y2 = 100;
$smallerSquareSide = 10;
$res = [];
for ($i = $y1; $i + $smallerSquareSide - 1 <= $y2; $i += $smallerSquareSide) {
for ($j = $x1; $j + $smallerSquareSide - 1 <= $x2; $j += $smallerSquareSide) {
$res[] = [$j, $j + $smallerSquareSide - 1, $i, $i + $smallerSquareSide - 1];
}
}
// 输出前5个示例(验证格式)
print_r(array_slice($res, 0, 5));
// 输出示例:
// Array (
// [0] => Array ( [0] => 1 [1] => 10 [2] => 1 [3] => 10 )
// [1] => Array ( [0] => 11 [1] => 20 [2] => 1 [3] => 10 )
// [2] => Array ( [0] => 21 [1] => 30 [2] => 1 [3] => 10 )
// [3] => Array ( [0] => 31 [1] => 40 [2] => 1 [3] => 10 )
// [4] => Array ( [0] => 41 [1] => 50 [2] => 1 [3] => 10 )
// )✅ 注意事项与最佳实践:
- 坐标范围必须满足 $x1 <= $x2 且 $y1 <= $y2,否则循环不会执行(结果为空数组);建议前置校验。
- 若原始区域尺寸不能被 $smallerSquareSide 整除(如 $x2 - $x1 + 1 = 103),右侧和/或底部将自然留白——这是预期行为,无需额外填充。
- 如需支持浮点坐标或中心对齐等高级策略,应改用基于矩形中心或范围映射的算法,而非简单步进。
- 性能方面,该算法时间复杂度为 O(n),n 为输出小正方形总数,空间复杂度亦为 O(n),适用于万级以内分割场景。
掌握此方法后,你可轻松扩展至矩形区域划分、带偏移量的滑动窗口采样,甚至结合 GD 或 Imagick 实现图像分块导出。
作者最新文章
图几
2026-09-16 17:43
SQL中ROUND函数对0.5的处理机制及强制四舍五入方法
2026-09-15 14:19
JS金额计算怎么避免四舍五入误差
2026-09-14 17:32
韩国8月携号转网数据:Galaxy Z8系列iPhone用户转化率约为Z7系列2倍
2026-09-08 17:02
AE基础教程:如何创建合成并制作关键帧动画
2026-09-04 09:27
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































