[gelöst] Problem mit Bresenham
-
da ist doch ein fehler in z.13
Kompakte Variante [Bearbeiten] Der Bresenham-Algorithmus kann auch in einer einfachen Variante in C implementiert werden: void line(int x0, int y0, int x1, int y1) { int dx = abs(x1-x0), sx = x0<x1 ? 1 : -1; int dy = -abs(y1-y0), sy = y0<y1 ? 1 : -1; int err = dx+dy, e2; /* error value e_xy */ for(;;){ /* loop */ setPixel(x0,y0); if (x0==x1 && y0==y1) break;//<< hier e2 = 2*err; if (e2 > dy) { err += dy; x0 += sx; } /* e_xy+e_x > 0 */ if (e2 < dx) { err += dx; y0 += sy; } /* e_xy+e_y < 0 */ } }
-
Welcher Fehler? Was genau stimmt nicht? Wie wäre es richtig?
-
Und selbst wenn da mal ein Fehler wäre. Und? Was für ein dummer Thread-Titel.
-
volkard schrieb:
Welcher Fehler? Was genau stimmt nicht? Wie wäre es richtig?
also ich hab mal z. 13 ganz nach unten verschoben, sonst wird bei mir unter dem ersten punkt noch einer gezeichnet.(bei einer horizontalen linie)
-
King George schrieb:
volkard schrieb:
Welcher Fehler? Was genau stimmt nicht? Wie wäre es richtig?
also ich hab mal z. 13 ganz nach unten verschoben, sonst wird bei mir unter dem ersten punkt noch einer gezeichnet.
Bei welchem Aufruf?
Ich fürchte, nach unten verschoben würde line(10,10,10,10) falscherweise keinen Punkt zeichnen.
-
King George schrieb:
volkard schrieb:
Welcher Fehler? Was genau stimmt nicht? Wie wäre es richtig?
also ich hab mal z. 13 ganz nach unten verschoben, sonst wird bei mir unter dem ersten punkt noch einer gezeichnet.(bei einer horizontalen linie)
Kann ich nicht so bestätigen.
#include <iostream> using namespace std; void setPixel(int x,int y) { cout<<x<<'|'<<y<<'\n'; } void line(int x0, int y0, int x1, int y1) { int dx = abs(x1-x0), sx = x0<x1 ? 1 : -1; int dy = -abs(y1-y0), sy = y0<y1 ? 1 : -1; int err = dx+dy, e2; /* error value e_xy */ for(;;){ /* loop */ setPixel(x0,y0); if (x0==x1 && y0==y1) break;//<< hier e2 = 2*err; if (e2 > dy) { err += dy; x0 += sx; } /* e_xy+e_x > 0 */ if (e2 < dx) { err += dx; y0 += sy; } /* e_xy+e_y < 0 */ } } int main() { line(10,10,20,10); }
Ausgabe:
10|10 11|10 12|10 13|10 14|10 15|10 16|10 17|10 18|10 19|10 20|10
-
ups, sry! ich hab einfach 1px über die linie raus geschrieben und dann in der nächsten zeile noch nen punkt gesetzt, daher war unter dem ersten punkt noch einer
@edit: werd beim nächsten mal besser testen, versprochen!
-
Es wäre lieb, als Threadtitel "Problem mit Bresenham" statt "Verkommt Wikipedia" gewählt zu haben. Außerdem hätte der Thread nach "Rund um die Programmierung" gehört.
Und jetzt würde er gerne "[gelöst] Problem mit Bresenham (was: Verkommt Wikipedia)" heißen.
-
danke für die hilfe
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Neuigkeiten aus der realen Welt in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
/facepalm
-
this->that schrieb:
/facepalm
wer nichts zu sagen hat, sollte die fresse halten!