Pixelflut

pintman.github.io/pixelflut-presentation

Python Client


						import socket
						
						HOST="localhost"
						PORT=1337

						sock = socket.socket()
						sock.connect((HOST, PORT))
						sock.send(bytes("PX 10 10 ff0000\n", "utf8")
						sock.close()
					

Strecken zeichnen

Strecke rekursiv zeichnen


						function zeichne_strecke(a, b)
						    if punkte_benachbart(a, b)
						        zeichne_pixel(a)
						        zeichne_pixel(b)
						    else
						        m = mittelpunkt_zwischen(a, b)
						        zeichne_strecke(a, m)
						        zeichne_strecke(m, b)
						

Strecke als Vektorgleichung

  • (x,y) = (ax,ay) + r * (vx,vy)
  • (vx,vy) = (bx-ax, by-ay)
  • Parameter r zwischen 0 und 1 kontinuierlich verändern

						    x = ax	    
						    y = ay
						    vx = bx-ax  
						    vy = by-ay
						    dist = abstand(a, b)
						    r = 0.0
						    solange r <= 1.0
						        zeichne_pixel(x + r*vx, y + r*vy)
						        r = r + 1/dist
						

Bresenham-Algorithmus

  • Standard-Algorithmus von Jack Bresenham
  • 1962 bei IBM entwickelt
  • Optimiert: wenige und einfache Operationen
  • schnelle und langsame Richtung
  • viele Fallunterscheidungen
  • z.B. x-Wert schrittweise verändern, y-Wert bei Bedarf anpassen
  • Wikipedia: Rasterung von Linien, Bresenham Algorithmus

Bresenham-Algorithmus 2

  • Pixel N oder NO wählen
  • Punkt M betrachten und mit Ideallinie vergleichen: ober- oder unterhalb
  • F(x,y)=ax+by+c = dy x - dx y + c
  • Vorzeichen hilft bei Positionierung

Auftrag

  • Rekursiven Algorithmus umsetzen
  • Algorithmus mit Vektorgleichung umsetzen
  • Bresenham-Algorithmus recherchieren und umsetzen