grapher

Crates.iographer
lib.rsgrapher
version0.2.2
sourcesrc
created_at2024-09-08 10:40:09.752463
updated_at2024-09-14 16:44:28.626632
descriptionSimulate and visualize a force directed graph
homepage
repositoryhttps://github.com/iceHtwoO/RustGrapher
max_upload_size
id1367978
size21,657,163
Alexander Neuhäuser (iceHtwoO)

documentation

README

RustGrapher

A library to simulate and visualize a 2D force directed graph in rust. plot

Features

  • Render PetGraphs in 2D
  • Physics based positioning via a Force Directed Graph
  • Drag Nodes to a new position
  • Place new nodes
  • WIP: Build graphs using the UI

Algorithms

Barnes–Hut

Barnes-Hut is a approximation algorithm for n-body simulation.

The force directed graph calculates for each node the repulsive force to other nodes which will lead to a complexity of $O(n^2)$.

Using a k-d Tree(Quadtree) the Barnes-Hut algorithm groups far away nodes and only calculates the repulsive force once.This results in a complexity of $O(nlogn)$.

Performance

[!TIP] Run the project with --release for the best performance(~10x).

On a Ryzen 7 3700X the library can calculate 2000 simulation steps per second at 1000 Nodes. (Using 16 Physics threads)

Controls

  • return - Centers the camera on the average poisson of all nodes.
  • space - Start/Pause simulation
  • scroll wheel - Zoom in or out
  • W, A, S and D - to move the camera
  • Click and drag - move nodes
  • P - switch from drag to node place(only works while simulation is paused)

Usage

    // Build a PetGraph
    let mut rng = rand::thread_rng();
    let graph: petgraph::Graph<(), (), Directed> =
        petgraph_gen::barabasi_albert_graph(&mut rng, 1000, 1, None);

    // Configure the simulator
    let simulator = SimulatorBuilder::new()
        .delta_time(0.01)
        .freeze_threshold(-1.0)
        .build(graph.into());

    // Start the renderer
    let renderer = Renderer::new(simulator);
    renderer.create_window();

Examples

Commit count: 0

cargo fmt