Voronoi diagram
This commit is contained in:
parent
ef3253d777
commit
acd4a62d08
3 changed files with 44 additions and 12 deletions
21
Cargo.lock
generated
21
Cargo.lock
generated
|
|
@ -2377,6 +2377,8 @@ version = "0.15.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
|
||||
dependencies = [
|
||||
"allocator-api2",
|
||||
"equivalent",
|
||||
"foldhash",
|
||||
]
|
||||
|
||||
|
|
@ -2890,6 +2892,7 @@ dependencies = [
|
|||
"bevy",
|
||||
"bevy_vello",
|
||||
"rand 0.9.0",
|
||||
"spade",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -3681,6 +3684,12 @@ version = "1.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
|
||||
|
||||
[[package]]
|
||||
name = "robust"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30"
|
||||
|
||||
[[package]]
|
||||
name = "rodio"
|
||||
version = "0.19.0"
|
||||
|
|
@ -3954,6 +3963,18 @@ dependencies = [
|
|||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spade"
|
||||
version = "2.13.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1ece03ff43cd2a9b57ebf776ea5e78bd30b3b4185a619f041079f4109f385034"
|
||||
dependencies = [
|
||||
"hashbrown 0.15.2",
|
||||
"num-traits",
|
||||
"robust",
|
||||
"smallvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spirv"
|
||||
version = "0.3.0+sdk-1.3.268.0"
|
||||
|
|
|
|||
|
|
@ -15,3 +15,4 @@ opt-level = 3
|
|||
bevy = "0.15.3"
|
||||
bevy_vello = "0.7.1"
|
||||
rand = "0.9.0"
|
||||
spade = "2.13.1"
|
||||
|
|
|
|||
34
src/main.rs
34
src/main.rs
|
|
@ -1,6 +1,7 @@
|
|||
use bevy::prelude::*;
|
||||
use bevy_vello::{VelloPlugin, prelude::*, vello::kurbo::Point};
|
||||
use bevy_vello::{prelude::*, vello::kurbo::{Point, Stroke}, VelloPlugin};
|
||||
use rand::Rng;
|
||||
use spade::{DelaunayTriangulation, Point2, Triangulation, handles::VoronoiVertex};
|
||||
use std::ops::DerefMut;
|
||||
|
||||
const JITTER: f64 = 0.5;
|
||||
|
|
@ -21,25 +22,34 @@ fn setup_vector_graphics(mut commands: Commands) {
|
|||
|
||||
fn draw_map(mut query_scene: Single<(&mut Transform, &mut VelloScene)>) {
|
||||
let (transform, scene) = query_scene.deref_mut();
|
||||
// Reset scene every frame
|
||||
scene.reset();
|
||||
transform.scale = Vec3::ONE * 25.0;
|
||||
|
||||
let mut triangulation: DelaunayTriangulation<_> = DelaunayTriangulation::new();
|
||||
let mut rng = rand::rng();
|
||||
for x in -20..=20 {
|
||||
for y in -10..=10 {
|
||||
let point = Point::new(
|
||||
triangulation.insert(Point2::new(
|
||||
(x as f64) + rng.random_range(-JITTER..=JITTER),
|
||||
(y as f64) + rng.random_range(-JITTER..=JITTER),
|
||||
);
|
||||
scene.fill(
|
||||
peniko::Fill::NonZero,
|
||||
kurbo::Affine::default(),
|
||||
peniko::Color::WHITE,
|
||||
None,
|
||||
&kurbo::Circle::new(point, 0.1),
|
||||
);
|
||||
)).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
transform.scale = Vec3::ONE * 25.0;
|
||||
for edge in triangulation.undirected_voronoi_edges() {
|
||||
match edge.vertices() {
|
||||
[VoronoiVertex::Inner(from), VoronoiVertex::Inner(to)] => {
|
||||
let from = from.circumcenter();
|
||||
let to = to.circumcenter();
|
||||
scene.stroke(
|
||||
&Stroke::new(0.1),
|
||||
kurbo::Affine::default(),
|
||||
peniko::Color::WHITE,
|
||||
None,
|
||||
&kurbo::Line::new(Point::new(from.x, from.y), Point::new(to.x, to.y)),
|
||||
);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue