This project demonstrates a basic force-directed graph drawing technique used on graphs generated using a preferential attachment process. A Barnes-Hut quadtree is used to reduce the complexity of every step from O(n^2) to O(n*log(n)) and multithreading speeds everything up.
A basic UI allows the user to define
n
the number of nodeska
,kr
, andkn
attraction, repulsion, and general constantsmaxIters
andminError
halting conditionsupdateEvery
to control how often the UI updatestheta
in the range [0, 1) indicates the tradeoff between accuracy (0) and speed (1)numThreads
the number of threads
This is nowhere near as good as state-of-the-art, but it is still fun to see how changing the number of nodes, threads, and value of theta affects performance.
$ cd server
$ go run main.go
install dependencies
$ cd ui
$ npm install
launch ui
$ npm run start