concentric_circles

Crates.ioconcentric_circles
lib.rsconcentric_circles
version0.1.0
created_at2025-06-01 16:34:59.497234+00
updated_at2025-06-01 16:34:59.497234+00
descriptionEfficient generation and iteration of concentric circle perimeters using Bresenham's algorithm.
homepagehttps://github.com/pic16f877ccs/concentric_circles
repositoryhttps://github.com/pic16f877ccs/concentric_circles
max_upload_size
id1697301
size111,354
(pic16f877ccs)

documentation

README

concentric_circles

A Rust crate for generating points on concentric circles.

Overview

concentric_circles provides iterators and adapters for generating coordinates of points distributed along multiple concentric circles. It is designed to be lightweight, efficient, and compatible with no_std environments.

Visual Examples

Below are images demonstrating how ConcentricCircles renders. These were generated by example programs in the examples folder.

Run them with cargo run --example example_name.

Features

  • Generate points on multiple circles with customizable radii and point counts
  • Iterator-based API for ergonomic and efficient usage
  • no_std support (no dependency on the Rust standard library)
  • Flexible adapters for various point generation strategies

Usage

Add this to your Cargo.toml:

[dependencies]
concentric_circles = "0.1"

Basic usage:

use concentric_circles::{ConcentricCirclesAdapters, ConcentricCircles,  ScalingU32};
use concentric_circles::sum_circles_points;

let inner_radius = 100;
let outer_radius = 500;
let x_offset = outer_radius as i32;
let y_offset = outer_radius as i32;
let circles_points = sum_circles_points(inner_radius, outer_radius).unwrap();
let mut scaling_iter = ScalingU32::new(circles_points as u32);
let mut value = 0;

let iterator = ConcentricCircles::new(inner_radius, outer_radius)
     .to_image_coordinates(x_offset, y_offset)
     .map(|(x, y)| {
         value = scaling_iter.next().unwrap();
         (x, y, [255 - value, 255 - value, 255 - value, 255])
     });

License

  • MIT license
Commit count: 1

cargo fmt