我有几个不同大小的矩形。现在我需要一种算法来根据矩形大小对矩形进行分类。
关键是它不是固定尺寸。例如,宽度为30且高度为20的矩形,另一个宽度为31且高度为19的矩形应放在一个组中。但是宽度为40,高度为30的矩形应放在另一组中。
确定组的数量和大小应自动完成。你推荐我什么算法...
事实上,我想根据形状而不是区域或空间对矩形进行分组。
答案 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