导读:本期聚焦于小伙伴创作的《如何从一个大正方形中提取固定边长的小正方形数组》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何从一个大正方形中提取固定边长的小正方形数组》有用,将其分享出去将是对创作者最好的鼓励。

在图形处理、游戏地图生成、前端网格布局等开发场景中,我们经常需要将一个大的正方形区域,按照固定边长拆分成多个相邻的小正方形,最终得到这些小正方形的位置与尺寸信息组成的数组。这个需求的核心是要先确认大正方形能否被小正方形完整划分,再计算每一个小正方形的起始坐标和尺寸参数。

如何从一个大正方形中提取固定边长的小正方形数组

核心判断逻辑

在开始提取之前,首先需要确认大正方形可以被固定边长的小正方形完整覆盖,避免出现尺寸不匹配的情况。假设大正方形的边长为big_side,小正方形的边长为small_side,需要满足以下条件:

  • 大正方形边长必须大于等于小正方形边长,否则无法提取出有效的小正方形
  • 大正方形边长必须能被小正方形边长整除,即big_side % small_side == 0,保证没有剩余区域

当满足上述条件时,每一行和每一列可以放置的小正方形数量为count = big_side / small_side,总小正方形数量为count * count

小正方形坐标计算规则

我们以大正方形的左上角作为坐标原点(0,0),x轴向右延伸,y轴向下延伸,那么第i行第j列的小正方形(行和列均从0开始计数)的起始坐标计算方式为:

  • 起始x坐标:j * small_side
  • 起始y坐标:i * small_side
  • 小正方形边长固定为small_side

Python实现示例

以下是一个完整的Python实现,返回所有小正方形的坐标和尺寸信息数组:

def extract_small_squares(big_side, small_side):
    # 校验参数合法性
    if big_side < small_side:
        raise ValueError("大正方形边长不能小于小正方形边长")
    if big_side % small_side != 0:
        raise ValueError("大正方形边长必须能被小正方形边长整除")
    # 计算每行每列的小正方形数量
    count = big_side // small_side
    result = []
    # 遍历生成所有小正方形信息
    for i in range(count):
        for j in range(count):
            square_info = {
                "x": j * small_side,
                "y": i * small_side,
                "side": small_side
            }
            result.append(square_info)
    return result

# 测试示例:大正方形边长100,小正方形边长20
if __name__ == "__main__":
    big_side = 100
    small_side = 20
    squares = extract_small_squares(big_side, small_side)
    print(f"共提取到{len(squares)}个小正方形")
    # 打印前两个小正方形信息
    for idx, square in enumerate(squares[:2]):
        print(f"第{idx+1}个小正方形:x={square['x']}, y={square['y']}, 边长={square['side']}")

JavaScript实现示例

前端场景下可以使用JavaScript实现相同的逻辑,返回一个包含小正方形信息的对象数组:

function extractSmallSquares(bigSide, smallSide) {
    // 参数校验
    if (bigSide < smallSide) {
        throw new Error("大正方形边长不能小于小正方形边长");
    }
    if (bigSide % smallSide !== 0) {
        throw new Error("大正方形边长必须能被小正方形边长整除");
    }
    // 计算数量
    const count = Math.floor(bigSide / smallSide);
    const result = [];
    // 遍历生成数组
    for (let i = 0; i < count; i++) {
        for (let j = 0; j < count; j++) {
            result.push({
                x: j * smallSide,
                y: i * smallSide,
                side: smallSide
            });
        }
    }
    return result;
}

// 测试示例
const bigSide = 100;
const smallSide = 20;
try {
    const squares = extractSmallSquares(bigSide, smallSide);
    console.log(`共提取到${squares.length}个小正方形`);
    console.log("第一个小正方形信息:", squares[0]);
} catch (e) {
    console.error(e.message);
}

边界情况说明

如果实际场景中允许存在不足固定边长的剩余区域,可以调整逻辑,将最后一列或最后一行的剩余区域也作为一个小正方形,此时不需要强制要求大正方形边长能被小正方形边长整除。只需将循环条件改为while (current_x < big_side),每次计算当前小正方形的实际边长为min(small_side, big_side - current_x)即可,不过这种情况生成的小正方形边长可能不完全一致。

正方形提取小正方形数组数组划分几何计算坐标计算修改时间:2026-06-24 11:00:27

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。