
Task
Generate and draw a Julia set.




Related tasks
   Mandelbrot Set


extern crate image;
 
use image::{ImageBuffer, Pixel, Rgb};
 
fn main() {
    // 4 : 3 ratio is nice
    let width = 8000;
    let height = 6000;
 
    let mut img = ImageBuffer::new(width as u32, height as u32);
 
    // constants to tweak for appearance
    let cx = -0.9;
    let cy = 0.27015;
    let iterations = 110;
 
    for x in 0..width {
        for y in 0..height {
            let inner_height = height as f32;
            let inner_width = width as f32;
            let inner_y = y as f32;
            let inner_x = x as f32;
 
            let mut zx = 3.0 * (inner_x - 0.5 * inner_width) / (inner_width);
            let mut zy = 2.0 * (inner_y - 0.5 * inner_height) / (inner_height);
 
            let mut i = iterations;
 
            while zx * zx + zy * zy < 4.0 && i > 1 {
                let tmp = zx * zx - zy * zy + cx;
                zy = 2.0 * zx * zy + cy;
                zx = tmp;
                i -= 1;
            }
 
            // guesswork to make the rgb color values look okay
            let r = (i << 3) as u8;
            let g = (i << 5) as u8;
            let b = (i << 4) as u8;
            let pixel = Rgb::from_channels(r, g, b, 0);
            img.put_pixel(x as u32, y as u32, pixel);
        }
    }
 
    let _ = img.save("output.png");
 
}