我有几个不同大小的矩形。现在我需要一个算法来根据它们的大小对矩形进行分类。
关键是它不是固定的尺寸。例如,一个宽度为 30 高度为 20 的矩形,另一个宽度为 31 高度为 19 的矩形应该放在一个组中。但是宽度为40,高度为30的矩形应该放在另一组中。
并且确定组的数量和大小应该是自动完成的。你推荐我什么算法...
事实上,我想根据形状对矩形进行分组,而不是根据面积或间距对它们进行分组。
我有几个不同大小的矩形。现在我需要一个算法来根据它们的大小对矩形进行分类。
关键是它不是固定的尺寸。例如,一个宽度为 30 高度为 20 的矩形,另一个宽度为 31 高度为 19 的矩形应该放在一个组中。但是宽度为40,高度为30的矩形应该放在另一组中。
并且确定组的数量和大小应该是自动完成的。你推荐我什么算法...
事实上,我想根据形状对矩形进行分组,而不是根据面积或间距对它们进行分组。
我将您的问题解释为“在给定某些规则的情况下,我如何对表示矩形集的问题进行建模”。
在集合论中,您可以通过定义一个特征函数来定义一个集合,该函数接受一个元素并告诉您该元素是否在集合中。该特征函数可以通过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