Понимание механизма изгиба UIBezierPath, controlPoint и точки кривой
Я пытаюсь нарисовать простую форму Parabola, используяUIBezierPath
, у меня естьmaxPoint
иboundingRect
из которых я основываю ширину и протяженность параболы.
Вот функция, которую я сделал, чтобы нарисовать параболу (я рисую параболу в виде контейнера,rect
будетcontainer.bounds
):
func addParabolaWithMax(maxPoint: CGPoint, inRect boundingRect: CGRect) {
let path = UIBezierPath()
let p1 = CGPointMake(1, CGRectGetMaxY(boundingRect)-1)
let p3 = CGPointMake(CGRectGetMaxX(boundingRect)-1, CGRectGetMaxY(boundingRect)-1)
path.moveToPoint(p1)
path.addQuadCurveToPoint(p3, controlPoint: maxPoint)
// Drawing code
...
}
Моя проблема в том, что я хочуmaxPoint
что я посылаю в функцию, чтобы быть фактической крайней точкой в самой параболе. Так, например, если я отправлю в(CGRectGetMidX(container.bounds), 0)
Максимальная точка должна быть в самом верхнем центре. Но при использовании этой функции с этой конкретной точкой, вот как выглядит результат:
Так что же здесь делает этот путь? Или, другими словами, как я могу получить отcontrolPoint
до фактического максимума, который мне нужен? Я попытался добавить и вычесть различные значения изy
значение, основанное на высотеboundingRect
, но я не мог найти правильную комбинацию, так как в разных точках с разнымиy
Ценности это ведет себя по-разному. Кажется, там добавлен какой-то множитель, как я могу его решить?