C# 矩形中最大的空矩形

C# 矩形中最大的空矩形,c#,.net,algorithm,dynamic-programming,C#,.net,Algorithm,Dynamic Programming,我的数学不是很好,所以我很难把公式转换成代码,在谷歌上找不到任何现成的东西。我有一个大矩形,里面有很多小矩形。。。我需要做的就是计算最大的空矩形。有人能帮我吗 这是我想到的。。。没什么可说的,这是个大失败 Rect result = new Rect(); for (Double l = 0; l < bigRect.Width; ++l) { for (Double t = 0; t < bigRect.Height; ++t) { Double

我的数学不是很好,所以我很难把公式转换成代码,在谷歌上找不到任何现成的东西。我有一个大矩形,里面有很多小矩形。。。我需要做的就是计算最大的空矩形。有人能帮我吗

这是我想到的。。。没什么可说的,这是个大失败

Rect result = new Rect();

for (Double l = 0; l < bigRect.Width; ++l)
{
    for (Double t = 0; t < bigRect.Height; ++t)
    {
        Double h = 0;
        Double w = 0;

        while ((h <= bigRect.Width) && (w <= bigRect.Height))
        {
            Rect largestEmpty = new Rect(l, t, w, h);

            if (smallRects.TrueForAll(smallRect => !smallRect.IntersectsWith(largestEmpty)) && ((largestEmpty.Height * largestEmpty.Width) > (result.Height * result.Width)))
                result = largestEmpty;
            else
                break;

            ++h;
            ++w;
        }
    }
}
Rect result=new Rect();
对于(双l=0;l
从您的列表中可以看出,在大矩形中有一组点(我们称之为ASD),您必须找到不包含该组ASD点的最大矩形。看看你的代码,似乎你没有(直接)合并这些要点。我将从较小的矩形中提取点,并创建集合ASD。由于您使用的是double类型,因此您应该可以访问这些点,否则该算法的运行时间将显著增加,因为您需要检查特定范围(整个大矩形)中所有可能的double。使用这些点,我会尝试找到彼此之间距离最短的点(sqrt(dx^2+dy^2))(最短的不应该包含任何点),然后转到下一个最短的,看看是否包含任何点等等。换句话说,创建所有组合的顺序列表(不是排列,(a,b)到(c,d)应该==(c,d)到(a,b))按他们之间的距离排列。可能不是最优的,但可以完成任务


编辑:除了较小的矩形的对角线之外,所有的顺序对都应该在顺序列表中,因为较小的矩形不应该包含在内,所以您也可以排除具有相同x或y值的对。

坐标是整数还是浮点数?另外,您对如何解算它有想法吗?否则这个问题可能更适合math.stackexchange.com而不是stackoverflow我正在处理WPF,所以通常坐标应该是双。。。但是整数最适合我的需要,是的,我读了一些关于如何解决它的书。。。但正如我所说。。。我很难把数学公式转换成代码。展示你找到的公式,然后。。。嗯。。。我有点疯了,想解决它!