11 static int ipart(
float x)
15 static int round(
float x)
17 return ipart(x + 0.5);
20 static float fpart(
float x)
24 static int rfpart(
int x)
26 return 1.f - fpart(x);
40 static void drawLine(
float x0,
float y0,
float x1,
float y1, std::function<
void(
int,
int,
float)> plot)
42 bool steep = std::abs(y1 - y0) > std::abs(x1 - x0);
57 float gradient = dy / dx;
64 float xend = round(x0);
65 float yend = y0 + gradient * (xend - x0);
66 float xgap = rfpart(x0 + 0.5);
68 float ypxl1 = ipart(yend);
71 plot(ypxl1, xpxl1, rfpart(yend) * xgap);
72 plot(ypxl1 + 1, xpxl1, fpart(yend) * xgap);
76 plot(xpxl1, ypxl1, rfpart(yend) * xgap);
77 plot(xpxl1, ypxl1 + 1, fpart(yend) * xgap);
79 float intery = yend + gradient;
83 yend = y1 + gradient * (xend - x1);
84 xgap = fpart(x1 + 0.5);
86 float ypxl2 = ipart(yend);
89 plot(ypxl2, xpxl2, rfpart(yend) * xgap);
90 plot(ypxl2 + 1, xpxl2, fpart(yend) * xgap);
94 plot(xpxl2, ypxl2, rfpart(yend) * xgap);
95 plot(xpxl2, ypxl2 + 1, fpart(yend) * xgap);
101 for (
int x = xpxl1 + 1; x < xpxl2; x++)
103 plot(ipart(intery), x, rfpart(intery));
104 plot(ipart(intery) + 1, x, fpart(intery));
105 intery = intery + gradient;
110 for (
int x = xpxl1 + 1; x < xpxl2; x++)
112 plot(x, ipart(intery), rfpart(intery));
113 plot(x, ipart(intery) + 1, fpart(intery));
114 intery = intery + gradient;
Definition: XiaolinWu.h:7
static void drawLine(float x0, float y0, float x1, float y1, std::function< void(int, int, float)> plot)
Draw a line using the XiaolinWu antialiasing algorithm.
Definition: XiaolinWu.h:40