rendered paste bodyFLOAT X
FLOAT Y
: LineDDA // x1 y1 x2 y2 color
2 PICK 5 PICK - // x2-x1
2 PICK 5 PICK - // y2-y1
2DUPS MAX // L = max(x2-x1,y2-y1)
DUP S>F ROT ROT // FS: L
FDUP S>F FSWAP F/ // FS: L dY/L
FSWAP S>F FSWAP F/ FSWAP // FS: dX/L dY/L
// DS: x1 y1 x2 y2 color L
2 XCHG DROP
3 PICK 3 XCHG DROP
4 PICK 4 XCHG DROP
4 XCHG DROP
ROT ROT
// DS: color L x1 y1
S>F Y F!
S>F X F!
// FS: dx/L dy/L
// DS: color L
1+ 0 DO
FOVER X F@ F+ FDUP X F! F>S
FDUP Y F@ F+ FDUP Y F! F>S
2 PICK PIXEL
LOOP
DROP
FDROP FDROP
;
10 50 200 500 65000 LineDDA