6 个版本

0.3.2 2021 年 7 月 3 日
0.3.1 2021 年 7 月 3 日
0.2.0 2020 年 12 月 27 日
0.1.1 2020 年 4 月 30 日

#26 in #力

Download history 5/week @ 2024-03-15 32/week @ 2024-03-29 10/week @ 2024-04-05

每月 112 下载量

MIT 许可协议

14KB
255 代码行

force-graph-rs

Crates.io Docs Status

Graphoon 的力导向图算法的 Rust 实现。

查看 API 文档,并用 cargo run --example demo 运行示例。


lib.rs:

Graphoon 的力导向图算法的 Rust 实现。

示例

use force_graph::{ForceGraph, Node, NodeData};

// create a force graph with default parameters
let mut graph = <ForceGraph>::new(Default::default());

// create nodes
let n1_idx = graph.add_node(NodeData {
    x: 250.0,
    y: 250.0,
    ..Default::default()
});
let n2_idx = graph.add_node(NodeData {
    x: 750.0,
    y: 250.0,
    ..Default::default()
});
let n3_idx = graph.add_node(NodeData {
    x: 250.0,
    y: 750.0,
    ..Default::default()
});
let n4_idx = graph.add_node(NodeData {
    x: 750.0,
    y: 750.0,
    ..Default::default()
});
let n5_idx = graph.add_node(NodeData {
    x: 500.0,
    y: 500.0,
    is_anchor: true,
    ..Default::default()
});

// set up links between nodes
graph.add_edge(n1_idx, n5_idx, Default::default());
graph.add_edge(n2_idx, n5_idx, Default::default());
graph.add_edge(n3_idx, n5_idx, Default::default());
graph.add_edge(n4_idx, n5_idx, Default::default());

// --- your game loop would start here ---

// draw edges with your own drawing function
fn draw_edge(x1: f32, y1: f32, x2: f32, y2: f32) {}

graph.visit_edges(|node1, node2, _edge| {
    draw_edge(node1.x(), node1.y(), node2.x(), node2.y());
});

// draw nodes with your own drawing function
fn draw_node(x: f32, y: f32) {}

graph.visit_nodes(|node| {
    draw_node(node.x(), node.y());
});

// calculate dt with your own timing function
let dt = 0.1;
graph.update(dt);

// --- your game loop would repeat here ---

依赖项

~2MB
~32K SLoC