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

如何计算以给定点为中心向外扩展指定距离的矩形覆盖区域

原有代码问题

  • 原有逻辑直接对中心点坐标乘以13,没有实现「向各方向延伸6个瓦片」的计算,中心点为(0,0)时计算结果仍是(0,0),完全无法表示矩形覆盖范围
  • 用Point类型存储矩形本身逻辑错误,Point仅能表示单个坐标点,无法描述矩形的边界/尺寸信息

修正方案

你可以选择存储矩形的坐标边界,或者直接用.NET内置的Rectangle类型存储矩形信息,参考实现如下:

class Program
{
    // 中心点坐标
    static Point AbsPos = new Point(0, 0);
    // 向各方向延伸的瓦片数量
    const int ExtendTileCount = 6;
    // 存储矩形的四周边界
    static int RectMinX, RectMaxX, RectMinY, RectMaxY;
    // 也可以用内置Rectangle类型直接存储完整矩形信息
    static System.Drawing.Rectangle TileRect;

    static void Main(string[] args)
    {
        // 计算矩形边界:向x、y轴正负方向各延伸6个单位
        RectMinX = AbsPos.X - ExtendTileCount;
        RectMaxX = AbsPos.X + ExtendTileCount;
        RectMinY = AbsPos.Y - ExtendTileCount;
        RectMaxY = AbsPos.Y + ExtendTileCount;
        
        // 用内置Rectangle类型构造:参数依次为左上角X、左上角Y、宽度、高度
        // 两边各延伸6个单位,总宽高为6*2+1=13,符合13x13的需求
        TileRect = new System.Drawing.Rectangle(RectMinX, RectMinY, ExtendTileCount * 2 + 1, ExtendTileCount * 2 + 1);
    }
}

如果需要遍历所有覆盖的瓦片坐标,直接嵌套循环即可:

for (int x = RectMinX; x <= RectMaxX; x++)
{
    for (int y = RectMinY; y <= RectMaxY; y++)
    {
        // 此处处理坐标为(x,y)的瓦片逻辑
    }
}

内容的提问来源于stack exchange,提问作者JohnA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:54:08