rust Help

Mandelbrot

实现 曼德博集合

use complex::Complex; mod complex; fn calculate_mandelbrot( max_iters: usize, x_min: f64, y_min: f64, x_max: f64, y_max: f64, width: usize, height: usize, ) -> Vec<Vec<usize>> { let mut rows = Vec::with_capacity(height); for img_y in 0..height { let mut row = Vec::with_capacity(width); for img_x in 0..width { let x_percent = img_x as f64 / width as f64; let y_percent = img_y as f64 / height as f64; let cx = x_min + (x_max - x_min) * x_percent; let cy = y_min + (y_max - y_min) * y_percent; let escaped_at = mandelbrot_at_point(cx, cy, max_iters); row.push(escaped_at); } rows.push(row); } rows } fn mandelbrot_at_point(cx: f64, cy: f64, max_iters: usize) -> usize { let mut z = Complex { re: 0.0, im: 0.0 }; let c = Complex::new(cx, cy); for i in 0..=max_iters { if z.norm() > 2.0 { return i; } z = z * z + c; } max_iters } fn render_mandelbrot(escape_vals: Vec<Vec<usize>>) { for row in escape_vals { let mut line = String::with_capacity(row.len()); for column in row { let val = match column { 0..=2 => ' ', 3..=5 => '.', 6..=10 => '•', 11..=30 => '*', 31..=100 => '+', 101..=200 => 'x', 201..=400 => '$', 401..=700 => '#', _ => '%', }; line.push(val); } println!("{line}"); } } fn main() { let mandelbrot = calculate_mandelbrot(1000, -2.0, -1.0, 1.0, 1.0, 100, 24); render_mandelbrot(mandelbrot); }
Last modified: 25 May 2024