Ios 查找CGPath与CGRect相交的区域

Ios 查找CGPath与CGRect相交的区域,ios,quartz-graphics,quartz-2d,bounding-box,cgpath,Ios,Quartz Graphics,Quartz 2d,Bounding Box,Cgpath,我正在开发一个iOS应用程序,在这个应用程序中,我需要能够看到屏幕边界内有多少CGPath,以确保有足够的CGPath供用户触摸。问题是,当形状在拐角处时,当路径在拐角处时,我通常使用的所有方法(以及我可以尝试的所有方法)都会失败 这是一张照片: 我如何计算屏幕上有多少形状 显而易见的答案是,通过像素绘制进行经验分析,或者通过多边形剪裁进行分析 因此,要按照经验进行操作,您需要创建一个CGBitmapContext视口大小,将其清除为已知颜色,如(0,0,0),在多边形上绘制另一种已知颜色,如(

我正在开发一个iOS应用程序,在这个应用程序中,我需要能够看到屏幕边界内有多少CGPath,以确保有足够的CGPath供用户触摸。问题是,当形状在拐角处时,当路径在拐角处时,我通常使用的所有方法(以及我可以尝试的所有方法)都会失败

这是一张照片:


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

显而易见的答案是,通过像素绘制进行经验分析,或者通过多边形剪裁进行分析

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

要进行分析,您需要运行一个多边形剪裁算法,例如从原始多边形导出一个新多边形的算法,而原始多边形只是屏幕上实际显示的部分。然后你可以用任何一个正规公式得到它的面积


实际上,一个凸多边形的裁剪比凹多边形要容易得多,所以如果你的多边形是固定形状的,那么你可以考虑使用三角剖分算法,比如OR,然后对其进行裁剪和面积计算,而不是原件。

< P>可以用这种方法得到近似:

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

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

您到底在寻找什么?是否要测量重叠的面积(以平方点为单位)?或者您想要一个只包含重叠部分的路径或遮罩?或者其他什么?CGPath是完全通用的,还是保证它是一个多边形,如图所示?@robmayoff如果可能的话,我想用平方点来测量面积。@Tommy我不确定你说的“完全通用”是什么意思,但我用图中的多边形来说明一个非常奇怪的形状,在某种意义上说,CGPath可能有圆弧、贝塞尔曲线和其他一些东西,而不仅仅是一个多边形。然而,多边形——即使不一定是凸的或简单的——也相对容易剪裁成矩形,这可能是解决方案的一部分。