Swing Bresenham Linienalgorithmus grafisch darstellen

dutchman79

Mitglied
Hi Java-Gurus

Ich habe folgendes Problem. Ich habe selber versucht den Bresenham Linien Algorithmus vom Anfang an selber zu programmieren. ( Rasteren einer Linie im Pixelfeld)

Die grafische Ausgabe hatte ich bis jetzt nur als doppeltes String Array, mit einem " X " als ausgeschalteter Pixel und eine " O " als eingeschalteter Pixel.

Mein Algorithmus möchte ich jetzt auch testen in alle 8 Oktanten. ( also auch negative x und y )

Ich möchte dazu ein traditionelles Koordinatenkreuz erzeugen, mit dem Ursprung mittig. Wenn es geht auch mit einem schwarzen Rastermuster. ( horz. und vertikale Linien)
x-Bereich: -10 ....+10
y-Bereich: -10 ....+10


Dann noch irgendwie eine Darstellung der eingeschalteten Pixel (alle nur mit diskreten Koordinaten)

Zur Veranschauligung:
Eine Linie von (0,0) nach (5,1) sieht bei mir momentan so aus:
Koordinatenursprung ist links oben. Pos. Y Richtung nach unten.

O O O X X X X X X X
X X X O O O X X X X
X X X X X X X X X X
X X X X X X X X X X
X X X X X X X X X X
X X X X X X X X X X
X X X X X X X X X X
X X X X X X X X X X
X X X X X X X X X X
X X X X X X X X X X
 
S

SlaterB

Gast
fehlt da nicht noch irgendwas? dein Code, genaue Nennung eines Problems oder was auch immer,
wenn du im positiven Quadranten arbeiten kannst, was ist dann mit den anderen so schwierig?

im Extremfall kannst du intern einfach in einem positiven Quadranten von 20x20 rechnen
und alle Ausgabe-Pixel um 10/10 verschieben, so dass aus 17/4 etwa 7/-6 wird
 

dutchman79

Mitglied
Also:

In meinem Code setze ich die einzuschaltenden Pixel die ich berechnet habe mit einer Methode setPixel(x,y) die die beiden integer Werte x,y übergeben bekommt.

Diese Methode macht bei mir im Moment nur eine "O" im Doppelarray an der entsprechenden Position.

Mein Problem:

Ich möchte ein zentriertes Koordinatensystem (Achsenkreuz) als Frame wo ich dann nach und nach meine Punkte an weiterleite und diese dann gezeichnet werden.

Ist einigermaßen klar was mein Problem ist ?

(mein Algorithmus funktioniert soweit, möchte ich nur auch schön darstellen)
 

bERt0r

Top Contributor
Also erstmal, um Himmel willen nimm doch kein String array für sowas. Da tuts doch ein boolean array genauso, ist logischer und performanter.
Und wie Slater schon sagte, wirst du dir irgendein Model schreiben müssen, das deine Datenstruktur auf ein koordinatensystem mit Negativen Zahlen ummünzt.
 

dutchman79

Mitglied
Danke schon Mal für die ersten Ratschläge.

Für die erste provisorische Ausgabe hatte ich so ein Doppelarray aus Strings genommen, ist das doch so eine komische Wahl ?

Mit GUI kenne ich mich fast gar nicht aus, deswegen da die Probleme.
Es fängt schon damit an das ich meistens in Beispiele sehe dass man im Frame den Ursprung wie bei meinem Array links oben legt.

Ich möchte aber ein Fenster mit einem Koordinaten Kreuz, der Ursprung mittig, x und y Bereiche von mir aus feste Größen.
Das kriege ich schon nicht hin.
 

Marco13

Top Contributor
Joa, eigentlich ist es bei so was elementarem wie dem Bresenham fast egal, ob man das so als String-Grafik ausgibt, oder gleich auf die Konsole schreibt
Setze Pixel bei 4,5
Setze Pixel bei 4,6
Setze Pixel bei 5,6
...

:D

Am einfachsten wäre das wohl wenn man sich eine Klasse macht wie
Java:
class Output
{
    private int centerX = 50;
    private int centerY = 50;
    private BufferedImage bufferedImage = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);

    public void setPixel(int x, int y)
    {
        bufferedImage.setRGB(x+centerX, y+centerY, Color.WHITE.getRGB());
    }

...

EDIT> Durch geeignete Implementierung von "setPixel" kann man auch die Richtung umdrehen und so, und ein Koordinatenkreuz kann man sich meinetwegen am Anfang auch in das Bild malen <EDIT

Das BufferedImage kann man dann leicht zeichnen - auch groß skaliert, damit man was erkennt... Ich hatte da mal was geschickteres dafür geschrieben, find's aber gerade nicht mehr ... ein bißchen Inspiration zum Zeichnen an sich gibt's aber z.B. in http://www.java-forum.org/awt-swing-swt/115549-skaliertes-image-pixelweise-bearbeiten.html
 

Ähnliche Java Themen

Neue Themen


Oben