You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效实现网格中矩形扩展区域与原矩形的单元格差异化赋值

问题描述

网格示意图
我拥有如上图所示的网格(注:描述中“一维”应为笔误,实际为二维网格)。其中绿色矩形为网格中的对象,蓝色矩形为该对象的效果覆盖范围。绿色矩形可具备任意尺寸(宽度和高度),蓝色矩形会在所有方向上将绿色矩形扩展X个单元格,但如果绿色矩形处于网格角落,则对应方向不进行扩展。我希望获取蓝色区域内的单元格,并为其赋予与绿色区域单元格不同的值,请问如何高效实现这一需求?

高效实现方案

核心思路是通过坐标范围计算直接定位目标区域,避免遍历整个网格,大幅提升效率:

  1. 定义基础坐标参数
    假设网格整体范围是 (0, 0) 到 (grid_width-1, grid_height-1),绿色矩形左上角坐标为 (g_x1, g_y1),右下角坐标为 (g_x2, g_y2)(包含边界),扩展量为 X。

  2. 计算蓝色区域的边界
    通过边界限制确保扩展后的区域不超出网格范围:

  • 左边界:b_x1 = max(0, g_x1 - X)
  • 右边界:b_x2 = min(grid_width - 1, g_x2 + X)
  • 上边界:b_y1 = max(0, g_y1 - X)
  • 下边界:b_y2 = min(grid_height - 1, g_y2 + X)
  1. 分区域赋值
    蓝色区域是蓝色边界框减去绿色矩形的范围,通过两次赋值实现:
  • 第一步:给蓝色边界框内所有单元格赋予蓝色区域的值
  • 第二步:给绿色矩形内的单元格重新赋予绿色区域的值(覆盖第一步的蓝色值)
  1. 代码示例(伪代码)
# 网格基础参数
grid_width = 10
grid_height = 10
grid = [[0 for _ in range(grid_width)] for _ in range(grid_height)]
green_value = 1
blue_value = 2
X = 2

# 绿色矩形坐标(左上角、右下角)
g_x1, g_y1 = 2, 2
g_x2, g_y2 = 4, 4

# 计算蓝色区域边界
b_x1 = max(0, g_x1 - X)
b_x2 = min(grid_width - 1, g_x2 + X)
b_y1 = max(0, g_y1 - X)
b_y2 = min(grid_height - 1, g_y2 + X)

# 填充蓝色区域
for y in range(b_y1, b_y2 + 1):
    for x in range(b_x1, b_x2 + 1):
        grid[y][x] = blue_value

# 填充绿色区域(覆盖重叠部分)
for y in range(g_y1, g_y2 + 1):
    for x in range(g_x1, g_x2 + 1):
        grid[y][x] = green_value
  1. 大规模网格优化
    如果网格规模极大,可使用向量化工库(如NumPy)替代嵌套循环,进一步提升效率:
import numpy as np
grid = np.zeros((grid_height, grid_width), dtype=int)
# 填充蓝色区域
grid[b_y1:b_y2+1, b_x1:b_x2+1] = blue_value
# 填充绿色区域
grid[g_y1:g_y2+1, g_x1:g_x2+1] = green_value

内容的提问来源于stack exchange,提问作者nico.user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:07:39