Sierpinski square curve: Difference between revisions
Content added Content deleted
(Added Rust solution) |
m (Minor edit) |
||
Line 426: | Line 426: | ||
let theta = (PI * self.current_angle as f64) / 180.0; |
let theta = (PI * self.current_angle as f64) / 180.0; |
||
self.current_x += self.line_length * theta.cos(); |
self.current_x += self.line_length * theta.cos(); |
||
self.current_y |
self.current_y += self.line_length * theta.sin(); |
||
data.line_to((self.current_x, self.current_y)) |
data.line_to((self.current_x, self.current_y)) |
||
} |
} |
||
Line 432: | Line 432: | ||
self.current_angle = (self.current_angle + angle) % 360; |
self.current_angle = (self.current_angle + angle) % 360; |
||
} |
} |
||
fn save(file : &str, size : usize, order : usize) -> std::io::Result<()> { |
fn save(file : &str, size : usize, length : f64, order : usize) -> std::io::Result<()> { |
||
use svg::node::element::Rectangle; |
use svg::node::element::Rectangle; |
||
let x = |
let x = (size as f64 - length)/2.0; |
||
let y = |
let y = length; |
||
let rect = Rectangle::new() |
let rect = Rectangle::new() |
||
.set("width", "100%") |
.set("width", "100%") |
||
.set("height", "100%") |
.set("height", "100%") |
||
.set("fill", "white"); |
.set("fill", "white"); |
||
let mut |
let mut s = SierpinskiSquareCurve::new(x, y, length, 0); |
||
let document = svg::Document::new() |
let document = svg::Document::new() |
||
.set("width", size) |
.set("width", size) |
||
.set("height", size) |
.set("height", size) |
||
.add(rect) |
.add(rect) |
||
.add( |
.add(s.execute(order)); |
||
svg::save(file, &document) |
svg::save(file, &document) |
||
} |
} |
||
Line 451: | Line 451: | ||
fn main() { |
fn main() { |
||
SierpinskiSquareCurve::save("sierpinski_square_curve.svg", 635, 5).unwrap(); |
SierpinskiSquareCurve::save("sierpinski_square_curve.svg", 635, 5.0, 5).unwrap(); |
||
}</lang> |
}</lang> |
||