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.line_length * theta.sin();
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 = 315.0;
let x = (size as f64 - length)/2.0;
let y = 630.0;
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 hilbert = SierpinskiSquareCurve::new(x, y, 5.0, 0);
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(hilbert.execute(order));
.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>