3

今天我们在 MKMapView 上绘制多边形。我们使用下面的伪代码来绘制多边形。

CGContextMoveToPoint
CGContextAddLineToPoint
CGContextAddLineToPoint
CGContextAddLineToPoint
CGContextClosePath
CGContextFillPath

结果可能如下所示:

数据表

我们一次获取一行数据,根据我们收到的数据为单元格提供颜色。有没有一种方法或多边形减少算法可以将所有相同颜色的多边形组合在一起(假设它们相交)给我一个大多边形?所以在这个例子中,所有的红色都是一个大多边形。

4

2 回答 2

0

这是矩形绘制功能的工作,而不是路径绘制功能。见CGContextFillRect(), CGContextStrokeRect()CGContextFillRects()。他们会快得多。

于 2011-09-05T03:05:48.037 回答
0

CoreGraphics 可以原生处理凹多边形,因此问题的主要部分是填充区域以计算填充区域的边界。

临时思考,一个简单的算法可能是将边缘标志与每个单元格相关联。如果边是多边形外部的一部分,则设置边标志。标志由在该边缘相遇的两个单元共享。

选择任何单元格并设置所有四个边缘标志。重置所有其他单元格上的边缘标志。然后编写一个递归方法,对于每个单元格:

  • 依次测试是否设置了每个边缘标志;
  • 如果设置了标志,则检查共享该边缘的单元格是否具有相同的颜色;
  • 如果是,则反转该单元格的边缘标志并递归到它。

倒置与说“连接到您已知相邻的任何单元格,将我们尚未查看的单元格旁边的任何边缘设置为边界的一部分”相同。

递归可能会深入数百个项目,因此保留一个要考虑的单元列表并将其添加到该列表中而不是递归可能是值得的,这只是实现的问题。您访问单元格的顺序无关紧要,因此结果应该是相同的。

一旦您用完了要访问的单元格,您可以通过从任何标记的边缘绕过它来重建整个边界。唯一轻微的复杂性是当您到达单元格的对角线会议时,例如黄色和绿色单元格在您的第四列和第五列之间接触的位置。您需要应用从当前边缘移动到下一个边缘的逻辑,与它共享一个顶点和一个正确颜色的单元格。

于 2011-09-04T20:32:14.850 回答