如何对不同大小的多个矩形进行分类

时间:2013-02-23 18:55:10

标签: c# algorithm sorting image-processing

我有几个不同大小的矩形。现在我需要一种算法来根据矩形大小对矩形进行分类。

关键是它不是固定尺寸。例如,宽度为30且高度为20的矩形,另一个宽度为31且高度为19的矩形应放在一个组中。但是宽度为40,高度为30的矩形应放在另一组中。

确定组的数量和大小应自动完成。你推荐我什么算法...

事实上,我想根据形状而不是区域或空间对矩形进行分组。

1 个答案:

答案 0 :(得分:1)

我将您的问题解释为“如何根据某些规则对表示矩形集的问题进行建模”。

在集合论中,您可以通过定义一个带有元素的Characteristic Function来定义一个集合,并告诉您该元素是否在集合中。 该特征函数可以方便地用c#中的Predicate建模。

所以,假设你有这个Rectangle类:

public class Rectangle 
{
    public int height {get; private set;} 
    public int width {get; private set;}

    public Rectangle(int height, int width) 
    {
        this.height=height;
        this.width=width;
    }

    public int Area {
        get {return height*width;}
    }
}

您现在可以将群组定义为谓词。 例如,你可以像这样定义一组小矩形:

Predicate<Rectangle> SmallRectangles = r => r.Area < 100;

或者你可以像这样定义一组窄和高的矩形:

Predicate<Rectangle> NarrowAndTallRectangles = r => r.width/r.height > 1000;

这就是它的用法:

var test = new Rectangle(1,2);
Console.WriteLine("is it small? {0}" ,SmallRectangles(test));
Console.WriteLine("is it narrow and tall? {0}" ,NarrowAndTallRectangles(test));
    // output: 
    // is it small? True
    // is it narrow and tall? False