在 iOS 上组合相交的 CGPath

2024-03-22

我正在开发的应用程序遇到问题。假设我有两个相当复杂的 CGPath,我将它们都添加到 CGMutablePath(从而将它们组合起来)。好吧,两条路径相交的地方就会有彼此内部的点。我想消除那些内部点并基本上绘制路径的外部或轮廓。我很难弄清楚我该如何解决这个问题。

Edit:这是我正在谈论的一个例子。蓝色和红色框代表 CGPath 上的点。红色框是两条路径内的点。我想以某种方式消除红点并重新绘制路径的轮廓。


您所描述的是路径内部的联合。

如果您的路径包含曲线,这是一个难题。

但是,您的示例仅显示直线段,因此我假设您只关心仅包含直线段的路径。

在这种情况下,您需要一个多边形并集函数。这种算法在“计算几何”领域非常基础。我不知道任何特定于 Objective-C 的多边形联合实现。您也许能够找到纯 C 库,但找到 C++ 库要容易得多。如果您更改文件扩展名,则可以使用 C++.m to .mm。以下是一些可以计算多边形并集的 C++ 库:

  • Clipper http://www.angusj.com/delphi/clipper.php
  • GEOS http://trac.osgeo.org/geos/ - see Polygon::Union http://geos.osgeo.org/doxygen/classgeos_1_1geom_1_1Geometry.html#a1102ded58685400a4f144fe0dd8f430d
  • CGAL http://www.cgal.org/ - see 二维正则布尔集合运算 http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Boolean_set_operations_2/Chapter_main.html
  • boost http://www.boost.org/几何-参见union_ http://www.boost.org/doc/libs/1_54_0/libs/geometry/doc/html/geometry/reference/algorithms/union_.html

请注意,在所有情况下,您都需要使用CGPathApply提取路径的顶点(如果您还没有其他格式的顶点)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 iOS 上组合相交的 CGPath 的相关文章

随机推荐