Что означают параметры для CGPathAddCurveToPoint?
Я хочу построить CGPathRef
программно на основе координат Солнца в разных точках дня. Подсчет очков не проблема, но я хочу сделать CGPathRef
это гладко и продуманно CGPathAddCurveToPoint
было бы уместно.
Я понимаю параметры path, transform, x и y, но я не уверен насчет остальных. Согласно документации Apple, они являются контрольными точками, и я предполагаю, что они похожи на те, что вы видели бы в программе векторного рисования, где вы можете настроить способ прохождения кривой через точку.
Мой вопрос: как выбрать точки, которые относятся к моим координатам, не зная, какие эти координаты опережают время? Я думаю, может быть, просто вычесть установленное количество из каждой из первых контрольных точек и добавить такое же количество ко вторым контрольным точкам, но это звучит слишком упрощенно для меня. Существует ли стандартный метод создания контрольных точек, которые "имеют смысл" для гладкой кривой?
void CGPathAddCurveToPoint (
CGMutablePathRef path,
const CGAffineTransform *m,
CGFloat cp1x,
CGFloat cp1y,
CGFloat cp2x,
CGFloat cp2y,
CGFloat x,
CGFloat y
);
1 ответ
Дополнительные точки являются контрольными точками Безье для кривой из исходной (текущей) точки и кривой в целевую точку (общее объяснение см. http://en.wikipedia.org/wiki/B%C3%A9zier_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