如何计算以给定点为中心向外扩展指定距离的矩形覆盖区域
原有代码问题
- 原有逻辑直接对中心点坐标乘以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
相关产品推荐
相关产品推荐

