1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| void echangerEntiers(int* x, int* y)
{
int t = *x;
*x = *y;
*y = t;
}
void ligne(int x1, int y1, int x2, int y2, Uint32 coul)
{
int d, dx, dy, aincr, bincr, xincr, yincr, x, y;
if (abs(x2 - x1) < abs(y2 - y1)) {
/* parcours par l'axe vertical */
if (y1 > y2) {
echangerEntiers(&x1, &x2);
echangerEntiers(&y1, &y2);
}
xincr = x2 > x1 ? 1 : -1;
dy = y2 - y1;
dx = abs(x2 - x1);
d = 2 * dx - dy;
aincr = 2 * (dx - dy);
bincr = 2 * dx;
x = x1;
y = y1;
setPixelVerif(x, y, coul);
for (y = y1+1; y <= y2; ++y) {
if (d >= 0) {
x += xincr;
d += aincr;
} else
d += bincr;
setPixelVerif(x, y, coul);
}
} else {
/* parcours par l'axe horizontal */
if (x1 > x2) {
echangerEntiers(&x1, &x2);
echangerEntiers(&y1, &y2);
}
yincr = y2 > y1 ? 1 : -1;
dx = x2 - x1;
dy = abs(y2 - y1);
d = 2 * dy - dx;
aincr = 2 * (dy - dx);
bincr = 2 * dy;
x = x1;
y = y1;
setPixelVerif(x, y, coul);
for (x = x1+1; x <= x2; ++x) {
if (d >= 0) {
y += yincr;
d += aincr;
} else
d += bincr;
setPixelVerif(x, y, coul);
}
}
} |
Partager