1

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

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

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

事实上,我想根据形状对矩形进行分组,而不是根据面积或间距对它们进行分组。

4

1 回答 1

1

我将您的问题解释为“在给定某些规则的情况下,我如何对表示矩形集的问题进行建模”。

在集合论中,您可以通过定义一个特征函数来定义一个集合,该函数接受一个元素并告诉您该元素是否在集合中。该特征函数可以通过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
于 2013-02-23T19:21:57.317 回答