Frage

Ich habe mich angesehen Dieses Beispiel unter Verwendung von PHP und GD Um eine Spirale mit kleinen Bögen zu rendern. Was ich gerne tun möchte, ist eine Annäherung an eine Spirale, die so mathematisch genau wie möglich ist.

Inkscape hat a Spiralwerkzeug Das sieht ziemlich gut aus, aber ich würde gerne die Spiralerzeugung programmatisch machen (vorzugsweise in Python).

Ich habe keine Zeichnungsbibliotheken (z. B. Kairo) gefunden, die Spiralformen nativ unterstützen. Wenn man eine perfekte Antialia-Spirale machen wollte, wäre es am besten, Pixel-by-Pixel über eine Leinwand zu iterieren und festzustellen, ob jedes Pixel in einer mathematisch definierten Spiralarmregion (mit endlicher Dicke) liegt? In diesem Fall müsste man auch Anti-Aliasing-Logik von Grund auf neu implementieren. Würden Sie den Teil der Kurve integrieren, der in jeder Pixelbox liegt, und dann das Verhältnis von gefülltem zu leerem Bereich in einen Alpha -Wert konvertieren?

In diesem Fall ist die Qualität des Renderings wichtiger als die Renderzeit. Die Bewertung eines Integrals bei jedem Pixel ist mir jedoch als ziemlich ineffizient.

Aktualisieren: Ich glaube, die Frage, die ich stellen sollte, ist Dieses hier (Für die Yahoo Antworten ist gescheitert).

War es hilfreich?

Lösung

Wäre es nicht einfacher, eine Kurve zu zeichnen (Spline?) Und einfach viele Kontrollpunkte zu generieren? So würden Sie einen vorhandenen Antialiasing -Motor abholen.

Bearbeiten]: Eine erste Annäherung daran (erledigt mit TCL/TK, aber der Code sollte leicht zu konvertieren sein) gibt mir Folgendes:

# 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

Ich habe mich nicht bemüht, in meiner Verwendung von Kontrollpunkten effizient zu sein.

Andere Tipps

Ich habe keine Zeichenbibliotheken (z. B. Kairo) gefunden, die spirituelle Formen nativ unterstützen

Nein, es ist ein ziemlich ungewöhnliches Merkmal; Erst kürzlich ist das Zeichnen mit Spiralen populär geworden.

Der Code Inkscape verwendet dafür Spiro. Es ist meistens Python und kann mit Kairo die Beziers, in die die Spiralen angenähert werden, verwenden.

Die Bewertung eines Integrals bei jedem Pixel ist mir jedoch als ziemlich ineffizient.

Ja, in der Tat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top