Warning: session_start(): open(/var/lib/php/sessions/sess_aqlea4gd4kov33407q7smoa3f7, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
srecord noeq BresenhamLineDrawer(int x1, int y1, int x2, int y2) extends Meta is Iterable {
int mainStepX, mainStepY;
int sideStepX, sideStepY;
int i, steps;
int x, y;
int fraction, increment;
simplyCached void init {
x = x1; y = y1;
if (x2-x1 > y2-y1) {
// go mainly horizontal (right or left)
mainStepX = sideStepX = sign(x2-x1);
sideStepY = sign(y2-y1);
steps = abs(x2-x1)+1;
increment = abs(y2-y1);
} else {
// go mainly vertical (up or down)
mainStepY = sideStepY = sign(y2-y1);
sideStepX = sign(x2-x1);
steps = abs(y2-y1)+1;
increment = abs(x2-x1);
}
}
Pt next() {
init();
if (i >= steps) null;
Pt p = pt(x, y);
if (++i < steps) {
fraction += increment;
if (fraction >= steps) {
fraction -= steps;
x += sideStepX;
y += sideStepY;
} else {
x += mainStepX;
y += mainStepY;
}
if (scaffolding())
printVars(+i, +steps, +fraction, +increment, +steps, +x, +y, +p);
}
ret p;
}
public ItIt iterator() { ret iff_null(-> next()); }
}