Iphone 当使用CGContextAddCurveToPoint创建带有曲线的线图时,如何选择控制点

Iphone 当使用CGContextAddCurveToPoint创建带有曲线的线图时,如何选择控制点,iphone,graphics,graph,core-graphics,Iphone,Graphics,Graph,Core Graphics,我正在iphone上用核心图形制作一个折线图,而不是一个锯齿状的图表,我想把它平滑下来,就像上好的数学课一样。选择CGContextAddCurveToPoint控制点放置位置的公式是什么 CGFloat cp2x = (x + x + prevX); CGFloat cp1y = (prevY + prevY + y); CGFloat cp1x = (prevX + prevX + x); CGFloat cp2y =

我正在iphone上用核心图形制作一个折线图,而不是一个锯齿状的图表,我想把它平滑下来,就像上好的数学课一样。选择CGContextAddCurveToPoint控制点放置位置的公式是什么

            CGFloat cp2x = (x + x + prevX);
        CGFloat cp1y = (prevY + prevY + y);

        CGFloat cp1x = (prevX + prevX + x);
        CGFloat cp2y = (y + y + prevY);

        CGContextAddCurveToPoint(context, cp1x, cp1y, cp2x, cp2y, x, y);

这段代码几乎可以工作,但没有考虑到3点。

我最后做了类似的工作,效果很好:

CGPoint prevItemPosition2 = [self positionForItem: prevItem2 andMaxItem:maxItem inItems: items];
CGPoint prevItemPosition1 = [self positionForItem: prevItem1 andMaxItem:maxItem inItems: items];
CGFloat cpAngle = atan2f((prevItemPosition2.y - prevItemPosition1.y),
                          (prevItemPosition2.x - prevItemPosition1.x));
cpAngle += M_PI;
CGFloat magnitude = sqrtf(powf(prevItemPosition1.x - itemPosition.x, 2) + 
                          powf(prevItemPosition1.y - itemPosition.y, 2)) / 3;
CGPoint angleComponents = CGPointMake(cos(cpAngle) * magnitude, 
                                      sin(cpAngle) * magnitude);
CGPoint cp = CGPointMake(prevItemPosition1.x + angleComponents.x, 
                          prevItemPosition1.y + angleComponents.y);
CGContextAddQuadCurveToPoint(context, cp.x, cp.y, itemPosition.x, itemPosition.y);

您能更详细地解释一下PreviItem2、items、Item的方法positionForItem:和MaxItem:inItems:等吗?Thank.PreviItemPosition2在循环中比当前位置早两个点,PreviItemPosition1在循环中比当前位置早一个点。positionForItem:andMaxItem循环遍历相关对象列表,并返回一个CGPoint,其中x=图的宽度\单位/计数(项),y=图的高度\单位/最大值\单位值*单位值。它使图形填充分配给它的整个空间。