Allen Fällen der Bresenham-line-Algorithmus
Ich brauche, um zu überprüfen, alle Pixel in einer Linie, so dass ich mit Bresenham-Algorithmus, um den Zugriff auf die einzelnen pixel. Insbesondere ich brauche, um zu überprüfen, ob alle Pixel, die sich auf gültige pixel einer bitmap. Dies ist der code:
private void Bresenham(Point p1, Point p2, ref List<Point> track) {
int dx = p2.X - p1.X;
int dy = p2.Y - p1.Y;
int swaps = 0;
if (dy > dx) {
Swap(ref dx, ref dy);
swaps = 1;
}
int a = Math.Abs(dy);
int b = -Math.Abs(dx);
double d = 2*a + b;
int x = p1.X;
int y = p1.Y;
color_track = Color.Blue;
Check_Pixel(ref area, new Point(x,y));
track.Clear();
track.Add(new Point(x, y));
int s = 1;
int q = 1;
if (p1.X > p2.X) q = -1;
if (p1.Y > p2.Y) s = -1;
for(int k = 0; k < dx; k++) {
if (d >= 0) {
d = 2*(a+b) + d;
y = y + s;
x = x + q;
}
else {
if (swaps == 1) y = y + s;
else x = x + q;
d = 2 * a + d;
}
Check_Pixel(ref area, new Point(x, y));
track.Add(new Point(x, y));
}
}
private void Swap(ref int x, ref int y) {
int temp = x;
x = y;
y = temp;
}
Check_Pixel wird verwendet, um zu überprüfen, ob die Zeile pixel auf eine gültige bitmap. Ich füge den pixel-gegründet, um eine List<Point>
zu erbringen, die Punkt für Punkt seine element und werden sicher Bresenham
prüft den korrekten Pixel (es tut). Das problem ist, dass mein Algorithmus deckt nicht alle Fälle, aber über 50% von Ihnen.
P. S: meine Koordinaten system Herkunft ist auf der linken oberen Ecke (x wächst von Links nach rechts, y nach unten)
InformationsquelleAutor Frank Lioty | 2012-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie die komplette version:
InformationsquelleAutor Frank Lioty
Zeichnen von Linien mit Pixeln ist nicht deterministisch.
oder
Wenn Ihr pints wurden gezogen mit Bresenham ' s versuchen, gehen beide Richtungen.
Sie haben, um zu versuchen, verschiedene Versionen von Bresenham, um herauszufinden, welche haben Sie genutzt. Warum nicht einfach überprüfen, ob, wie Sie sind, ist eine Kontrolle in der Nähe der Linie, die Sie erzeugen, mit Bresenham.
InformationsquelleAutor Luka Rahne