Show automaton rule by default
This commit is contained in:
parent
fc51055e88
commit
b2211efe52
3 changed files with 21 additions and 8 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
{
|
{
|
||||||
|
"rule": 123,
|
||||||
"feed": false
|
"feed": false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,16 @@
|
||||||
|
|
||||||
#let data = json("data.json")
|
#let data = json("data.json")
|
||||||
|
|
||||||
|
#set par(spacing: 6pt)
|
||||||
|
|
||||||
#image("image.png")
|
#image("image.png")
|
||||||
|
|
||||||
|
#if data.rule != none [
|
||||||
|
Cellular Automaton
|
||||||
|
#h(1fr)
|
||||||
|
Rule #data.rule
|
||||||
|
]
|
||||||
|
|
||||||
#if data.feed {
|
#if data.feed {
|
||||||
lib.feed
|
lib.feed
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,12 +86,12 @@ fn is_interesting(image: &RgbaImage) -> bool {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generate_interesting_image(rows: u32, cols: u32) -> RgbaImage {
|
fn generate_interesting_image(rows: u32, cols: u32) -> (u8, RgbaImage) {
|
||||||
loop {
|
loop {
|
||||||
let rule = rand::random();
|
let rule = rand::random();
|
||||||
let image = generate_image(rows, cols, rule);
|
let image = generate_image(rows, cols, rule);
|
||||||
if is_interesting(&image) {
|
if is_interesting(&image) {
|
||||||
break image;
|
break (rule, image);
|
||||||
}
|
}
|
||||||
println!("Uninteresting automaton, generating a new one");
|
println!("Uninteresting automaton, generating a new one");
|
||||||
}
|
}
|
||||||
|
|
@ -99,11 +99,13 @@ fn generate_interesting_image(rows: u32, cols: u32) -> RgbaImage {
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
struct Data {
|
struct Data {
|
||||||
|
rule: Option<u8>,
|
||||||
feed: bool,
|
feed: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct FormData {
|
pub struct FormData {
|
||||||
|
pub show_rule: Option<bool>,
|
||||||
pub rule: Option<u8>,
|
pub rule: Option<u8>,
|
||||||
pub rows: Option<u32>,
|
pub rows: Option<u32>,
|
||||||
pub scale: Option<u32>,
|
pub scale: Option<u32>,
|
||||||
|
|
@ -111,16 +113,13 @@ pub struct FormData {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn post(server: State<Server>, Form(form): Form<FormData>) -> somehow::Result<()> {
|
pub async fn post(server: State<Server>, Form(form): Form<FormData>) -> somehow::Result<()> {
|
||||||
let data = Data {
|
let show_rule = form.show_rule.unwrap_or(true);
|
||||||
feed: form.feed.unwrap_or(true),
|
|
||||||
};
|
|
||||||
|
|
||||||
let scale = form.scale.unwrap_or(4).clamp(1, 16);
|
let scale = form.scale.unwrap_or(4).clamp(1, 16);
|
||||||
let rows = form.rows.unwrap_or(128 * 4 / scale).clamp(1, 1024 / scale);
|
let rows = form.rows.unwrap_or(128 * 4 / scale).clamp(1, 1024 / scale);
|
||||||
let cols = Printer::WIDTH / scale;
|
let cols = Printer::WIDTH / scale;
|
||||||
|
|
||||||
let image = match form.rule {
|
let (rule, image) = match form.rule {
|
||||||
Some(rule) => generate_image(rows, cols, rule),
|
Some(rule) => (rule, generate_image(rows, cols, rule)),
|
||||||
None => generate_interesting_image(rows, cols),
|
None => generate_interesting_image(rows, cols),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -131,6 +130,11 @@ pub async fn post(server: State<Server>, Form(form): Form<FormData>) -> somehow:
|
||||||
imageops::Nearest,
|
imageops::Nearest,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let data = Data {
|
||||||
|
rule: Some(rule).filter(|_| show_rule),
|
||||||
|
feed: form.feed.unwrap_or(true),
|
||||||
|
};
|
||||||
|
|
||||||
let mut bytes: Vec<u8> = Vec::new();
|
let mut bytes: Vec<u8> = Vec::new();
|
||||||
image
|
image
|
||||||
.write_to(&mut Cursor::new(&mut bytes), ImageFormat::Png)
|
.write_to(&mut Cursor::new(&mut bytes), ImageFormat::Png)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue