从数组中创建形状的算法

4
我正在寻找一种算法,可以基于坐标数组创建形状。我有两个50x50的数组:一个是x坐标,另一个是y坐标。
总共有2500个点。然后我有另外一个50x50的数组,其中包含我的坐标值。
我根据值(例如0-100、200-300和300-500)创建3到6个区域。具有特定值的点会创建出这些区域。
我需要一个算法来计算每个区域是否只有一个形状或多个形状,并用颜色填充形状。我需要这样做是因为我必须为每个区域填充特定的颜色。语言是C#。
以下是需要翻译的内容:
1. 示例点。 2. 预期边缘。 3. 预期结果。 Example picture

输入和概念对我来说不是很清楚。你能给一些样本数据,这样我们就可以理解你想要什么并测试可能的算法吗? - Willem Van Onsem
看起来你正在尝试找到集合的凸包凸包算法 - Felix Castor
请参阅以下网页:https://en.wikipedia.org/wiki/Minimum_bounding_box_algorithms - jdweng
@FelixCastor:不,那些形状不是凸的。 - user1196549
@YvesDaoust 您是正确的。OP可以先找到凸包,然后侵蚀边缘以得到所需的最终产品。 - Felix Castor
显示剩余2条评论
1个回答

1
基本上,您可以使用分层聚类来查找集群。
1.每个点都是自己的集群
2.找到最接近的两个集群并将它们合并
3.重复直到满足结束条件
一些具体细节:在步骤2中,您可以使用许多度量标准来查找最接近的集群。平均距离或所有点对之间的最小距离可能是最好的选择。
在第3步中,您可以停止剩余集群数量为2(或其他数字)。或者当距离超过阈值时停止。
要找到实际轮廓,我建议想出一些优化函数,该函数最小化轮廓长度同时最小化轮廓面积。然后使用一些启发式方法来优化该函数。
类似于区域-常数*长度的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接