Skip to content

Multithreaded force-directed graph drawing using Barnes-Hut quadtree

Notifications You must be signed in to change notification settings

oppenheimj/unraveler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unraveler

4096 nodes, 8 threads, \theta=0.95 (Intel Core i7 7700K @ 5.0 GHz)

Introduction

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 nodes
  • ka, kr, and kn attraction, repulsion, and general constants
  • maxIters and minError halting conditions
  • updateEvery to control how often the UI updates
  • theta 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.

Run

server

$ cd server
$ go run main.go

ui

install dependencies

$ cd ui
$ npm install

launch ui

$ npm run start