Ответ 1
Образ, с которым вы связаны, является примером, который не использует квадратичные кривые, поэтому я собираюсь запустить с изображением, а не с кодом.
Путь безье на ios (и os x) под ним в основном представляет собой список команд и точек рисования. например:
[path moveTo:CGMakePoint(1,1)];
[path curveToPoint:(10,10) controPoint1:(3,7) controlPoint2:(4,1)];
[path curveToPoint:(10,10) controPoint1:(15,17) controlPoint2:(21,11)];
[path closePath];
Результаты в:
moveto (1,1)
curveto (10,10) (3,7) (4,1)
curveto (20,0) (15,17) (21,11)
closepath
Контрольные точки на пути безье управляют направлением и скоростью кривой из точки. Первая контрольная точка (cp) управляет направлением и скоростью кривой, выходящей из предыдущей точки, а второй cp управляет тем же самым для точки, в которой вы изогнуты. Для квадратичной кривой (то, что вы используете с помощью addQuadCurveToPoint: controlPoint:), обе эти точки одинаковы, как вы можете видеть в документах для метода здесь.
Получение гладкой кривой вдоль множества точек предполагает, что cp1 и cp2 коллинеарны друг другу и эта линия параллельна точкам на обоих концах этого сегмента.
Это выглядит примерно так:
[path moveTo:2];
[path curveTo:3 controlPoint1:cp1 controlPoint2:cp2];
cp1 и cp2 могут быть вычислены путем выбора некоторой постоянной длины строки и выполнения некоторой геометрии (я забыл все мои уравнения линии прямо сейчас, но они легко googleable)
Переход к использованию # → # для обозначения сегмента и # → # (cp #), чтобы назначить контрольную точку для этого вызова курсового сегмента.
Следующий вопрос - сделать кривую гладкой из 2- > 3 сегмента, идущего в 3- > 4 сегмент. На этом этапе вашего кода вы должны иметь контрольную точку, рассчитанную для 2- > 3 (cp2). Учитывая вашу постоянную длину линии от ранее (это будет контролировать то, насколько резкой кривой вы получаете), вы можете вычислить cp1 для 3- > 4, получив точку коллинеар с 2- > 3 (cp2) и точкой 3 на диаграмме. Затем вычислите 3- > 4 (cp2), который колинирует с 3 > 4 (cp1) и параллелен линии, которая имеет форму 3 и 4. Промойте и повторите через ваш массив точек.