Chaos game: Difference between revisions
Content added Content deleted
MaiconSoft (talk | contribs) (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> |
<lang rust> |
||
extern crate image; |
|||
extern crate rand; |
extern crate rand; |
||
use |
use rand::prelude::*; |
||
use rand::Rng; |
|||
use std::f32; |
use std::f32; |
||
fn main() { |
fn main() { |
||
let max_iterations = |
let max_iterations = 50_000; |
||
let img_side = |
let img_side = 800; |
||
let tri_size = |
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] = [[ |
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) |
||
+ (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) |
||
+ (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:: |
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 |
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 |
||
imgbuf.save("fractal.png").unwrap(); |
|||
} |
|||
image::ImageLuma8(imgbuf).save(fout, image::PNG).unwrap(); |
|||
</lang> |
|||
=={{header|Scala}}== |
=={{header|Scala}}== |