我正在开发一个 iOS 应用程序,我需要能够看到屏幕范围内有多少 CGPath 以确保有足够的空间让用户仍然可以触摸。问题是,当形状在拐角处时,当路径在拐角处时,我通常会使用的所有方法(以及我能想到的所有尝试)都会失败。
这是一张照片:
我如何计算屏幕上有多少该形状?
我正在开发一个 iOS 应用程序,我需要能够看到屏幕范围内有多少 CGPath 以确保有足够的空间让用户仍然可以触摸。问题是,当形状在拐角处时,当路径在拐角处时,我通常会使用的所有方法(以及我能想到的所有尝试)都会失败。
这是一张照片:
我如何计算屏幕上有多少该形状?
显而易见的答案是通过像素绘制凭经验进行操作,或者通过多边形裁剪进行分析。
因此,要凭经验进行操作,您将创建CGBitmapContext
视口的大小,将其清除为已知颜色,例如 (0, 0, 0),然后以另一种已知颜色在多边形上绘制,例如 (1, 1, 1) 然后只需遍历位图上下文中的所有像素,然后将您可以找到的总数相加。这可能相当昂贵,但如果有帮助,您可以使用较低分辨率的上下文来获得更近似的结果。
要进行分析,您将运行多边形裁剪算法,例如此处描述的算法,以从原始多边形派生一个新多边形,这只是它实际在屏幕上的那部分。然后,您将使用任何常规公式获得该区域。
裁剪凸多边形实际上比凹多边形容易得多,因此如果您的多边形具有固定形状,那么您可以考虑使用三角测量算法,例如耳朵裁剪或分解为单调边缘,然后执行裁剪和面积计算在那些而不是原来的。
您可以使用这种方法得到一个近似值:
您可以根据 reg 的大小选择参数 N 以获得良好且快速的近似值