一、问题来源
前段时间在做某个智能设计插件时,遇到的一个问题:已知房间的形状都比较“类矩形”,在房间内我要取到房间内的面积最大的矩形,从而来实现我的下一步操作。在建筑设计中,大多房间都不是严格的矩形,布置空间缺个角,挖个口都是非常常见的情况,所以我觉得该问题应该在很多情况下都可能需要。
二、解决方法
解决方法思路参考leecode 85题【leetcode】85 最大矩形(动态规划,栈)_最大矩形 动态规划-CSDN博客
1、常规操作在房间内先取到房间墙壁围合的CurveLoop(略)
2、获取到curveloop后获取竖向的边和横向的边,然后通过将线延长然后获得到房间的所有边组合成的Grid(示图如下),提示:在形成Grid前应该有先把延长重合的线给筛掉,不然影响curveloop的形成
public CurveLoop[,] GetGrid(CurveLoop curveloop)
{
List<Curve> VerticalCurve = new List<Curve>();//垂直线(dir.x == 0)
List<Curve> HorizontalCurve = new List<Curve>();//水平线(dir.y == 0)
foreach (Curve curve in curveloop)
{
if ((int)(curve as Line).Direction.X == 0)
{
VerticalCurve.Add(curve);
}
else
{
HorizontalCurve.Add(curve);
}
}
List<Curve> VCurve = VerticalCurve.OrderBy(s => s.GetEndPoint(0).X).ToList();
Curve tempVcurve = null; List<Curve> NewVCurve = new List<Curve>();
foreach (Curve curve in VCurve)
{
if (tempVcurve == null)
{
tempVcurve = curve;
NewVCurve.Add(curve