Как я выбираю контрольную точку при использовании CGContextAddCurveToPoint для создания линейного графика с кривыми

Я делаю линейный график на 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 точки.

1
задан Matt Williamson 23 April 2010 в 19:53
поделиться

1 ответ

В итоге я сделал что-то вроде этого, и это сработало:

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);
2
ответ дан 3 September 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: