Skip to content

Commit 9003f2a

Browse files
Update examples
1 parent c8e8ecf commit 9003f2a

6 files changed

Lines changed: 212 additions & 20 deletions

File tree

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Explorateur de Fractales
1+
# Explorateur de Fractales
22

3-
Application GitHub Pages qui rend 51 fractales en **WebAssembly**, dont le code de
3+
Application GitHub Pages qui rend 52 fractales en **WebAssembly**, dont le code de
44
calcul est entièrement écrit en **français** grâce au langage
55
[multilingual](https://github.com/johnsamuelwrites/multilingual).
66

@@ -28,7 +28,7 @@ françaises** dans `src/*.ml`.
2828
| Évasion | Mandelbrot, Julia, Burning Ship, Tricorn, Multibrot (n=3…8), Celtic, Buffalo, Perpendicular Burning Ship, Heart, Perpendicular Mandelbrot, Perpendicular Celtic, Duck, Buddhabrot |
2929
| Dynamique | Newton (z³−1), Phoenix, Lyapunov, Lyapunov multiséquence, Bassin de Newton généralisé, Orbitale de Nova, Collatz complexe, Attracteur de Clifford, Attracteur de Peter de Jong, Attracteur d'Ikeda, Attracteur de Hénon |
3030
| IFS | Barnsley (fougère), Sierpinski, Tapis de Sierpinski |
31-
| L-système | Koch (flocon de neige), Dragon de Heighway, Arbre de Pythagore |
31+
| L-système | Koch (flocon de neige), Dragon de Heighway, Joint apollonien, Arbre de Pythagore |
3232
| Magnétiques | Magnet I, Magnet II, Magnet III, Lambda (logistique complexe), Lambda cubique, Magnet cosinus, Magnet sinus, Nova magnétique |
3333

3434
---
@@ -336,3 +336,4 @@ Si vous modifiez le comportement visible, ajoutez ou retirez une fractale, ou ch
336336
## Licence
337337

338338
MIT — voir `LICENSE`.
339+

public/js/renderer.js

Lines changed: 87 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ const VIEW_PRESETS = {
7878
dragon_heighway: { centerX: 0.2, centerY: 0.0, span: 2.8 },
7979
dragon_curve: { centerX: 0.2, centerY: 0.0, span: 2.8 },
8080
cantor_set: { centerX: 0.0, centerY: 0.0, span: 2.6 },
81-
apollonian_gasket: { centerX: 0.0, centerY: 0.05, span: 2.4 },
81+
triangle_de_cercles_recursifs: { centerX: 0.0, centerY: 0.05, span: 2.4 },
82+
apollonian_gasket: { centerX: 0.0, centerY: 0.0, span: 2.2 },
8283
t_square_fractal: { centerX: 0.0, centerY: 0.0, span: 2.8 },
8384
h_fractal: { centerX: 0.0, centerY: 0.0, span: 2.8 },
8485
hilbert_curve: { centerX: 0.0, centerY: 0.0, span: 2.3 },
@@ -103,7 +104,7 @@ function getMultibrotPreset(power) {
103104
}
104105

105106
const POINT_FRACTALS = new Set(["barnsley", "sierpinski", "tapis_sierpinski", "menger_sponge", "mandelbulb", "tetraedre_sierpinski", "julia_quaternion", "mandelbox", "vicsek_fractal", "lichtenberg_figures", "attracteur_de_clifford", "attracteur_de_peter_de_jong", "attracteur_ikeda", "attracteur_de_henon", "lorenz_attractor", "feigenbaum_tree"]);
106-
const LINE_FRACTALS = new Set(["koch", "dragon_heighway", "dragon_curve", "cantor_set", "apollonian_gasket", "t_square_fractal", "h_fractal", "hilbert_curve", "peano_curve", "arbre_pythagore"]);
107+
const LINE_FRACTALS = new Set(["koch", "dragon_heighway", "dragon_curve", "cantor_set", "triangle_de_cercles_recursifs", "apollonian_gasket", "t_square_fractal", "h_fractal", "hilbert_curve", "peano_curve", "arbre_pythagore"]);
107108

108109
/** Fonctions fractales exportées par WASM */
109110
// Les fractales 3D en JS pur (julia_quaternion, mandelbox) sont toujours disponibles.
@@ -323,7 +324,8 @@ const FRACTAL_FAMILIES = [
323324
["dragon_heighway", "Dragon de Heighway"],
324325
["dragon_curve", "Courbe du dragon"],
325326
["cantor_set", "Ensemble de Cantor"],
326-
["apollonian_gasket", "Joint d'Apollonius"],
327+
["triangle_de_cercles_recursifs", "Triangle de cercles récursifs"],
328+
["apollonian_gasket", "Joint apollonien"],
327329
["t_square_fractal", "Fractale en T"],
328330
["h_fractal", "Fractale en H"],
329331
["hilbert_curve", "Courbe de Hilbert"],
@@ -1162,13 +1164,47 @@ function dessinerCercle(ctxCible, x, y, rayon) {
11621164
ctxCible.arc(x, y, rayon, 0, Math.PI * 2);
11631165
}
11641166

1165-
function dessinerApollonien(ctxCible, x, y, rayon, niveau) {
1167+
function dessinerTriangleCerclesRecursifs(ctxCible, x, y, rayon, niveau) {
11661168
if (niveau <= 0 || rayon < 3) return;
11671169
dessinerCercle(ctxCible, x, y, rayon);
11681170
const r = rayon / 2;
1169-
dessinerApollonien(ctxCible, x - r, y, r, niveau - 1);
1170-
dessinerApollonien(ctxCible, x + r, y, r, niveau - 1);
1171-
dessinerApollonien(ctxCible, x, y - r * 0.866, r, niveau - 1);
1171+
dessinerTriangleCerclesRecursifs(ctxCible, x - r, y, r, niveau - 1);
1172+
dessinerTriangleCerclesRecursifs(ctxCible, x + r, y, r, niveau - 1);
1173+
dessinerTriangleCerclesRecursifs(ctxCible, x, y - r * 0.866, r, niveau - 1);
1174+
}
1175+
1176+
function creerConfigurationApollonienne() {
1177+
const rayonExterieur = 1.0;
1178+
const rayonInterieur = rayonExterieur / (1.0 + 2.0 / Math.sqrt(3));
1179+
const distanceCentre = rayonExterieur - rayonInterieur;
1180+
const angles = [Math.PI / 2, Math.PI / 2 + (2 * Math.PI) / 3, Math.PI / 2 + (4 * Math.PI) / 3];
1181+
const internes = angles.map((angle) => ({
1182+
x: Math.cos(angle) * distanceCentre,
1183+
y: Math.sin(angle) * distanceCentre,
1184+
k: 1 / rayonInterieur,
1185+
}));
1186+
return [{ x: 0, y: 0, k: -1 / rayonExterieur }, ...internes];
1187+
}
1188+
1189+
function refleterCercleApollonien(configuration, index) {
1190+
const autres = [];
1191+
for (let i = 0; i < configuration.length; i++) {
1192+
if (i !== index) autres.push(configuration[i]);
1193+
}
1194+
const cercle = configuration[index];
1195+
const kn = 2 * (autres[0].k + autres[1].k + autres[2].k) - cercle.k;
1196+
const wx = 2 * (autres[0].k * autres[0].x + autres[1].k * autres[1].x + autres[2].k * autres[2].x) - cercle.k * cercle.x;
1197+
const wy = 2 * (autres[0].k * autres[0].y + autres[1].k * autres[1].y + autres[2].k * autres[2].y) - cercle.k * cercle.y;
1198+
return { x: wx / kn, y: wy / kn, k: kn };
1199+
}
1200+
1201+
function cleCercleApollonien(cercle) {
1202+
const rayon = 1 / Math.abs(cercle.k);
1203+
return [
1204+
Math.round(cercle.x * 1e6),
1205+
Math.round(cercle.y * 1e6),
1206+
Math.round(rayon * 1e6),
1207+
].join(":");
11721208
}
11731209

11741210
function creerTraceurMonde(ctxCible, w, h, vueCible) {
@@ -1242,13 +1278,46 @@ function dessinerCercleMonde(traceur, x, y, rayon, segments = 40) {
12421278
}
12431279
}
12441280

1245-
function dessinerApollonienMonde(traceur, x, y, rayon, niveau) {
1281+
function dessinerTriangleCerclesRecursifsMonde(traceur, x, y, rayon, niveau) {
12461282
if (niveau <= 0 || rayon < 0.01) return;
12471283
dessinerCercleMonde(traceur, x, y, rayon);
12481284
const r = rayon / 2;
1249-
dessinerApollonienMonde(traceur, x - r, y, r, niveau - 1);
1250-
dessinerApollonienMonde(traceur, x + r, y, r, niveau - 1);
1251-
dessinerApollonienMonde(traceur, x, y - r * 0.866, r, niveau - 1);
1285+
dessinerTriangleCerclesRecursifsMonde(traceur, x - r, y, r, niveau - 1);
1286+
dessinerTriangleCerclesRecursifsMonde(traceur, x + r, y, r, niveau - 1);
1287+
dessinerTriangleCerclesRecursifsMonde(traceur, x, y - r * 0.866, r, niveau - 1);
1288+
}
1289+
1290+
function dessinerJointApolloniusMonde(traceur, niveauMax) {
1291+
const configurationInitiale = creerConfigurationApollonienne();
1292+
const dejaDessines = new Set();
1293+
1294+
function tracerCercle(cercle) {
1295+
const rayon = 1 / Math.abs(cercle.k);
1296+
if (!isFinite(rayon) || rayon < 0.008) return false;
1297+
const cle = cleCercleApollonien(cercle);
1298+
if (dejaDessines.has(cle)) return false;
1299+
dejaDessines.add(cle);
1300+
dessinerCercleMonde(traceur, cercle.x, cercle.y, rayon, Math.max(28, Math.min(88, Math.floor(30 + rayon * 32))));
1301+
return true;
1302+
}
1303+
1304+
function explorer(configuration, niveau, precedent) {
1305+
if (niveau <= 0) return;
1306+
for (let i = 0; i < 4; i++) {
1307+
if (i === precedent) continue;
1308+
const cercle = refleterCercleApollonien(configuration, i);
1309+
if (!isFinite(cercle.x) || !isFinite(cercle.y) || !isFinite(cercle.k) || Math.abs(cercle.k) < 1e-9) continue;
1310+
tracerCercle(cercle);
1311+
const suivante = configuration.slice();
1312+
suivante[i] = cercle;
1313+
explorer(suivante, niveau - 1, i);
1314+
}
1315+
}
1316+
1317+
for (const cercle of configurationInitiale) {
1318+
tracerCercle(cercle);
1319+
}
1320+
explorer(configurationInitiale, niveauMax, -1);
12521321
}
12531322

12541323
function dessinerCommandeLineaireMonde(traceur, commands, x, y, angle, segment, rotation) {
@@ -1463,8 +1532,10 @@ function dessinerFractaleLineaire(ctxCible, w, h, vueCible, renduParams) {
14631532
dessinerCommandeLineaireMonde(traceur, commands, -0.6, 0.0, 0.0, 1.7 / Math.pow(Math.SQRT2, n), Math.PI / 2);
14641533
} else if (renduParams.fractal === "cantor_set") {
14651534
dessinerCantorMonde(traceur, renduParams.maxIter);
1535+
} else if (renduParams.fractal === "triangle_de_cercles_recursifs") {
1536+
dessinerTriangleCerclesRecursifsMonde(traceur, 0.0, 0.55, 0.58, Math.max(3, Math.min(6, Math.floor(renduParams.maxIter / 80) + 2)));
14661537
} else if (renduParams.fractal === "apollonian_gasket") {
1467-
dessinerApollonienMonde(traceur, 0.0, 0.55, 0.58, Math.max(3, Math.min(6, Math.floor(renduParams.maxIter / 80) + 2)));
1538+
dessinerJointApolloniusMonde(traceur, Math.max(3, Math.min(7, Math.floor(renduParams.maxIter / 72) + 2)));
14681539
} else if (renduParams.fractal === "t_square_fractal") {
14691540
dessinerTSquareMonde(traceur, 0.0, 0.0, 1.2, Math.max(3, Math.min(6, Math.floor(renduParams.maxIter / 80) + 2)));
14701541
} else if (renduParams.fractal === "h_fractal") {
@@ -1818,6 +1889,7 @@ async function loadWasm() {
18181889
dragon_heighway: typeof exports.dragon_heighway === "function" ? exports.dragon_heighway : null,
18191890
dragon_curve: typeof exports.dragon_curve === "function" ? exports.dragon_curve : null,
18201891
cantor_set: typeof exports.cantor_set === "function" ? exports.cantor_set : null,
1892+
triangle_de_cercles_recursifs: typeof exports.triangle_de_cercles_recursifs === "function" ? exports.triangle_de_cercles_recursifs : null,
18211893
apollonian_gasket: typeof exports.apollonian_gasket === "function" ? exports.apollonian_gasket : null,
18221894
t_square_fractal: typeof exports.t_square_fractal === "function" ? exports.t_square_fractal : null,
18231895
h_fractal: typeof exports.h_fractal === "function" ? exports.h_fractal : null,
@@ -2566,6 +2638,7 @@ const FRACTAL_SOURCE_MAP = {
25662638
dragon_heighway: "fractales_lsystem",
25672639
dragon_curve: "fractales_lsystem",
25682640
cantor_set: "fractales_lsystem",
2641+
triangle_de_cercles_recursifs: "fractales_lsystem",
25692642
apollonian_gasket: "fractales_lsystem",
25702643
t_square_fractal: "fractales_lsystem",
25712644
h_fractal: "fractales_lsystem",
@@ -2684,7 +2757,7 @@ function highlightFrench(code) {
26842757
function applyFrenchTokens(line, kwRe) {
26852758
return line
26862759
.replace(kwRe, `<span class="kw">$1</span>`)
2687-
.replace(/\b(mandelbrot|mandelbrot_classe|julia|burning_ship|tricorn|multibrot|celtic|buffalo|perpendicular_burning_ship|heart|perpendicular_mandelbrot|perpendicular_celtic|duck|buddhabrot|newton|phoenix|lyapunov|lyapunov_multisequence|bassin_newton_generalise|orbitale_de_nova|collatz_complexe|attracteur_de_clifford|attracteur_de_peter_de_jong|attracteur_ikeda|attracteur_de_henon|lorenz_attractor|feigenbaum_tree|barnsley|sierpinski|tapis_sierpinski|menger_sponge|mandelbulb|vicsek_fractal|lichtenberg_figures|koch|dragon_heighway|dragon_curve|cantor_set|apollonian_gasket|t_square_fractal|h_fractal|hilbert_curve|peano_curve|arbre_pythagore|magnet1|magnet2|magnet3|lambda_fractale|lambda_cubique|magnet_cosinus|magnet_sinus|nova_magnetique|barnsley_etape|sierpinski_etape|menger_etape|vicsek_etape|projeter_menger_x|projeter_menger_y|projeter_lorenz_x|projeter_lorenz_y|etapeTapisSierpinski|etapeAttracteurClifford|etapeAttracteurPeterDeJong|etapeAttracteurIkeda|etapeAttracteurHenon|etapeLorenzAttractor|etapeMengerSponge|etapeVicsekFractal|etapeLichtenberg|etapeMandelbulb|projeterMengerSponge|projeterLorenzAttractor|projeterMandelbulb|koch_generer|genererDragonHeighway|genererHilbert|genererPeano|norme_carre|complexe_diviser_re|complexe_diviser_im|iterer|etape|racine_approx|abs_val|abs_dynamique|abs_koch|remplacer|regle|generer|sinus_dynamique|cosinus_dynamique|sinus_magnetique|cosinus_magnetique)\b/g, `<span class="fn">$1</span>`)
2760+
.replace(/\b(mandelbrot|mandelbrot_classe|julia|burning_ship|tricorn|multibrot|celtic|buffalo|perpendicular_burning_ship|heart|perpendicular_mandelbrot|perpendicular_celtic|duck|buddhabrot|newton|phoenix|lyapunov|lyapunov_multisequence|bassin_newton_generalise|orbitale_de_nova|collatz_complexe|attracteur_de_clifford|attracteur_de_peter_de_jong|attracteur_ikeda|attracteur_de_henon|lorenz_attractor|feigenbaum_tree|barnsley|sierpinski|tapis_sierpinski|menger_sponge|mandelbulb|vicsek_fractal|lichtenberg_figures|koch|dragon_heighway|dragon_curve|cantor_set|triangle_de_cercles_recursifs|apollonian_gasket|t_square_fractal|h_fractal|hilbert_curve|peano_curve|arbre_pythagore|magnet1|magnet2|magnet3|lambda_fractale|lambda_cubique|magnet_cosinus|magnet_sinus|nova_magnetique|barnsley_etape|sierpinski_etape|menger_etape|vicsek_etape|projeter_menger_x|projeter_menger_y|projeter_lorenz_x|projeter_lorenz_y|etapeTapisSierpinski|etapeAttracteurClifford|etapeAttracteurPeterDeJong|etapeAttracteurIkeda|etapeAttracteurHenon|etapeLorenzAttractor|etapeMengerSponge|etapeVicsekFractal|etapeLichtenberg|etapeMandelbulb|projeterMengerSponge|projeterLorenzAttractor|projeterMandelbulb|koch_generer|genererDragonHeighway|genererHilbert|genererPeano|norme_carre|complexe_diviser_re|complexe_diviser_im|iterer|etape|racine_approx|abs_val|abs_dynamique|abs_koch|remplacer|regle|generer|sinus_dynamique|cosinus_dynamique|sinus_magnetique|cosinus_magnetique)\b/g, `<span class="fn">$1</span>`)
26882761
.replace(/\b(\d+\.\d+|\d+)\b/g, `<span class="num">$1</span>`)
26892762
.replace(/\b(cx|cy|zx|zy|c_re|c_im|max_iter|x|y|iter|xtemp|ax|ay|x2|y2|fx|fy|dfx|dfy|denom|delta_x|delta_y|x_prec|y_prec|xtemp|ytemp|d1|d2|d3|d4|puissance|rn|angle|r|theta|nx|ny|a|b|niveau|echelle|dist|score|somme|exposant|parametre)\b/g, `<span class="param">$1</span>`);
26902763
}
@@ -2707,7 +2780,7 @@ function highlightPython(code) {
27072780
function applyPyTokens(line, kwRe) {
27082781
return line
27092782
.replace(kwRe, `<span class="kw">$1</span>`)
2710-
.replace(/\b(mandelbrot|mandelbrot_classe|julia|burning_ship|tricorn|multibrot|celtic|buffalo|perpendicular_burning_ship|heart|perpendicular_mandelbrot|perpendicular_celtic|duck|buddhabrot|newton|phoenix|lyapunov|lyapunov_multisequence|bassin_newton_generalise|orbitale_de_nova|collatz_complexe|attracteur_de_clifford|attracteur_de_peter_de_jong|attracteur_ikeda|attracteur_de_henon|lorenz_attractor|feigenbaum_tree|barnsley|sierpinski|tapis_sierpinski|menger_sponge|mandelbulb|vicsek_fractal|lichtenberg_figures|koch|dragon_heighway|dragon_curve|cantor_set|apollonian_gasket|t_square_fractal|h_fractal|hilbert_curve|peano_curve|arbre_pythagore|magnet1|magnet2|magnet3|lambda_fractale|lambda_cubique|magnet_cosinus|magnet_sinus|nova_magnetique|barnsley_etape|sierpinski_etape|menger_etape|vicsek_etape|projeter_menger_x|projeter_menger_y|projeter_lorenz_x|projeter_lorenz_y|koch_generer|genererDragonHeighway|genererHilbert|genererPeano|norme_carre|complexe_diviser_re|complexe_diviser_im|iterer|etape|racine_approx|abs_val|remplacer|regle|generer|sinus_dynamique|cosinus_dynamique|sinus_magnetique|cosinus_magnetique)\b/g, `<span class="fn">$1</span>`)
2783+
.replace(/\b(mandelbrot|mandelbrot_classe|julia|burning_ship|tricorn|multibrot|celtic|buffalo|perpendicular_burning_ship|heart|perpendicular_mandelbrot|perpendicular_celtic|duck|buddhabrot|newton|phoenix|lyapunov|lyapunov_multisequence|bassin_newton_generalise|orbitale_de_nova|collatz_complexe|attracteur_de_clifford|attracteur_de_peter_de_jong|attracteur_ikeda|attracteur_de_henon|lorenz_attractor|feigenbaum_tree|barnsley|sierpinski|tapis_sierpinski|menger_sponge|mandelbulb|vicsek_fractal|lichtenberg_figures|koch|dragon_heighway|dragon_curve|cantor_set|triangle_de_cercles_recursifs|apollonian_gasket|t_square_fractal|h_fractal|hilbert_curve|peano_curve|arbre_pythagore|magnet1|magnet2|magnet3|lambda_fractale|lambda_cubique|magnet_cosinus|magnet_sinus|nova_magnetique|barnsley_etape|sierpinski_etape|menger_etape|vicsek_etape|projeter_menger_x|projeter_menger_y|projeter_lorenz_x|projeter_lorenz_y|koch_generer|genererDragonHeighway|genererHilbert|genererPeano|norme_carre|complexe_diviser_re|complexe_diviser_im|iterer|etape|racine_approx|abs_val|remplacer|regle|generer|sinus_dynamique|cosinus_dynamique|sinus_magnetique|cosinus_magnetique)\b/g, `<span class="fn">$1</span>`)
27112784
.replace(/\b(\d+\.\d+|\d+)\b/g, `<span class="num">$1</span>`)
27122785
.replace(/\b(cx|cy|zx|zy|c_re|c_im|max_iter|x|y|iter|xtemp|ax|ay|x2|y2|fx|fy|dfx|dfy|denom|delta_x|delta_y|x_prec|y_prec|xtemp|ytemp|d1|d2|d3|d4|puissance|rn|angle|r|theta|nx|ny|a|b|niveau|echelle|dist|score|somme|exposant|parametre)\b/g, `<span class="param">$1</span>`);
27132786
}

scripts/compile_wasm.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ déf main():
220220
afficher(f" WAT ecrit : {SORTIE_WAT.relative_to(RACINE)}")
221221
afficher(f" WASM ecrit: {SORTIE_WASM.relative_to(RACINE)} ({longueur(octets_wasm):,} octets)")
222222
223-
soit exports_requises = ["mandelbrot", "julia", "burning_ship", "tricorn", "multibrot", "celtic", "buffalo", "perpendicular_burning_ship", "heart", "perpendicular_mandelbrot", "perpendicular_celtic", "duck", "buddhabrot", "newton", "phoenix", "lyapunov", "lyapunov_multisequence", "bassin_newton_generalise", "orbitale_de_nova", "collatz_complexe", "attracteur_de_clifford", "attracteur_de_peter_de_jong", "attracteur_ikeda", "attracteur_de_henon", "lorenz_attractor", "feigenbaum_tree", "barnsley", "sierpinski", "tapis_sierpinski", "menger_sponge", "mandelbulb", "tetraedre_sierpinski", "julia_quaternion", "mandelbox", "vicsek_fractal", "lichtenberg_figures", "koch", "dragon_heighway", "dragon_curve", "cantor_set", "apollonian_gasket", "t_square_fractal", "h_fractal", "hilbert_curve", "peano_curve", "arbre_pythagore", "magnet1", "magnet2", "magnet3", "lambda_fractale", "lambda_cubique", "magnet_cosinus", "magnet_sinus", "nova_magnetique", "interpoler_lineaire", "interpoler_logarithmique", "ajuster_iterations_export", "mandelbrot_classe"]
223+
soit exports_requises = ["mandelbrot", "julia", "burning_ship", "tricorn", "multibrot", "celtic", "buffalo", "perpendicular_burning_ship", "heart", "perpendicular_mandelbrot", "perpendicular_celtic", "duck", "buddhabrot", "newton", "phoenix", "lyapunov", "lyapunov_multisequence", "bassin_newton_generalise", "orbitale_de_nova", "collatz_complexe", "attracteur_de_clifford", "attracteur_de_peter_de_jong", "attracteur_ikeda", "attracteur_de_henon", "lorenz_attractor", "feigenbaum_tree", "barnsley", "sierpinski", "tapis_sierpinski", "menger_sponge", "mandelbulb", "tetraedre_sierpinski", "julia_quaternion", "mandelbox", "vicsek_fractal", "lichtenberg_figures", "koch", "dragon_heighway", "dragon_curve", "cantor_set", "triangle_de_cercles_recursifs", "apollonian_gasket", "t_square_fractal", "h_fractal", "hilbert_curve", "peano_curve", "arbre_pythagore", "magnet1", "magnet2", "magnet3", "lambda_fractale", "lambda_cubique", "magnet_cosinus", "magnet_sinus", "nova_magnetique", "interpoler_lineaire", "interpoler_logarithmique", "ajuster_iterations_export", "mandelbrot_classe"]
224224
valider_exports_wasm(octets_wasm, exports_requises)
225225
afficher(f" Exports valides: {', '.join(exports_requises)}")
226226

scripts/integration_checks.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"dragon_heighway",
5454
"dragon_curve",
5555
"cantor_set",
56+
"triangle_de_cercles_recursifs",
5657
"apollonian_gasket",
5758
"t_square_fractal",
5859
"h_fractal",

0 commit comments

Comments
 (0)