MCPcopy Create free account
hub / github.com/Notgnoshi/generative / radial_grid

Function radial_grid

tools/grid.rs:524–571  ·  view source on GitHub ↗
(
    num_spokes: usize,
    num_rings: usize,
    ring_separation: f64,
    fill_strategy: FillStrategy,
)

Source from the content-addressed store, hash-verified

522}
523
524fn radial_grid(
525 num_spokes: usize,
526 num_rings: usize,
527 ring_separation: f64,
528 fill_strategy: FillStrategy,
529) -> (Vec<LineString>, Vec<Polygon>) {
530 let mut spokes: Vec<Vec<Coord>> = Vec::new();
531 for _ in 0..num_spokes {
532 let mut spoke = Vec::with_capacity(num_rings + 1);
533 spoke.push(Coord { x: 0.0, y: 0.0 });
534 spokes.push(spoke);
535 }
536 let mut rings: Vec<Vec<Coord>> = Vec::new();
537 for _ in 0..num_rings {
538 rings.push(Vec::with_capacity(num_spokes));
539 }
540
541 let delta_theta = 2.0 * std::f64::consts::PI / num_spokes as f64;
542
543 for (r, ring) in rings.iter_mut().enumerate() {
544 let radius = ring_separation * (r + 1) as f64;
545
546 for (s, spoke) in spokes.iter_mut().enumerate() {
547 let theta = delta_theta * s as f64;
548
549 let new_point = from_polar(radius, theta);
550 spoke.push(new_point);
551 ring.push(new_point);
552
553 fill_in_ring(ring, ring_separation, r, delta_theta, s, fill_strategy);
554 }
555 }
556
557 (
558 spokes.into_iter().map(LineString::new).collect(),
559 rings
560 .into_iter()
561 .filter_map(|r| {
562 if r.len() < 3 {
563 None
564 } else {
565 let ring = LineString::new(r);
566 Some(Polygon::new(ring, Vec::new()))
567 }
568 })
569 .collect(),
570 )
571}
572
573fn main() -> eyre::Result<()> {
574 color_eyre::install()?;

Callers 1

mainFunction · 0.85

Calls 2

fill_in_ringFunction · 0.85
from_polarFunction · 0.70

Tested by

no test coverage detected