000
19.04.2006, 19:19 Uhr
scales of justice
|
ich hab Bresenhams Linienalgorithmus implementiert:
C++: |
void line1(short x1, short y1, short x2, short y2, char color) { short delta_x; short delta_y; short xstep; short ystep; short length; short e; short offset;
delta_x = x2 - x1; delta_y = y2 - y1; xstep = 1; ystep = -width;
if(delta_x < 0) { delta_x = -delta_x; xstep = -xstep; } if(delta_y < 0) { delta_y = -delta_y; ystep = -ystep; } if(delta_y > delta_x) { long t = delta_x; delta_x = delta_y; delta_y = t; t = xstep; xstep = ystep; ystep = t; }
length = delta_x + 1; e = delta_y;
x1 += width2; x2 += width2; y1 = - y1 + height2 - 1; y2 = - y2 + height2 - 1;
offset = y1 * width + x1;
while(length-- > 0) { ppixel[offset] = color;
offset += xstep; e += delta_y;
if(e >= delta_x) { e -= delta_x; offset += ystep; } } }
|
die Linie soll von x1|y1 nach x2|y2 gezogen werden, in der Farbe color
width ist die breite der Zeichenläche heigh die höhe width2 ist die halbe breite heght2 die halbe höhe
(width2 und height2 wird am Anfang deklariert, damit sie nicht immer wieder ausgerechnet wrden müssen)
ppixel ist ein char-array, in dem die Farbe jedes Pixels der Zeichenläche gespeichert ist
compilieren tu ich das ganze mit Turbo C, also 16-Bit
alle shorts die in dem Code vorkommen will ich in longs umwandeln, wenn ich das mache fängt die funktion allerdings an zu spinnen und auf meiner Zeichenfläche kommt nichts an belasse ich die shorts klappt es problemlos
ein großes Problem stellt das nicht dar, aber mich würde einfach mal interessieren warum es mit longs nicht klappt |