Sierpinski square curve: Difference between revisions

m
Rust - reformatted with rustfmt
m (Minor edit to C++ code)
m (Rust - reformatted with rustfmt)
Line 377:
 
struct SierpinskiSquareCurve {
current_x : f64,
current_y : f64,
current_angle : i32,
line_length : f64,
}
 
impl SierpinskiSquareCurve {
fn new(x : f64, y : f64, length : f64, angle : i32) -> SierpinskiSquareCurve {
SierpinskiSquareCurve {
current_x : x,
current_y : y,
current_angle : angle,
line_length : length,
}
}
fn rewrite(order : usize) -> String {
let mut str = String::from("F+XF+F+XF");
for _ in 0..order {
Line 399:
match ch {
'X' => tmp.push_str("XF-F+F-XF+F+XF-F+F-X"),
_ => tmp.push(ch),
}
}
Line 406:
str
}
fn execute(&mut self, order : usize) -> Path {
let mut data = Data::new().move_to((self.current_x, self.current_y));
for ch in SierpinskiSquareCurve::rewrite(order).chars() {
Line 422:
.set("d", data)
}
fn draw_line(&mut self, data : Data) -> Data {
use std::f64::consts::PI;
let theta = (PI * self.current_angle as f64) / 180.0;
Line 429:
data.line_to((self.current_x, self.current_y))
}
fn turn(&mut self, angle : i32) {
self.current_angle = (self.current_angle + angle) % 360;
}
fn save(file : &str, size : usize, length : f64, order : usize) -> std::io::Result<()> {
use svg::node::element::Rectangle;
let x = (size as f64 - length) / 2.0;
let y = length;
let rect = Rectangle::new()
1,777

edits