2017-07-26 2 views
-1

Ich möchte ein gefülltes Rechteck von vier Punkten mit dem Linienalgorithmus von Bresenham oder ähnlichem erzeugen, um glatte Seiten zu erhalten. Ich bin auf diese Antwort auf Stack Overflow [link] gestoßen, die perfekt zum Erstellen einer Linie zwischen zwei Punkten funktioniert. Wie kann ich diese Funktion verwenden/ändern, um ein ausgefülltes Rechteck zu erstellen? Gibt es einen anderen Algorithmus, der besser zu meinen Bedürfnissen passt?Unter Verwendung von Bresenhams Linienalgorithmus oder ähnlichem, um ein Rechteck zu füllen

+0

Ein Rechteck wird immer in Pixel passen, Sie brauchen nicht zu glätten, können Sie ein Viereck bedeuten? – Gusman

+1

@Gus: Ein gedrehtes Rechteck ist immer noch ein Rechteck. – TaW

+0

Sie könnten zuerst das Rechteck erstellen und dann eine Überfüllung durchführen. Es hängt wirklich davon ab, auf welche Art von Primitiven Sie zielen. – TaW

Antwort

0

Für beliebige gedrehten Rechtecke:

Hinweis: Diese Beschreibung folgt wiki Wu's implementation mit zur Schleife entlang OX-Achse, aber es ist wirksame Kanten entlang OY Achse zu ziehen und horizontale Linien zu füllen.

Sortieren Ecken durch X-Koordinate
Abständen Achse durch auf vertice
wählen für jedes Intervall getrennt horizontal Stellen oberen und unteren Rand
Gleichzeitig Wu antaliasing für Ober- und Unterkante

Für Oberkante draw auszuführen obere halbtransparentes pixel

draw: plot(ipart(intery) , x, rfpart(intery)) 

und untere Pixel ignorieren, seine Position als Start der Füllleitung verwenden

LineFrom(ipart(intery)+1, x) 

Für Unterkante ziehen untere halbtransparenten Pixel und verwendet als oberes Ende der Füllleitung

Reinitialize Kante Zeichnung wenn Ecke erreicht ist.

Verwandte Themen