La imagen se ha vinculado a un ejemplo que no utiliza curvas cuadráticas, así que voy a correr con la imagen y no el código.
Una ruta bezier en ios (y os x) debajo es básicamente una lista de comandos y puntos de dibujo. por ejemplo:
[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];
Resultados en:
moveto (1,1)
curveto (10,10) (3,7) (4,1)
curveto (20,0) (15,17) (21,11)
closepath
puntos de control en un trazado Bézier controlar la dirección y la velocidad de la curva de un punto. El primer punto de control (cp) controla la dirección y la velocidad de la curva que sale del punto anterior y el segundo cp controla el mismo para el punto al que se está curvando. Para una curva cuadrática (lo que obtiene usando addQuadCurveToPoint: controlPoint:), ambos puntos son los mismos, como se puede ver en los documentos para el método here.
Obtener una curva suave a lo largo de un conjunto de puntos implica hacer que cp1 y cp2 sean colineales entre sí y esa línea sea paralela a los puntos en cada extremo de ese segmento.
Esto sería algo como:
[path moveTo:2];
[path curveTo:3 controlPoint1:cp1 controlPoint2:cp2];
CP1 y CP2 se pueden calcular por la elección de alguna longitud de la línea constante y haciendo un poco de geometría (no recuerdo todos mis ecuaciones de línea en este momento pero están re easily googleable)
Va a usar # -> # para designar un segmento y # -> # (cp #) para designar un punto de control para la llamada de ese segmento.
El siguiente problema es hacer que la curva sea suave desde el segmento 2-> 3 que va hacia el segmento 3-> 4. En este punto de su código, debe tener un punto de control calculado para 2-> 3 (cp2). Teniendo en cuenta la longitud de línea constante desde antes (esto controlará qué tan afilada de una curva se obtiene), puede calcular una cp1 para 3-> 4 obteniendo un punto colineal con 2-> 3 (cp2) y el punto 3 en el diagrama. Luego calcule un 3-> 4 (cp2) que es colineal con 3-> 4 (cp1) y paralelo a la línea que marca el punto 3 y el punto 4. Enjuague y repita a través de su matriz de puntos.
El silencio es tan fuerte que duele. – akaru
¿Desea que la curva pase exactamente por cada uno de sus puntos dados? ¿O quieres una curva más suave que pueda pasar cerca de algunos de los puntos dados? –
@robmayoff Supongo que cerrar es lo suficientemente bueno si se trata de una operación mucho más simple. – akaru