查找CGPath与CGRect相交的区域

时间:2012-05-25 20:20:06

标签: ios quartz-graphics quartz-2d bounding-box cgpath

我正在开发一个iOS应用程序,我需要能够看到屏幕范围内有多少CGPath,以确保有足够的空间让用户仍然可以触摸。问题是,当形状在角落时,我通常会使用的所有方法(以及我能想到的所有方法)都会在路径位于角落时失败。

这是一张照片:enter image description here

如何计算屏幕上有多少形状?

2 个答案:

答案 0 :(得分:3)

明显的答案是通过像素绘画凭经验进行,或通过多边形裁剪进行分析。

因此,根据经验,你要创建一个CGBitmapContext视口大小,将其清除为已知颜色(如0,0,0),用另一种已知颜色在多边形上绘画,比如说(1,1,1)然后只需遍历位图上下文中的所有像素,并将您可以找到的总数加起来。这可能相当昂贵,但如果有帮助,您可以使用较低分辨率的上下文来获得更接近的结果。

要进行分析,您需要运行多边形裁剪算法,例如described here,以从原始多边形派生新多边形,这只是它实际在屏幕上的那部分。然后你可以使用任何常规公式获得该区域。

剪切凸多边形实际上比凹多边形容易得多,因此如果多边形具有固定形状,则可以考虑使用三角剖分算法,例如ear clippingdecomposition to monotone edges和然后对那些而不是原始进行剪裁和区域计算。

答案 1 :(得分:0)

您可以使用此方法获得近似值:

  • 设为屏幕与形状
  • 的边界框的交点
  • 在reg中选择N个随机点并检查它们是否包含在形状
  • 形状的面积可以通过(区域的reg)*(形状中包含的点数)/ N
  • 来估算

您可以根据reg的大小选择参数N,以获得良好且快速的近似值