2011-12-19 14 views
7

Tengo UIBezierPath en la aplicación. Cuando se reconoce el toque del dedo en la ruta, quiero subdividir esa curva y almacenar esas dos curvas en dos objetos diferentes. Así que las coordenadas táctiles funcionarán como punto final para una curva y punto de inicio para la segunda curva.Cómo subdividir UIBezierPath y almacenarlo en dos objetos diferentes

De nuevo, si toco cualquiera de esta curva, esa curva se subdividirá en otras dos curvas, y así sucesivamente.

He buscado esto mucho. Pero no pudo encontrar ninguna buena solución.

Además, no tengo idea si hay alguna otra forma de hacerlo. Cualquier ayuda sería muy apreciada. Gracias

+0

He encontrado un enlace. Mira esto chicos. Creo que puede ayudarme a subdividir el beziercurve.http: //www.genie-meca.ac-aix-marseille.fr/Productique/PDF/361_deCasteljau_john.pdf – Harsh

+2

Esto puede o no ser útil, pero le muestra cómo dividir un UIBezierPath en sus rutas individuales: http://stackoverflow.com/questions/3051760/getting-a-list-of-points-from-a-uibezierpath – titaniumdecoy

Respuesta

1

Puede hacerlo con el algoritmo de Casteljau. Si usted está realmente en las matemáticas de la misma check out the Wikipedia page here, pero si no es que está en las matemáticas que probablemente se va a confundir más que nada, cuando en realidad es bastante simple ...

  1. calcular el valor parametrizado a lo largo del curva (entre 0.0 y 1.0) del toque. Para ello puede calcular un conjunto de puntos a intervalos regulares (0.1, 0.2, 0.3, etc.) y luego encontrar los dos puntos más cercanos a sus puntos de contacto y repetir la parametrización entre estos puntos si desea más precisión (0.21, 0.22, 0.23, etc.). Esto dará como resultado un número entre 0.0 y 1.0 a lo largo del segmento de curva que representa donde tocó.
  2. Este bit es difícil de explicar en el texto, pero hay una buena visualización en this page a mitad de camino bajo el encabezado Subdividiendo una curva Bezier. Use el control deslizante debajo del diagrama para ver cómo funciona, aquí está mi explicación textual: debe subdividir las líneas rectas entre los puntos de control de su segmento de curva proporcionalmente al valor parametrizado que calculó en el paso 1. Entonces, si calculó 0.4, tiene cuatro puntos (A, B, C, D) más el punto de división en la curva más cercana a su toque en 0.4 a lo largo de la curva, llamaremos a este punto de división S:
    • Calcule un punto temporal T que es 0,4 a lo largo de la línea B → C
    • Let punto A1 sea igual al punto a punto B1
    • Calcular que es 0,4 a lo largo de la línea a → B
    • Calcu tarde punto C1 que es 0,4 a lo largo de la línea B1 → T
    • Let punto D1 sea igual al punto de división S
    • Let punto D2 ser igual al punto
    • C2 punto
    • Calcular que es 0,4 a lo largo de la línea C → D D
    • punto Calcular B2 que es 0,4 a lo largo de la línea T → C2
    • Let punto A2 sea igual al punto de división S

Ahora tiene dos nuevas curvas de Bezier, la primera utilizando los puntos de control A1, B1, C1, D1 y la segunda usando A2, B2, C2, D2.

Cuestiones relacionadas