Pregunta

He mirado Este ejemplo usando PHP y GD para que estén por partes en una espiral con pequeños arcos. Lo que me gustaría hacer es representar una aproximación a una espiral que sea lo más matemáticamente precisa posible.

Inkscape tiene un herramienta espiral Eso se ve bastante bien, pero me gustaría hacer la generación espiral programáticamente (preferiblemente en Python).

No he encontrado ninguna biblioteca de dibujo (por ejemplo, El Cairo) que admite de forma nativa formas espirales. Si uno quisiera representar una espiral antialiased perfecta, ¿la mejor manera sería iterar píxel por píxel sobre un lienzo, determinando si cada píxel se encuentra dentro de una región de brazo espiral matemáticamente definida (de grosor finito)? En ese caso, uno también tendría que implementar la lógica anti-alias de cero. ¿Integraría la parte de la curva que se encuentra dentro de cada caja de píxeles y luego convertiría la relación de área llena a vacío a un valor alfa?

En este caso, la calidad de la representación es más importante que el tiempo de representación. Sin embargo, evaluar una integral en cada píxel me parece bastante ineficiente.

Actualizar: Creo que la pregunta que debería hacer es Éste (para el cual yahoo respuestas ha fallado).

¿Fue útil?

Solución

¿No sería más fácil dibujar una curva (spline?) Y simplemente generar muchos puntos de control? Así, recogerías un motor antialiasing existente.

Editar]: una primera aproximación a esto (realizada con TCL/TK, pero el código debería ser fácil de convertir) me da esto:

# Make the list of spiral coordinates
set coords {}          
set theta 0; set r 10
set centerX 200; set centerY 150
# Go out 50 pixels per revolution
set pitch [expr {100.0 / 720.0}]
for {set i 0} {$i<720} {incr i} {
    lappend coords [expr { $centerX + $r*sin($theta) }] \
                   [expr { $centerY + $r*cos($theta) }]
    set r     [expr { $r + $pitch }]
    # Increment angle by one degree
    set theta [expr { $theta + 3.1415927/180 }]
}

# Display as a spline
pack [canvas .c -width 400 -height 300]
.c create line $coords -tag spiral -smooth 1

No he hecho ningún esfuerzo para ser eficiente en mi uso de puntos de control.

Otros consejos

No he encontrado ninguna biblioteca de dibujo (por ejemplo, El Cairo) que admite de forma nativa las formas de espiral

No, es una característica bastante inusual; Es muy recientemente que dibujar con espirales se ha vuelto popular.

El código que usa el titscape para esto es Espirón. Es principalmente Python, y puede usar El Cairo para representar los beziers en los que se aproximan las espirales.

Sin embargo, evaluar una integral en cada píxel me parece bastante ineficiente.

Sí, de hecho.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top