Sierpinski Gasket #2
@@ -3,13 +3,13 @@ use enkou_shaders::Coefficients2;
|
|||||||
use enkou_shaders::camera::Camera;
|
use enkou_shaders::camera::Camera;
|
||||||
use enkou_shaders::chaos_game::ChaosGame;
|
use enkou_shaders::chaos_game::ChaosGame;
|
||||||
use enkou_shaders::transform::Transform;
|
use enkou_shaders::transform::Transform;
|
||||||
use glam::{Affine2, Vec2, uvec2, UVec2};
|
use glam::{Affine2, UVec2, Vec2, uvec2};
|
||||||
use image::{GrayImage, Luma};
|
use image::{GrayImage, Luma};
|
||||||
use rand::SeedableRng;
|
use rand::SeedableRng;
|
||||||
use rand_xoshiro::Xoshiro256StarStar;
|
use rand_xoshiro::Xoshiro256StarStar;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
use tempfile::{NamedTempFile};
|
use tempfile::NamedTempFile;
|
||||||
|
|
||||||
const ITERATIONS: u32 = 50_000;
|
const ITERATIONS: u32 = 50_000;
|
||||||
const ITERATIONS_DISCARD: u32 = 20;
|
const ITERATIONS_DISCARD: u32 = 20;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use glam::{vec2, Vec2};
|
use crate::transform::Transform;
|
||||||
|
use glam::{Vec2, vec2};
|
||||||
use rand::distr::{Distribution, StandardUniform};
|
use rand::distr::{Distribution, StandardUniform};
|
||||||
use rand::{Rng, RngExt};
|
use rand::{Rng, RngExt};
|
||||||
use crate::transform::Transform;
|
|
||||||
|
|
||||||
struct BiUnit;
|
struct BiUnit;
|
||||||
impl Distribution<f32> for BiUnit {
|
impl Distribution<f32> for BiUnit {
|
||||||
@@ -52,7 +52,12 @@ pub struct ChaosGame<'a, R: Rng> {
|
|||||||
impl<'a, R: Rng> ChaosGame<'a, R> {
|
impl<'a, R: Rng> ChaosGame<'a, R> {
|
||||||
pub fn new(rng: &'a mut R, transforms: &'a [Transform], weights: &'a [f32]) -> Self {
|
pub fn new(rng: &'a mut R, transforms: &'a [Transform], weights: &'a [f32]) -> Self {
|
||||||
let current_point = vec2(rng.sample(BiUnit), rng.sample(BiUnit));
|
let current_point = vec2(rng.sample(BiUnit), rng.sample(BiUnit));
|
||||||
ChaosGame { current_point, rng, transforms, weights }
|
ChaosGame {
|
||||||
|
current_point,
|
||||||
|
rng,
|
||||||
|
transforms,
|
||||||
|
weights,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +65,8 @@ impl<'a, R: Rng> Iterator for ChaosGame<'a, R> {
|
|||||||
type Item = Vec2;
|
type Item = Vec2;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
let (next_point, _) = step_chaos_game(self.current_point, self.rng, self.transforms, self.weights);
|
let (next_point, _) =
|
||||||
|
step_chaos_game(self.current_point, self.rng, self.transforms, self.weights);
|
||||||
self.current_point = next_point;
|
self.current_point = next_point;
|
||||||
|
|
||||||
Some(next_point)
|
Some(next_point)
|
||||||
|
|||||||
Reference in New Issue
Block a user