diff --git a/dda2.cpp b/dda2.cpp new file mode 100644 index 0000000..2df089b --- /dev/null +++ b/dda2.cpp @@ -0,0 +1,44 @@ +// @COMPILECMD g++ $@ -o $*.out -ggdb $(pkg-config --cflags --libs ncurses) +#include <sys/param.h> // MAX() +#include <math.h> +#include <ncurses.h> + +typedef struct { + int y; + int x; +} spatial; + +void dda(const char c, const spatial from, const spatial to) { + const int steps = MAX(abs(to.y - from.y), abs(to.x - from.x)); + + struct { + double y; + double x; + } d = { + .y = (double)from.y, + .x = (double)from.x, + }; + + for (int i = 0; i < steps+1; i++) { + mvaddch(round(d.y), round(d.x), c); + d.y += (double)(to.y - from.y) / (double)steps; + d.x += (double)(to.x - from.x) / (double)steps; + } + return; +} + +signed main() { + initscr(); + noecho(); + curs_set(0); + + spatial from = {6, 20}; + spatial to = {3, 0}; + + dda('-', from, to); + + refresh(); + while(1){} + endwin(); + return 0; +}