Chaos game: Difference between revisions

Content added Content deleted
(Added Delphi example)
(Updates for modern Rust and some readability improvements)
Line 2,621: Line 2,621:
=={{header|Rust}}==
=={{header|Rust}}==
Dependencies: image, rand
Dependencies: image, rand
<lang rust>extern crate image;
<lang rust>
extern crate image;
extern crate rand;
extern crate rand;


use std::fs::File;
use rand::prelude::*;
use rand::Rng;
use std::f32;
use std::f32;


fn main() {
fn main() {
let max_iterations = 50_000u32;
let max_iterations = 50_000;
let img_side = 800u32;
let img_side = 800;
let tri_size = 400f32;
let tri_size = 400.0;


// Create a new ImgBuf
// Create a new ImgBuf
Line 2,637: Line 2,637:


// Create triangle vertices
// Create triangle vertices
let mut vertices: [[f32; 2]; 3] = [[0f32, 0f32]; 3];
let mut vertices: [[f32; 2]; 3] = [[0.0, 0.0]; 3];
for i in 0..vertices.len() {
for i in 0..vertices.len() {
vertices[i][0] =
vertices[i][0] = (img_side as f32 / 2.0)
(img_side as f32 / 2.) + (tri_size / 2.) * (f32::consts::PI * i as f32 * 2. / 3.).cos();
+ (tri_size / 2.0) * (f32::consts::PI * i as f32 * 2.0 / 3.0).cos();
vertices[i][1] =
vertices[i][1] = (img_side as f32 / 2.0)
(img_side as f32 / 2.) + (tri_size / 2.) * (f32::consts::PI * i as f32 * 2. / 3.).sin();
+ (tri_size / 2.0) * (f32::consts::PI * i as f32 * 2.0 / 3.0).sin();
}
}
for v in &vertices {
for v in &vertices {
imgbuf.put_pixel(v[0] as u32, v[1] as u32, image::Luma([255u8]));
imgbuf.put_pixel(v[0] as u32, v[1] as u32, image::Luma([255u8]));
}
}
println!("Verticies: {:?}", vertices);


// Iterate chaos game
// Iterate chaos game
let mut rng = rand::weak_rng();
let mut rng = rand::thread_rng();
let mut x = img_side as f32 / 2.;
let mut x = img_side as f32 / 2.0;
let mut y = img_side as f32 / 2.;
let mut y = img_side as f32 / 2.0;
for _ in 0..max_iterations {
for _ in 0..max_iterations {
let choice = rng.gen_range(0, vertices.len());
let choice = rng.gen_range(0..vertices.len());
x = (x + vertices[choice][0]) / 2.;
x = (x + vertices[choice][0]) / 2.0;
y = (y + vertices[choice][1]) / 2.;
y = (y + vertices[choice][1]) / 2.0;


imgbuf.put_pixel(x as u32, y as u32, image::Luma([255u8]));
imgbuf.put_pixel(x as u32, y as u32, image::Luma([255u8]));
Line 2,661: Line 2,662:


// Save image
// Save image
let fout = &mut File::create("fractal.png").unwrap();
imgbuf.save("fractal.png").unwrap();
}
image::ImageLuma8(imgbuf).save(fout, image::PNG).unwrap();
}</lang>
</lang>


=={{header|Scala}}==
=={{header|Scala}}==