我正在开发的应用程序遇到问题。假设我有两个相当复杂的 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(使用前将#替换为@)