跳至正文
首页 » 博客 » iOS – Draw Arcs Using CGContextAddCurveToPoint

iOS – Draw Arcs Using CGContextAddCurveToPoint

这是一个更特殊的用例主题,但我想要完成一段时间前,我想我会分享它的任何人试图解决类似的问题。

我希望有一个更通用的方式绘制弧,而不是使用CGContextAddArc。

然而,在使用曲线中计算出数学来做到这一点是非常棘手的。幸运的是,我偶然发现了一个做类似事情的博客。你可以在这里阅读。

所以这里是我的实现,以防其他人在那里寻找相同的。此实现在objective-c中:

结构cubicbeziercontrolpoint斯
{
Cg点p1;
Cg点p2;
};

typedef结构CubicBezierControlPoints;

CubicBezierControlPoints CubicBezierControlPointsMake(CGFloat startRadians, CGFloat endRadians, CGFloat radius, CGPoint center)
{
CGFloat theta = 内径-星际;
CGFloat startAngle = startRadians;

CGFloat x0 = cos (θ/2.0);
CGFloat y0 = sin (θ/2.0);
CGFloat x1 = (4.0-x0)/3.0;
CGFloat y1 = ((1.0-x0)*(3.0-x0))/( 3.0 * y0);
CGFloat x2 = x1;
CGFloat y2 = 0-y1;

CGFloat bezAng = 起始角度 θ/2.0;
CGFloat cBezAng = cos(bezAng);
CGFloat sBezAng = sin(bezAng);
CGFloat rx1 = cBezAng * x1 – sBezAng * y1;
CGFloat ry1 = sBezAng * x1 cBezAng * y1;
CGFloat rx2 = cBezAng * x2 – sBezAng * y2;
CGFloat ry2 = sBezAng * x2 cBezAng * y2;

CubicBezierControlPoints cbp;
cbp.p1 = cgpointmark (中心.x半径 * rx1,中心.y半径 * ry1);
cbp.p2 = cgpointmak (中心.x半径 * rx2,中心.y半径 * ry2);
返回cbp;
}

希望这有助于其他人喜欢它帮助了我。

史蒂芬·扎哈鲁克(SteveZ)