我想在一天中的不同时间点以太阳坐标为基础以编程方式构建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
);
答案 0 :(得分: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)
对于起点,将cp1x,cp1y设置为起始x,y,将结束点设置为cp2x,将cp2y设置为结束x,y。
注意:我已更新答案以纳入ughoavgfhw的评论