Esto es para una aplicación de iPad, pero es esencialmente una pregunta matemática.Usando una Curva de Bezier para dibujar una espiral
Necesito dibujar un arco circular de ancho de línea variable (aumentando monótonamente). Al comienzo de la curva, tendría un espesor inicial (digamos 2 puntos) y luego el espesor aumentaría suavemente hasta el final del arco donde estaría en su mayor grosor (digamos 12 puntos).
Creo que la mejor manera de hacerlo es creando un UIBezierPath y llenando la forma. Mi primer intento fue usar dos arcos circulares (con centros de desplazamiento), y eso funcionó bien hasta 90 °, pero el arco a menudo estará entre 90 ° y 180 °, por lo que el enfoque no lo cortará.
Mi enfoque actual es hacer una ligera espiral (una creciente ligeramente desde el arco circular y una ligera contracción) usando quad Bezier o curvas cúbicas. La pregunta es donde pongo los puntos de control para que la desviación del arco circular (también conocido como la forma "espesor") sea el valor que quiero.
restricciones:
- La forma debe ser capaz de iniciar y terminar en un ángulo arbitrario (a menos de 180 ° el uno del otro)
- El "espesor" de la forma (desviación del círculo) debe empezar y terminar con los valores dados
- el "espesor" deben incrementar de forma monótona (no puede aumentar de tamaño más pequeño y luego de nuevo)
- Tiene a buen aspecto a la vista, no puede haber ningún curvas cerradas
Estoy abierto a otras soluciones también.
¡Esto realmente se ve muy bien! Me has ahorrado bastante trabajo. Esto es mucho más simple que el enfoque en el que estaba trabajando (resolviendo las ecuaciones polinomiales bezier para la espiral). Lo conseguí trabajando para múltiplos de 90 °, pero los ángulos arbitrarios iban a ser un dolor. Esto es mucho mejor ... –
@JonHull Me alegra que te guste. Me acabo de dar cuenta de que he asumido implícitamente que 'endingThickness> = startingThickness', pero debería poder organizar fácilmente sus parámetros de entrada para que se cumpla esta condición. Si no, puede haber escenarios en los que 'projectionEndingThickness' sea negativo, y entonces ya no puedo estar seguro del álgebra. Todavía podría funcionar, pero no lo he probado. – inwit
Oh gran hermano de trabajo ,, eres un verdadero salvavidas ,,, gracias – Dhiru