0

我在 Core Graphics 中创建了一条路径来绘制心形,但是,为此我创建了一个菱形和 2 个圆圈,这个图像看起来很棒,但我只想知道是否有可能获得“实际”来自这个 CGPath/CGContext 的心形。

这是绘制心脏的代码(对于任何感兴趣的人),这个形状是我想要创建的形状,因为心脏“驼峰”和尖三角形之间的连接是平滑的:

CGPathAddEllipseInRect(heartPath, NULL, CGRectMake(0, 0, 20, 20));
CGPathAddEllipseInRect(heartPath, NULL, CGRectMake(20, 0, 20, 20));

CGPathMoveToPoint(heartPath, NULL, 37.5, 16.5);

CGPathAddLineToPoint(heartPath, NULL, 37.5, 16.5);
CGPathAddLineToPoint(heartPath, NULL, 20, 37.5);
CGPathAddLineToPoint(heartPath, NULL, 2.5, 16.5);
CGPathAddLineToPoint(heartPath, NULL, 20, 10);

CGPathCloseSubpath(heartPath);

产生这个

而这段代码:

CGPathAddArc(heartPath, NULL, 10, 10, 10, M_PI, 0, false); // Left hump
CGPathAddArc(heartPath, NULL, 30, 10, 10, M_PI, 0, false); // Right hump
CGPathAddLineToPoint(heartPath, NULL, 20, 37.5); // Pointy end

CGPathCloseSubpath(heartPath);

产生这个

这是否可能且易于实施?如果有怎么办?

提前致谢!

4

2 回答 2

0

没有公共函数可以计算多条路径的联合(据我所知,也没有任何私有函数)。计算贝塞尔路径的并集是一个困难而复杂的问题。

根据您想做什么,可能有更简单的方法。你想用联合路径做什么?

于 2012-06-15T22:44:09.790 回答
0

您应该通过执行以下操作来绘制单个形状,而不是绘制 3 个不同的形状:

CGPathAddArc(heartPath, NULL, 10, 10, 10, M_PI, 0, false); // Left hump
CGPathAddArc(heartPath, NULL, 30, 10, 10, M_PI, 0, false); // Right hump
CGPathAddLineToPoint(heartPath, NULL, 20, 37.5); // Pointy end
CGPathCloseSubpath(heartPath);

我不是肯定所有的值都是正确的,但基本上你只想画圆的一部分,所以使用CGPathAddArc()两次,然后在尖端画一条线,然后关闭它。

于 2012-06-15T22:50:39.740 回答