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;
+}