Iphone 当使用CGContextAddCurveToPoint创建带有曲线的线图时,如何选择控制点
我正在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 =
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=图的高度\单位/最大值\单位值*单位值。它使图形填充分配给它的整个空间。