Skip to content

Instantly share code, notes, and snippets.

@YakoYakoYokuYoku
Last active July 21, 2019 20:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YakoYakoYokuYoku/47b106f01de9fddd2b145f069550c072 to your computer and use it in GitHub Desktop.
Save YakoYakoYokuYoku/47b106f01de9fddd2b145f069550c072 to your computer and use it in GitHub Desktop.
Midpoint circle algorithm implemented in Rust
fn drawcircle(canvas: &mut Canvas<Window>, p: &mut Coordinate<i16>, r: f64, color: Color) {
let mut x = r - 1;
let mut y = 0;
let px = p.x as i16;
let py = p.y as i16;
let mut dx = 1;
let mut dy = 1;
let mut err = dx - (r << 1);
while x >= y {
let _ = canvas.pixel(px + x, py + y, color);
let _ = canvas.pixel(px + y, py + x, color);
let _ = canvas.pixel(px - y, py + x, color);
let _ = canvas.pixel(px - x, py + y, color);
let _ = canvas.pixel(px - x, py - y, color);
let _ = canvas.pixel(px - y, py - x, color);
let _ = canvas.pixel(px + y, py - x, color);
let _ = canvas.pixel(px + x, py - y, color);
if err <= 0 {
y += 1;
err += dy;
dy += 2;
}
if err > 0 {
x -= 1;
dx += 2;
err += dx - (r << 1);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment