Sierpinski pentagon: Difference between revisions
Content added Content deleted
m (Output is vertically centred, use polygon instead of path) |
m (Output is vertically centred, use polygon instead of path) |
||
Line 1,141: | Line 1,141: | ||
fn sierpinski_pentagon(mut document : svg::Document, mut x : f64, mut y : f64, |
fn sierpinski_pentagon(mut document : svg::Document, mut x : f64, mut y : f64, |
||
mut side : f64, order: usize) -> svg::Document { |
mut side : f64, order: usize) -> svg::Document { |
||
use svg::node::element:: |
use svg::node::element::Polygon; |
||
use svg::node::element::path::Data; |
|||
use std::f64::consts::PI; |
use std::f64::consts::PI; |
||
Line 1,150: | Line 1,149: | ||
if order == 1 { |
if order == 1 { |
||
let mut |
let mut points = Vec::new(); |
||
points.push((x, y)); |
|||
for _ in 0..5 { |
for _ in 0..5 { |
||
x += angle.cos() * side; |
x += angle.cos() * side; |
||
y -= angle.sin() * side; |
y -= angle.sin() * side; |
||
angle += degrees72; |
angle += degrees72; |
||
points.push((x, y)); |
|||
} |
} |
||
let polygon = Polygon::new() |
|||
let path = Path::new() |
|||
.set("fill", "blue") |
.set("fill", "blue") |
||
.set("stroke", "black") |
.set("stroke", "black") |
||
.set("stroke-width", "1") |
.set("stroke-width", "1") |
||
.set(" |
.set("points", points); |
||
document = document.add( |
document = document.add(polygon); |
||
} else { |
} else { |
||
side *= scale_factor; |
side *= scale_factor; |
||
Line 1,186: | Line 1,184: | ||
let radius = (size as f64)/2.0 - 2.0 * margin; |
let radius = (size as f64)/2.0 - 2.0 * margin; |
||
let side = radius * (0.2 * PI).sin() * 2.0; |
let side = radius * (0.2 * PI).sin() * 2.0; |
||
let height = side * ((0.2 * PI).sin() + (0.4 * PI).sin()); |
|||
let x = (size as f64)/2.0; |
let x = (size as f64)/2.0; |
||
let y = |
let y = (size as f64 - height)/2.0; |
||
let rect = Rectangle::new() |
let rect = Rectangle::new() |