Compare commits

...

5 Commits

Author SHA1 Message Date
bf02a74234 ratio 2026-02-14 14:16:27 +01:00
f0881f96c4 eps 2026-02-14 13:59:46 +01:00
b0ea3a9f44 eps 2026-02-14 13:59:20 +01:00
3a6ee835df readme 2026-02-14 13:22:28 +01:00
5cd8fda72e eps 2026-02-14 13:22:07 +01:00
2 changed files with 18 additions and 12 deletions

View File

@ -6,7 +6,7 @@ Génère pour tous les $(n, m)$ les figures de Chladni associées. Sortie en `.p
Modifier les bornes de $(n, m)$ dans `main.rs`.
### Équation :
$$\cos(n\pi x)\cos(m\pi y) - \cos(m\pi x)\cos(n\pi y)$$
$$\cos(n\pi x)\cos(m\pi y) \pm \cos(m\pi x)\cos(n\pi y)$$
### Lancement
Release pour que ce soit rapide.

View File

@ -1,35 +1,40 @@
use core::f64;
use image::{ImageBuffer, Rgba, RgbaImage};
use std::f64::consts::PI;
use std::fs;
fn chladni(x: f64, y: f64, n: f64, m: f64) -> f64 {
(n * PI * x).cos() * (m * PI * y).cos() - (m * PI * x).cos() * (n * PI * y).cos()
fn chladni(x: f64, y: f64, n: f64, m: f64, eps: f64) -> f64 {
(n * PI * x).cos() * (m * PI * y).cos() + eps * (m * PI * x).cos() * (n * PI * y).cos()
}
fn generate_png(n: u32, m: u32, width: u32, height: u32) {
fn generate_png(n: u32, m: u32, width: u32, height: u32, eps: f64) {
let mut img: RgbaImage = ImageBuffer::new(width, height);
let ratio = width as f64 / height as f64;
for (x, y, pixel) in img.enumerate_pixels_mut() {
// Centrage
let xf = (x as f64 / width as f64) * 2.0 - 1.0;
let xf = ((x as f64 / width as f64) * 2.0 - 1.0) * ratio;
let yf = (y as f64 / height as f64) * 2.0 - 1.0;
let val = chladni(xf, yf, n as f64, m as f64);
let intensity = val.abs();
let val = chladni(xf, yf, n as f64, m as f64, eps);
let bright = (((0.08 - intensity).max(0.0) / 0.08) * 255.0) as u8;
let bright = if val.abs() < 0.08 { 255 } else { 0 }; // Sans variation d'alpha
// let intensity = val.abs();
// let bright = (((0.08 - intensity).max(0.0) / 0.08) * 255.0) as u8;
*pixel = Rgba([0, 0, 0, bright]);
// *pixel = Rgb([brigh, brigh, brigh]);
}
let filename = format!("out/chladni_{}_{}.png", n, m);
let filename = format!("out/chladni_{}_{}_{}.png", n, m, eps);
img.save(&filename).unwrap();
println!("{}", filename);
}
fn main() {
let width = 1000;
let height = 1000;
let width = 1920;
let height = 1080;
let max_n = 6;
let max_m = 6;
@ -37,7 +42,8 @@ fn main() {
for n in 1..max_n {
for m in 1..max_m {
generate_png(n, m, width, height);
generate_png(n, m, width, height, -1.0);
generate_png(n, m, width, height, 1.0);
}
}
}