@@ -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
105106const 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
11741210function 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
12541323function 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) {
26842757function applyFrenchTokens ( line , kwRe ) {
26852758 return line
26862759 . replace ( kwRe , `<span class="kw">$1</span>` )
2687- . replace ( / \b ( m a n d e l b r o t | m a n d e l b r o t _ c l a s s e | j u l i a | b u r n i n g _ s h i p | t r i c o r n | m u l t i b r o t | c e l t i c | b u f f a l o | p e r p e n d i c u l a r _ b u r n i n g _ s h i p | h e a r t | p e r p e n d i c u l a r _ m a n d e l b r o t | p e r p e n d i c u l a r _ c e l t i c | d u c k | b u d d h a b r o t | n e w t o n | p h o e n i x | l y a p u n o v | l y a p u n o v _ m u l t i s e q u e n c e | b a s s i n _ n e w t o n _ g e n e r a l i s e | o r b i t a l e _ d e _ n o v a | c o l l a t z _ c o m p l e x e | a t t r a c t e u r _ d e _ c l i f f o r d | a t t r a c t e u r _ d e _ p e t e r _ d e _ j o n g | a t t r a c t e u r _ i k e d a | a t t r a c t e u r _ d e _ h e n o n | l o r e n z _ a t t r a c t o r | f e i g e n b a u m _ t r e e | b a r n s l e y | s i e r p i n s k i | t a p i s _ s i e r p i n s k i | m e n g e r _ s p o n g e | m a n d e l b u l b | v i c s e k _ f r a c t a l | l i c h t e n b e r g _ f i g u r e s | k o c h | d r a g o n _ h e i g h w a y | d r a g o n _ c u r v e | c a n t o r _ s e t | a p o l l o n i a n _ g a s k e t | t _ s q u a r e _ f r a c t a l | h _ f r a c t a l | h i l b e r t _ c u r v e | p e a n o _ c u r v e | a r b r e _ p y t h a g o r e | m a g n e t 1 | m a g n e t 2 | m a g n e t 3 | l a m b d a _ f r a c t a l e | l a m b d a _ c u b i q u e | m a g n e t _ c o s i n u s | m a g n e t _ s i n u s | n o v a _ m a g n e t i q u e | b a r n s l e y _ e t a p e | s i e r p i n s k i _ e t a p e | m e n g e r _ e t a p e | v i c s e k _ e t a p e | p r o j e t e r _ m e n g e r _ x | p r o j e t e r _ m e n g e r _ y | p r o j e t e r _ l o r e n z _ x | p r o j e t e r _ l o r e n z _ y | e t a p e T a p i s S i e r p i n s k i | e t a p e A t t r a c t e u r C l i f f o r d | e t a p e A t t r a c t e u r P e t e r D e J o n g | e t a p e A t t r a c t e u r I k e d a | e t a p e A t t r a c t e u r H e n o n | e t a p e L o r e n z A t t r a c t o r | e t a p e M e n g e r S p o n g e | e t a p e V i c s e k F r a c t a l | e t a p e L i c h t e n b e r g | e t a p e M a n d e l b u l b | p r o j e t e r M e n g e r S p o n g e | p r o j e t e r L o r e n z A t t r a c t o r | p r o j e t e r M a n d e l b u l b | k o c h _ g e n e r e r | g e n e r e r D r a g o n H e i g h w a y | g e n e r e r H i l b e r t | g e n e r e r P e a n o | n o r m e _ c a r r e | c o m p l e x e _ d i v i s e r _ r e | c o m p l e x e _ d i v i s e r _ i m | i t e r e r | e t a p e | r a c i n e _ a p p r o x | a b s _ v a l | a b s _ d y n a m i q u e | a b s _ k o c h | r e m p l a c e r | r e g l e | g e n e r e r | s i n u s _ d y n a m i q u e | c o s i n u s _ d y n a m i q u e | s i n u s _ m a g n e t i q u e | c o s i n u s _ m a g n e t i q u e ) \b / g, `<span class="fn">$1</span>` )
2760+ . replace ( / \b ( m a n d e l b r o t | m a n d e l b r o t _ c l a s s e | j u l i a | b u r n i n g _ s h i p | t r i c o r n | m u l t i b r o t | c e l t i c | b u f f a l o | p e r p e n d i c u l a r _ b u r n i n g _ s h i p | h e a r t | p e r p e n d i c u l a r _ m a n d e l b r o t | p e r p e n d i c u l a r _ c e l t i c | d u c k | b u d d h a b r o t | n e w t o n | p h o e n i x | l y a p u n o v | l y a p u n o v _ m u l t i s e q u e n c e | b a s s i n _ n e w t o n _ g e n e r a l i s e | o r b i t a l e _ d e _ n o v a | c o l l a t z _ c o m p l e x e | a t t r a c t e u r _ d e _ c l i f f o r d | a t t r a c t e u r _ d e _ p e t e r _ d e _ j o n g | a t t r a c t e u r _ i k e d a | a t t r a c t e u r _ d e _ h e n o n | l o r e n z _ a t t r a c t o r | f e i g e n b a u m _ t r e e | b a r n s l e y | s i e r p i n s k i | t a p i s _ s i e r p i n s k i | m e n g e r _ s p o n g e | m a n d e l b u l b | v i c s e k _ f r a c t a l | l i c h t e n b e r g _ f i g u r e s | k o c h | d r a g o n _ h e i g h w a y | d r a g o n _ c u r v e | c a n t o r _ s e t | t r i a n g l e _ d e _ c e r c l e s _ r e c u r s i f s | a p o l l o n i a n _ g a s k e t | t _ s q u a r e _ f r a c t a l | h _ f r a c t a l | h i l b e r t _ c u r v e | p e a n o _ c u r v e | a r b r e _ p y t h a g o r e | m a g n e t 1 | m a g n e t 2 | m a g n e t 3 | l a m b d a _ f r a c t a l e | l a m b d a _ c u b i q u e | m a g n e t _ c o s i n u s | m a g n e t _ s i n u s | n o v a _ m a g n e t i q u e | b a r n s l e y _ e t a p e | s i e r p i n s k i _ e t a p e | m e n g e r _ e t a p e | v i c s e k _ e t a p e | p r o j e t e r _ m e n g e r _ x | p r o j e t e r _ m e n g e r _ y | p r o j e t e r _ l o r e n z _ x | p r o j e t e r _ l o r e n z _ y | e t a p e T a p i s S i e r p i n s k i | e t a p e A t t r a c t e u r C l i f f o r d | e t a p e A t t r a c t e u r P e t e r D e J o n g | e t a p e A t t r a c t e u r I k e d a | e t a p e A t t r a c t e u r H e n o n | e t a p e L o r e n z A t t r a c t o r | e t a p e M e n g e r S p o n g e | e t a p e V i c s e k F r a c t a l | e t a p e L i c h t e n b e r g | e t a p e M a n d e l b u l b | p r o j e t e r M e n g e r S p o n g e | p r o j e t e r L o r e n z A t t r a c t o r | p r o j e t e r M a n d e l b u l b | k o c h _ g e n e r e r | g e n e r e r D r a g o n H e i g h w a y | g e n e r e r H i l b e r t | g e n e r e r P e a n o | n o r m e _ c a r r e | c o m p l e x e _ d i v i s e r _ r e | c o m p l e x e _ d i v i s e r _ i m | i t e r e r | e t a p e | r a c i n e _ a p p r o x | a b s _ v a l | a b s _ d y n a m i q u e | a b s _ k o c h | r e m p l a c e r | r e g l e | g e n e r e r | s i n u s _ d y n a m i q u e | c o s i n u s _ d y n a m i q u e | s i n u s _ m a g n e t i q u e | c o s i n u s _ m a g n e t i q u e ) \b / g, `<span class="fn">$1</span>` )
26882761 . replace ( / \b ( \d + \. \d + | \d + ) \b / g, `<span class="num">$1</span>` )
26892762 . replace ( / \b ( c x | c y | z x | z y | c _ r e | c _ i m | m a x _ i t e r | x | y | i t e r | x t e m p | a x | a y | x 2 | y 2 | f x | f y | d f x | d f y | d e n o m | d e l t a _ x | d e l t a _ y | x _ p r e c | y _ p r e c | x t e m p | y t e m p | d 1 | d 2 | d 3 | d 4 | p u i s s a n c e | r n | a n g l e | r | t h e t a | n x | n y | a | b | n i v e a u | e c h e l l e | d i s t | s c o r e | s o m m e | e x p o s a n t | p a r a m e t r e ) \b / g, `<span class="param">$1</span>` ) ;
26902763}
@@ -2707,7 +2780,7 @@ function highlightPython(code) {
27072780function applyPyTokens ( line , kwRe ) {
27082781 return line
27092782 . replace ( kwRe , `<span class="kw">$1</span>` )
2710- . replace ( / \b ( m a n d e l b r o t | m a n d e l b r o t _ c l a s s e | j u l i a | b u r n i n g _ s h i p | t r i c o r n | m u l t i b r o t | c e l t i c | b u f f a l o | p e r p e n d i c u l a r _ b u r n i n g _ s h i p | h e a r t | p e r p e n d i c u l a r _ m a n d e l b r o t | p e r p e n d i c u l a r _ c e l t i c | d u c k | b u d d h a b r o t | n e w t o n | p h o e n i x | l y a p u n o v | l y a p u n o v _ m u l t i s e q u e n c e | b a s s i n _ n e w t o n _ g e n e r a l i s e | o r b i t a l e _ d e _ n o v a | c o l l a t z _ c o m p l e x e | a t t r a c t e u r _ d e _ c l i f f o r d | a t t r a c t e u r _ d e _ p e t e r _ d e _ j o n g | a t t r a c t e u r _ i k e d a | a t t r a c t e u r _ d e _ h e n o n | l o r e n z _ a t t r a c t o r | f e i g e n b a u m _ t r e e | b a r n s l e y | s i e r p i n s k i | t a p i s _ s i e r p i n s k i | m e n g e r _ s p o n g e | m a n d e l b u l b | v i c s e k _ f r a c t a l | l i c h t e n b e r g _ f i g u r e s | k o c h | d r a g o n _ h e i g h w a y | d r a g o n _ c u r v e | c a n t o r _ s e t | a p o l l o n i a n _ g a s k e t | t _ s q u a r e _ f r a c t a l | h _ f r a c t a l | h i l b e r t _ c u r v e | p e a n o _ c u r v e | a r b r e _ p y t h a g o r e | m a g n e t 1 | m a g n e t 2 | m a g n e t 3 | l a m b d a _ f r a c t a l e | l a m b d a _ c u b i q u e | m a g n e t _ c o s i n u s | m a g n e t _ s i n u s | n o v a _ m a g n e t i q u e | b a r n s l e y _ e t a p e | s i e r p i n s k i _ e t a p e | m e n g e r _ e t a p e | v i c s e k _ e t a p e | p r o j e t e r _ m e n g e r _ x | p r o j e t e r _ m e n g e r _ y | p r o j e t e r _ l o r e n z _ x | p r o j e t e r _ l o r e n z _ y | k o c h _ g e n e r e r | g e n e r e r D r a g o n H e i g h w a y | g e n e r e r H i l b e r t | g e n e r e r P e a n o | n o r m e _ c a r r e | c o m p l e x e _ d i v i s e r _ r e | c o m p l e x e _ d i v i s e r _ i m | i t e r e r | e t a p e | r a c i n e _ a p p r o x | a b s _ v a l | r e m p l a c e r | r e g l e | g e n e r e r | s i n u s _ d y n a m i q u e | c o s i n u s _ d y n a m i q u e | s i n u s _ m a g n e t i q u e | c o s i n u s _ m a g n e t i q u e ) \b / g, `<span class="fn">$1</span>` )
2783+ . replace ( / \b ( m a n d e l b r o t | m a n d e l b r o t _ c l a s s e | j u l i a | b u r n i n g _ s h i p | t r i c o r n | m u l t i b r o t | c e l t i c | b u f f a l o | p e r p e n d i c u l a r _ b u r n i n g _ s h i p | h e a r t | p e r p e n d i c u l a r _ m a n d e l b r o t | p e r p e n d i c u l a r _ c e l t i c | d u c k | b u d d h a b r o t | n e w t o n | p h o e n i x | l y a p u n o v | l y a p u n o v _ m u l t i s e q u e n c e | b a s s i n _ n e w t o n _ g e n e r a l i s e | o r b i t a l e _ d e _ n o v a | c o l l a t z _ c o m p l e x e | a t t r a c t e u r _ d e _ c l i f f o r d | a t t r a c t e u r _ d e _ p e t e r _ d e _ j o n g | a t t r a c t e u r _ i k e d a | a t t r a c t e u r _ d e _ h e n o n | l o r e n z _ a t t r a c t o r | f e i g e n b a u m _ t r e e | b a r n s l e y | s i e r p i n s k i | t a p i s _ s i e r p i n s k i | m e n g e r _ s p o n g e | m a n d e l b u l b | v i c s e k _ f r a c t a l | l i c h t e n b e r g _ f i g u r e s | k o c h | d r a g o n _ h e i g h w a y | d r a g o n _ c u r v e | c a n t o r _ s e t | t r i a n g l e _ d e _ c e r c l e s _ r e c u r s i f s | a p o l l o n i a n _ g a s k e t | t _ s q u a r e _ f r a c t a l | h _ f r a c t a l | h i l b e r t _ c u r v e | p e a n o _ c u r v e | a r b r e _ p y t h a g o r e | m a g n e t 1 | m a g n e t 2 | m a g n e t 3 | l a m b d a _ f r a c t a l e | l a m b d a _ c u b i q u e | m a g n e t _ c o s i n u s | m a g n e t _ s i n u s | n o v a _ m a g n e t i q u e | b a r n s l e y _ e t a p e | s i e r p i n s k i _ e t a p e | m e n g e r _ e t a p e | v i c s e k _ e t a p e | p r o j e t e r _ m e n g e r _ x | p r o j e t e r _ m e n g e r _ y | p r o j e t e r _ l o r e n z _ x | p r o j e t e r _ l o r e n z _ y | k o c h _ g e n e r e r | g e n e r e r D r a g o n H e i g h w a y | g e n e r e r H i l b e r t | g e n e r e r P e a n o | n o r m e _ c a r r e | c o m p l e x e _ d i v i s e r _ r e | c o m p l e x e _ d i v i s e r _ i m | i t e r e r | e t a p e | r a c i n e _ a p p r o x | a b s _ v a l | r e m p l a c e r | r e g l e | g e n e r e r | s i n u s _ d y n a m i q u e | c o s i n u s _ d y n a m i q u e | s i n u s _ m a g n e t i q u e | c o s i n u s _ m a g n e t i q u e ) \b / g, `<span class="fn">$1</span>` )
27112784 . replace ( / \b ( \d + \. \d + | \d + ) \b / g, `<span class="num">$1</span>` )
27122785 . replace ( / \b ( c x | c y | z x | z y | c _ r e | c _ i m | m a x _ i t e r | x | y | i t e r | x t e m p | a x | a y | x 2 | y 2 | f x | f y | d f x | d f y | d e n o m | d e l t a _ x | d e l t a _ y | x _ p r e c | y _ p r e c | x t e m p | y t e m p | d 1 | d 2 | d 3 | d 4 | p u i s s a n c e | r n | a n g l e | r | t h e t a | n x | n y | a | b | n i v e a u | e c h e l l e | d i s t | s c o r e | s o m m e | e x p o s a n t | p a r a m e t r e ) \b / g, `<span class="param">$1</span>` ) ;
27132786}
0 commit comments