Domanda

Ho guardato questo esempio utilizzando PHP e GD to a tratti rendering una spirale con piccoli archi. Quello che vorrei fare è rendere un'approssimazione a una spirale che è matematicamente precisa possibile.

spirale strumento che sembra piuttosto buono, ma vorrei fare il generazione spirale programmazione (preferibilmente in Python).

non ho trovato nessuna libreria di disegno (per esempio Il Cairo) che le forme di sostegno a spirale in modo nativo. Se si volesse rendere una perfetta spirale antialiasing, sarebbe il modo migliore per essere semplicemente iterare pixel per pixel su una tela, determinare se ogni menzogna pixel all'interno di una regione braccio spirale matematicamente definita (di spessore finito)? In tal caso, si potrebbe anche implementare logica anti-aliasing da zero. Vuoi integrare la porzione della curva che si trova dentro ogni scatola pixel, quindi convertire il rapporto di riempito a zona vuota a un valore alfa?

In questo caso la qualità del rendering è più importante il tempo di rendering. Tuttavia, la valutazione di un integrale per ogni pixel mi sembra abbastanza inefficiente.

Aggiornamento: Credo che la domanda che dovremmo porci è questo uno (per il quale Yahoo Answers è fallito).

È stato utile?

Soluzione

Non sarebbe più facile per disegnare una curva (spline?) E solo creare un sacco di punti di controllo? Come quella che ci si prende in mano un motore antialiasing esistente.

[EDIT]: Una prima approssimazione a questo (fatto con Tcl / Tk, ma il codice dovrebbe essere facile da convertire) mi dà questo:

# 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

Non ho fatto alcuno sforzo per essere efficienti nel mio uso di punti di controllo.

Altri suggerimenti

  

non ho trovato nessuna libreria di disegno (per esempio Il Cairo) che supportano in modo nativo a spirale forme

No, è piuttosto una caratteristica insolita; è solo di recente che il disegno con le spirali è diventato popolare.

Gli usi codice di Inkscape per questo è Spiro . E 'soprattutto Python, e può utilizzare Cairo per rendere le Beziers che le spirali sono approssimate in.

  

Tuttavia, valutando un integrale per ogni pixel mi sembra abbastanza inefficiente.

Sì, in effetti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top