CGPathAddCurveToPoint的参数是什么意思?

Ste*_*eve 10 core-animation cgpath ios

我想CGPathRef在一天中的不同时刻基于太阳的坐标以编程方式构建.计算积分不是问题,但我想做一个CGPathRef平滑的想法CGPathAddCurveToPoint是合适的.

我理解路径,变换,x和y参数,但我不确定其他参数.根据Apple文档,它们是控制点,我猜它们就像你在矢量绘图程序中看到的那样,你可以调整曲线通过点的方式.

我的问题是如何在不知道这些坐标提前的情况下选择与我的坐标相关的点?我想也许只是从每个第一个控制点中减去一个设定的数量,并将相同的数量添加到第二个控制点,但这听起来过于简单.是否有一种标准方法可以生成对于平滑曲线"有意义"的控制点?

void CGPathAddCurveToPoint (
   CGMutablePathRef path,
   const CGAffineTransform *m,
   CGFloat cp1x,
   CGFloat cp1y,
   CGFloat cp2x,
   CGFloat cp2y,
   CGFloat x,
   CGFloat y
); 
Run Code Online (Sandbox Code Playgroud)

Den*_*ssy 6

额外的点是源(当前)点之外的曲线的bezier控制点和进入目标点的曲线(有关一般说明,请参阅http://en.wikipedia.org/wiki/Bézier_curve).线currentX,currentY - cp1x,cp1y是当前点的向量'out',cp2x,cp2y - x,y是最终点的向量'in'.

从p1到p2产生平滑曲线的合理方法(假设4点p0,p1,p2,p3)是(伪代码):

v = (strength of curve from 0.0 to 1.0)
cp1x = p1.x+v*(p1.x-p0.x)
cp1y = p1.y+v*(p1.y-p0.y)
cp2x = p2.x-v*(p3.x-p2.x)
cp2y = p2.y-v*(p3.y-p2.y)
Run Code Online (Sandbox Code Playgroud)

对于起点,将cp1x,cp1y设置为起始x,y,将结束点设置为cp2x,将cp2y设置为结束x,y.

注意:我已经更新了答案,以纳入ughoavgfhw的评论

  • Denis写道他们是控制点,但他们的使用是错误的.cp1x,cp1y给出CURRENT点的向量OUT,cp2x,xp2y给出向量INTO到点x,y.此外,使用最后和下一个点可能会给你直线.对不起,但我不能告诉你应该如何实际计算积分,但我可以建议尝试使用CGPathAddArcToPoint. (2认同)