diff --git a/imgs/polygons/heptagon.png b/imgs/polygons/heptagon.png index 8757a5c..d41d313 100644 Binary files a/imgs/polygons/heptagon.png and b/imgs/polygons/heptagon.png differ diff --git a/imgs/polygons/hexagon.png b/imgs/polygons/hexagon.png index 6c4f0d7..436203e 100644 Binary files a/imgs/polygons/hexagon.png and b/imgs/polygons/hexagon.png differ diff --git a/imgs/polygons/nonagon.png b/imgs/polygons/nonagon.png index 13dca03..fe48ebe 100644 Binary files a/imgs/polygons/nonagon.png and b/imgs/polygons/nonagon.png differ diff --git a/imgs/polygons/octagon.png b/imgs/polygons/octagon.png index 3170b15..653f43f 100644 Binary files a/imgs/polygons/octagon.png and b/imgs/polygons/octagon.png differ diff --git a/imgs/polygons/pentagon.png b/imgs/polygons/pentagon.png index 547f054..09e9934 100644 Binary files a/imgs/polygons/pentagon.png and b/imgs/polygons/pentagon.png differ diff --git a/imgs/polygons/square.png b/imgs/polygons/square.png index c8d6163..b047d28 100644 Binary files a/imgs/polygons/square.png and b/imgs/polygons/square.png differ diff --git a/imgs/polygons/triangle.png b/imgs/polygons/triangle.png index b7e2e67..fb3c119 100644 Binary files a/imgs/polygons/triangle.png and b/imgs/polygons/triangle.png differ diff --git a/src/main.rs b/src/main.rs index 8073743..986658c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,17 +7,18 @@ fn polygon(corners_number: u32, steps_count: u32, output_path: &'static str) { let mut turtle = Turtle::new(); let default_pos = defaults::position(); - let degree = 360.0 / corners_number as f64; - let circumference = (corners_number * steps_count * defaults::STEP_LENGTH) as f64; - let radius = circumference / (2.0 * std::f64::consts::PI); + let side_length = turtle.step_length() * steps_count; + let pi = std::f64::consts::PI; + let circumscribed_circle_radius = side_length as f64 / (2.0 * (pi / corners_number as f64).sin()); + let vertical_offset = circumscribed_circle_radius * (pi / corners_number as f64).cos(); turtle.set_pos(( - default_pos.0 - (turtle.step_length() * steps_count / 2) as i32, - default_pos.1 - radius as i32 + default_pos.0 - (side_length / 2) as i32, + default_pos.1 - vertical_offset as i32, )); for _ in 0..corners_number { - turtle.forward_right(steps_count, degree); + turtle.forward_right(steps_count, 360.0 / corners_number as f64); } turtle.save(output_path).unwrap(); }