Question

Je l'ai regardé cet exemple en utilisant PHP et GD pour rendre par morceaux une spirale avec de petits arcs. Ce que je voudrais faire est de rendre une approximation à une spirale qui est aussi précis que possible mathématiquement.

Inkscape a un qui semble assez bon, mais je voudrais faire la génération spirale par programme (de préférence dans le python).

I ai pas trouvé de bibliothèques de dessin (par exemple, Le Caire) qui supportent nativement des formes en spirale. Si l'on voulait rendre une spirale anticrénelage parfaite, serait la meilleure façon être juste pixel par pixel itérateur sur une toile, déterminer si chaque pixel se trouve dans une région de bras en spirale mathématiquement définie (d'épaisseur finie)? Dans ce cas, il faudrait également mettre en œuvre la logique anti-aliasing à partir de zéro. Voulez-vous intégrer la partie de la courbe qui se trouve à l'intérieur de chaque zone de pixel, puis convertir le rapport de zone vide rempli à une valeur alpha?

Dans ce cas, la qualité du rendu est plus important que le temps de rendu. Cependant, l'évaluation d'une intégrale à chaque pixel me semble assez inefficace.

Mise à jour: Je crois que la question que je devrais poser est celui-ci (dont Yahoo Answers a échoué).

Était-ce utile?

La solution

Ne serait-il plus facile de dessiner une courbe (spline?) Et juste générer beaucoup de points de contrôle? Comme vous voulez chercher un moteur anticrénelage existant.

[EDIT]: Une première approximation à ce (fait avec Tcl / Tk, mais le code devrait être de convertir facilement) me donne ceci:

# 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

Je ne l'ai pas fait aucun effort pour être efficace dans mon utilisation des points de contrôle.

Autres conseils

  

I ai pas trouvé de bibliothèques de dessin (par exemple, Le Caire) qui supportent nativement des formes en spirale

Non, il est tout à fait une caractéristique inhabituelle; il est seulement très récemment que le dessin avec des spirales est devenue populaire.

Le code Inkscape utilise pour cela est Spiro . Il est surtout Python, et peut utiliser du Caire pour rendre les beziers que les spirales sont approchées dans.

  

Toutefois, l'évaluation d'une intégrale à chaque pixel me semble assez inefficace.

Oui, en effet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top