@jjlmoya/utils-science 1.21.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/category/index.ts +2 -1
- package/src/entries.ts +3 -1
- package/src/index.ts +1 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/lorenz-attractor/bibliography.astro +14 -0
- package/src/tool/lorenz-attractor/bibliography.ts +12 -0
- package/src/tool/lorenz-attractor/component.astro +146 -0
- package/src/tool/lorenz-attractor/entry.ts +27 -0
- package/src/tool/lorenz-attractor/i18n/de.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/en.ts +185 -0
- package/src/tool/lorenz-attractor/i18n/es.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/fr.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/id.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/it.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/ja.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/ko.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/nl.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/pl.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/pt.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/ru.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/sv.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/tr.ts +113 -0
- package/src/tool/lorenz-attractor/i18n/zh.ts +113 -0
- package/src/tool/lorenz-attractor/index.ts +9 -0
- package/src/tool/lorenz-attractor/logic/LorenzEngine.ts +32 -0
- package/src/tool/lorenz-attractor/lorenz-attractor.css +335 -0
- package/src/tool/lorenz-attractor/renderer.ts +136 -0
- package/src/tool/lorenz-attractor/script.ts +282 -0
- package/src/tool/lorenz-attractor/seo.astro +15 -0
- package/src/tools.ts +2 -0
package/package.json
CHANGED
package/src/category/index.ts
CHANGED
|
@@ -6,10 +6,11 @@ import { simulationProbability } from '../tool/simulation-probability/index';
|
|
|
6
6
|
import { cellularRenewal } from '../tool/cellular-renewal/index';
|
|
7
7
|
import { cosmicInflation } from '../tool/cosmic-inflation/index';
|
|
8
8
|
import { temperatureTimeline } from '../tool/temperature-timeline/index';
|
|
9
|
+
import { lorenzAttractor } from '../tool/lorenz-attractor/index';
|
|
9
10
|
|
|
10
11
|
export const scienceCategory: ScienceCategoryEntry = {
|
|
11
12
|
icon: 'mdi:flask',
|
|
12
|
-
tools: [colonyCounter, asteroidImpact, microwaveDetector, simulationProbability, cellularRenewal, cosmicInflation, temperatureTimeline],
|
|
13
|
+
tools: [colonyCounter, asteroidImpact, microwaveDetector, simulationProbability, cellularRenewal, cosmicInflation, temperatureTimeline, lorenzAttractor],
|
|
13
14
|
i18n: {
|
|
14
15
|
es: () => import('./i18n/es').then((m) => m.content),
|
|
15
16
|
en: () => import('./i18n/en').then((m) => m.content),
|
package/src/entries.ts
CHANGED
|
@@ -6,6 +6,7 @@ export { microwaveDetector } from './tool/microwave-detector/entry';
|
|
|
6
6
|
export { simulationProbability } from './tool/simulation-probability/entry';
|
|
7
7
|
export { cosmicInflation } from './tool/cosmic-inflation/entry';
|
|
8
8
|
export { temperatureTimeline } from './tool/temperature-timeline/entry';
|
|
9
|
+
export { lorenzAttractor } from './tool/lorenz-attractor/entry';
|
|
9
10
|
export { scienceCategory } from './category';
|
|
10
11
|
import { asteroidImpact } from './tool/asteroid-impact/entry';
|
|
11
12
|
import { cellularRenewal } from './tool/cellular-renewal/entry';
|
|
@@ -14,4 +15,5 @@ import { microwaveDetector } from './tool/microwave-detector/entry';
|
|
|
14
15
|
import { simulationProbability } from './tool/simulation-probability/entry';
|
|
15
16
|
import { cosmicInflation } from './tool/cosmic-inflation/entry';
|
|
16
17
|
import { temperatureTimeline } from './tool/temperature-timeline/entry';
|
|
17
|
-
|
|
18
|
+
import { lorenzAttractor } from './tool/lorenz-attractor/entry';
|
|
19
|
+
export const ALL_ENTRIES = [asteroidImpact, cellularRenewal, colonyCounter, microwaveDetector, simulationProbability, cosmicInflation, temperatureTimeline, lorenzAttractor];
|
package/src/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ export { SIMULATION_PROBABILITY_TOOL } from './tool/simulation-probability/index
|
|
|
7
7
|
export { CELLULAR_RENEWAL_TOOL } from './tool/cellular-renewal/index';
|
|
8
8
|
export { COSMIC_INFLATION_TOOL } from './tool/cosmic-inflation/index';
|
|
9
9
|
export { TEMPERATURE_TIMELINE_TOOL } from './tool/temperature-timeline/index';
|
|
10
|
+
export { LORENZ_ATTRACTOR_TOOL } from './tool/lorenz-attractor/index';
|
|
10
11
|
|
|
11
12
|
export type {
|
|
12
13
|
KnownLocale,
|
|
@@ -4,8 +4,8 @@ import { scienceCategory } from '../data';
|
|
|
4
4
|
|
|
5
5
|
describe('Tool Validation Suite', () => {
|
|
6
6
|
describe('Library Registration', () => {
|
|
7
|
-
it('should have
|
|
8
|
-
expect(ALL_TOOLS.length).toBe(
|
|
7
|
+
it('should have 8 tools in ALL_TOOLS', () => {
|
|
8
|
+
expect(ALL_TOOLS.length).toBe(8);
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
it('scienceCategory should be defined', () => {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { lorenzAttractor } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await lorenzAttractor.i18n[locale]?.();
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
{content && <SharedBibliography links={content.bibliography} />}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BibliographyEntry } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const bibliography: BibliographyEntry[] = [
|
|
4
|
+
{
|
|
5
|
+
name: 'Lorenz, E. N. (1963). Deterministic Nonperiodic Flow. Journal of the Atmospheric Sciences, 20(2), 130-141.',
|
|
6
|
+
url: 'https://journals.sagepub.com/doi/10.1177/0309133308091948',
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: 'Sparrow, C. (1982). The Lorenz Equations: Bifurcations, Chaos, and Strange Attractors. Springer-Verlag.',
|
|
10
|
+
url: 'https://link.springer.com/book/10.1007/978-1-4612-5767-7',
|
|
11
|
+
}
|
|
12
|
+
];
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
interface Props {
|
|
3
|
+
ui: Record<string, string>;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const { ui } = Astro.props;
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<div class="lorenz-app">
|
|
10
|
+
<div class="lorenz-card">
|
|
11
|
+
<div class="lorenz-grid">
|
|
12
|
+
<div class="lorenz-canvas-container">
|
|
13
|
+
<canvas id="lorenzCanvas" class="lorenz-canvas"></canvas>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div class="lorenz-controls-section">
|
|
17
|
+
<div class="lorenz-sliders-block">
|
|
18
|
+
<div class="lorenz-slider-group">
|
|
19
|
+
<div class="lorenz-slider-header">
|
|
20
|
+
<span class="lorenz-slider-label">Sigma (σ)</span>
|
|
21
|
+
<span class="lorenz-slider-val" id="valSigma">10.0</span>
|
|
22
|
+
</div>
|
|
23
|
+
<input
|
|
24
|
+
type="range"
|
|
25
|
+
id="slideSigma"
|
|
26
|
+
class="lorenz-slider"
|
|
27
|
+
min="1"
|
|
28
|
+
max="30"
|
|
29
|
+
step="0.1"
|
|
30
|
+
value="10.0"
|
|
31
|
+
aria-label="Sigma"
|
|
32
|
+
/>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<div class="lorenz-slider-group">
|
|
36
|
+
<div class="lorenz-slider-header">
|
|
37
|
+
<span class="lorenz-slider-label">Rho (ρ)</span>
|
|
38
|
+
<span class="lorenz-slider-val" id="valRho">28.0</span>
|
|
39
|
+
</div>
|
|
40
|
+
<input
|
|
41
|
+
type="range"
|
|
42
|
+
id="slideRho"
|
|
43
|
+
class="lorenz-slider"
|
|
44
|
+
min="1"
|
|
45
|
+
max="50"
|
|
46
|
+
step="0.1"
|
|
47
|
+
value="28.0"
|
|
48
|
+
aria-label="Rho"
|
|
49
|
+
/>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<div class="lorenz-slider-group">
|
|
53
|
+
<div class="lorenz-slider-header">
|
|
54
|
+
<span class="lorenz-slider-label">Beta (β)</span>
|
|
55
|
+
<span class="lorenz-slider-val" id="valBeta">2.67</span>
|
|
56
|
+
</div>
|
|
57
|
+
<input
|
|
58
|
+
type="range"
|
|
59
|
+
id="slideBeta"
|
|
60
|
+
class="lorenz-slider"
|
|
61
|
+
min="0.1"
|
|
62
|
+
max="10"
|
|
63
|
+
step="0.01"
|
|
64
|
+
value="2.67"
|
|
65
|
+
aria-label="Beta"
|
|
66
|
+
/>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<div class="lorenz-slider-group">
|
|
70
|
+
<div class="lorenz-slider-header">
|
|
71
|
+
<span>{ui.simulationSpeed}</span>
|
|
72
|
+
<span class="lorenz-slider-val" id="valDt">0.005</span>
|
|
73
|
+
</div>
|
|
74
|
+
<input
|
|
75
|
+
type="range"
|
|
76
|
+
id="slideDt"
|
|
77
|
+
class="lorenz-slider"
|
|
78
|
+
min="0.001"
|
|
79
|
+
max="0.02"
|
|
80
|
+
step="0.001"
|
|
81
|
+
value="0.005"
|
|
82
|
+
aria-label="dt"
|
|
83
|
+
/>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div class="lorenz-slider-group">
|
|
87
|
+
<div class="lorenz-slider-header">
|
|
88
|
+
<span>{ui.initialPerturbation}</span>
|
|
89
|
+
<span class="lorenz-slider-val" id="valPerturb">0.00010</span>
|
|
90
|
+
</div>
|
|
91
|
+
<input
|
|
92
|
+
type="range"
|
|
93
|
+
id="slidePerturb"
|
|
94
|
+
class="lorenz-slider"
|
|
95
|
+
min="0.00001"
|
|
96
|
+
max="0.01"
|
|
97
|
+
step="0.00001"
|
|
98
|
+
value="0.00010"
|
|
99
|
+
aria-label="Perturbation"
|
|
100
|
+
/>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<div class="lorenz-button-row">
|
|
105
|
+
<button id="btnPlayPause" class="lorenz-btn lorenz-btn-active-state">{ui.pause}</button>
|
|
106
|
+
<button id="btnReset" class="lorenz-btn">{ui.resetDefault}</button>
|
|
107
|
+
<button id="btnClear" class="lorenz-btn">{ui.clearPath}</button>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
<div class="lorenz-stats-block">
|
|
111
|
+
<div class="lorenz-coords-row">
|
|
112
|
+
<div class="lorenz-coord-item">
|
|
113
|
+
T1: <span id="statT1" class="lorenz-coord-val">X:0.0 Y:0.0 Z:0.0</span>
|
|
114
|
+
</div>
|
|
115
|
+
<div class="lorenz-coord-item">
|
|
116
|
+
T2: <span id="statT2" class="lorenz-coord-val">X:0.0 Y:0.0 Z:0.0</span>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
<div class="lorenz-divergence-display">
|
|
121
|
+
<span class="lorenz-divergence-title">{ui.distance}</span>
|
|
122
|
+
<div class="lorenz-divergence-main">
|
|
123
|
+
<span class="lorenz-divergence-num" id="statDist">0.0000</span>
|
|
124
|
+
<span class="lorenz-divergence-delta" id="statDelta">--</span>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
<div class="lorenz-chart-block">
|
|
130
|
+
<div class="lorenz-chart-header">
|
|
131
|
+
<span>{ui.exponentialGrowth}</span>
|
|
132
|
+
<div class="lorenz-tooltip-container">
|
|
133
|
+
<span class="lorenz-info-icon">i</span>
|
|
134
|
+
<div class="lorenz-tooltip-text">{ui.divergenceExplanation}</div>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
<div class="lorenz-chart-canvas-wrapper">
|
|
138
|
+
<canvas id="chartCanvas" class="lorenz-chart-canvas"></canvas>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<script src="./script.ts"></script>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ScienceToolEntry } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const lorenzAttractor: ScienceToolEntry = {
|
|
4
|
+
id: 'lorenz-attractor',
|
|
5
|
+
icons: {
|
|
6
|
+
bg: 'mdi:chart-bell-curve-cumulative',
|
|
7
|
+
fg: 'mdi:butterfly',
|
|
8
|
+
},
|
|
9
|
+
i18n: {
|
|
10
|
+
es: () => import('./i18n/es').then((m) => m.content),
|
|
11
|
+
en: () => import('./i18n/en').then((m) => m.content),
|
|
12
|
+
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
13
|
+
de: () => import('./i18n/de').then((m) => m.content),
|
|
14
|
+
it: () => import('./i18n/it').then((m) => m.content),
|
|
15
|
+
pt: () => import('./i18n/pt').then((m) => m.content),
|
|
16
|
+
id: () => import('./i18n/id').then((m) => m.content),
|
|
17
|
+
ja: () => import('./i18n/ja').then((m) => m.content),
|
|
18
|
+
ko: () => import('./i18n/ko').then((m) => m.content),
|
|
19
|
+
nl: () => import('./i18n/nl').then((m) => m.content),
|
|
20
|
+
pl: () => import('./i18n/pl').then((m) => m.content),
|
|
21
|
+
ru: () => import('./i18n/ru').then((m) => m.content),
|
|
22
|
+
sv: () => import('./i18n/sv').then((m) => m.content),
|
|
23
|
+
tr: () => import('./i18n/tr').then((m) => m.content),
|
|
24
|
+
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
export type { ToolLocaleContent } from '../../types';
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
const slug = 'lorenz-attraktor';
|
|
2
|
+
const title = 'Lorenz Attraktor Chaos Simulator Der Schmetterlingseffekt in 3D';
|
|
3
|
+
const description = 'Erforschen Sie die Chaostheorie mit dieser interaktiven 3D-Lorenz-Attraktor-Simulation. Visualisieren Sie den Schmetterlingseffekt.';
|
|
4
|
+
|
|
5
|
+
const howTo = [
|
|
6
|
+
{
|
|
7
|
+
"name": "Leinwand drehen",
|
|
8
|
+
"text": "Klicken und ziehen Sie im 3D-Viewport, um den Attraktor zu drehen."
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "Schieberegler anpassen",
|
|
12
|
+
"text": "Aendern Sie die Parameter Sigma, Rho und Beta, um das Chaos zu beobachten."
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"name": "Divergenz beobachten",
|
|
16
|
+
"text": "Beobachten Sie, wie der Abstand zwischen den beiden Trajektorien exponentiell waechst."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "Pause und Reset",
|
|
20
|
+
"text": "Verwenden Sie die Steuerelemente, um die Simulation anzuhalten oder zurueckzusetzen."
|
|
21
|
+
}
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const faq = [
|
|
25
|
+
{
|
|
26
|
+
"question": "Was ist der Lorenz-Attraktor?",
|
|
27
|
+
"answer": "Der Lorenz-Attraktor ist eine Reihe chaotischer Loesungen des Lorenz-Systems."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"question": "Was ist der Schmetterlingseffekt?",
|
|
31
|
+
"answer": "Die empfindliche Abhaengigkeit von den Anfangsbedingungen in chaotischen Systemen."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"question": "Was bedeuten die Parameter?",
|
|
35
|
+
"answer": "Sigma ist die Prandtl-Zahl, Rho die Rayleigh-Zahl und Beta das geometrische Aspektverhaeltnis."
|
|
36
|
+
}
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
import { bibliography } from '../bibliography';
|
|
40
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
41
|
+
|
|
42
|
+
export const content: ToolLocaleContent = {
|
|
43
|
+
slug,
|
|
44
|
+
title,
|
|
45
|
+
description,
|
|
46
|
+
ui: {
|
|
47
|
+
"copied": "Kopiert",
|
|
48
|
+
"noHistory": "Kein Verlauf",
|
|
49
|
+
"load": "Laden",
|
|
50
|
+
"delete": "Loeschen",
|
|
51
|
+
"title": "Lorenz-Attraktor",
|
|
52
|
+
"subTitle": "Deterministisches Chaos",
|
|
53
|
+
"parameterControls": "Systemparameter",
|
|
54
|
+
"simulationSpeed": "Geschwindigkeit (dt)",
|
|
55
|
+
"initialPerturbation": "Anfaengliche Stoerung (dx)",
|
|
56
|
+
"trajectories": "Trajektorien",
|
|
57
|
+
"distance": "Divergenzabstand",
|
|
58
|
+
"exponentialGrowth": "Exponentielle Divergenz",
|
|
59
|
+
"resetDefault": "Reset",
|
|
60
|
+
"clearPath": "Clear",
|
|
61
|
+
"play": "Resume",
|
|
62
|
+
"pause": "Pause",
|
|
63
|
+
"coords": "Koordinaten",
|
|
64
|
+
"divergenceExplanation": "Das Divergenzdiagramm zeigt den euklidischen Abstand zwischen den beiden Trajektorien im Laufe der Zeit."
|
|
65
|
+
},
|
|
66
|
+
seo: [
|
|
67
|
+
{
|
|
68
|
+
"type": "title",
|
|
69
|
+
"text": "Deterministisches Chaos: Die Lorenz-Gleichungen verstehen",
|
|
70
|
+
"level": 2
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"type": "paragraph",
|
|
74
|
+
"html": "Das Lorenz-System ist ein Meilenstein in der Geschichte der Mathematik und der nichtlinearen Dynamik."
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
faq,
|
|
78
|
+
bibliography,
|
|
79
|
+
howTo,
|
|
80
|
+
schemas: [
|
|
81
|
+
{
|
|
82
|
+
'@context': 'https://schema.org',
|
|
83
|
+
'@type': 'SoftwareApplication',
|
|
84
|
+
name: title,
|
|
85
|
+
description: description,
|
|
86
|
+
applicationCategory: 'ScientificApplication',
|
|
87
|
+
operatingSystem: 'Any',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
'@context': 'https://schema.org',
|
|
91
|
+
'@type': 'FAQPage',
|
|
92
|
+
mainEntity: faq.map((item) => ({
|
|
93
|
+
'@type': 'Question',
|
|
94
|
+
name: item.question,
|
|
95
|
+
acceptedAnswer: {
|
|
96
|
+
'@type': 'Answer',
|
|
97
|
+
text: item.answer,
|
|
98
|
+
},
|
|
99
|
+
})),
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
'@context': 'https://schema.org',
|
|
103
|
+
'@type': 'HowTo',
|
|
104
|
+
name: title,
|
|
105
|
+
step: howTo.map((step) => ({
|
|
106
|
+
'@type': 'HowToStep',
|
|
107
|
+
name: step.name,
|
|
108
|
+
stepValue: step.name,
|
|
109
|
+
text: step.text,
|
|
110
|
+
})),
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
};
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
const slug = 'lorenz-attractor';
|
|
2
|
+
const title = 'Lorenz Attractor Chaos Simulator: The Butterfly Effect in 3D';
|
|
3
|
+
const description = 'Explore chaos theory with this interactive 3D Lorenz attractor simulation. Visualize the butterfly effect by running two nearly identical trajectories side-by-side.';
|
|
4
|
+
|
|
5
|
+
const howTo = [
|
|
6
|
+
{
|
|
7
|
+
name: 'Rotate the canvas',
|
|
8
|
+
text: 'Click and drag on the 3D viewport (or swipe on mobile) to rotate the attractor and view it from different angles.',
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: 'Adjust the sliders',
|
|
12
|
+
text: 'Modify the Sigma, Rho, and Beta parameters. Observe how changing Rho transitions the system from stable orbits to chaotic behavior.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'Observe the divergence',
|
|
16
|
+
text: 'Adjust the initial perturbation slider. Watch the live chart showing the separation distance between the two trajectories grow exponentially.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'Pause and reset',
|
|
20
|
+
text: 'Use the controls to pause the simulation, clear the drawing paths, or reset parameters to the standard chaotic defaults.',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const faq = [
|
|
25
|
+
{
|
|
26
|
+
question: 'What is the Lorenz Attractor?',
|
|
27
|
+
answer: 'The Lorenz attractor is a set of chaotic solutions to the Lorenz system, a system of three ordinary differential equations first formulated by Edward Lorenz in 1963. It was originally derived from a simplified mathematical model of atmospheric convection.',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
question: 'What is the Butterfly Effect?',
|
|
31
|
+
answer: 'The butterfly effect is the sensitive dependence on initial conditions, where a small change in one state of a deterministic nonlinear system can result in large differences in a later state. In this simulator, a tiny starting perturbation of 0.0001 causes the two paths to diverge completely after a short time.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
question: 'What do the parameters Sigma, Rho, and Beta represent?',
|
|
35
|
+
answer: 'Sigma represents the Prandtl number (related to fluid viscosity and thermal conductivity), Rho represents the Rayleigh number (related to thermal convection strength), and Beta is a geometric parameter related to the physical dimensions of the convective layer.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Why does the attractor shape look like a butterfly?',
|
|
39
|
+
answer: 'The iconic double-winged butterfly shape arises because the system has two unstable equilibrium points. The trajectory orbits around one wing, then unpredictably transitions to orbit the other, creating the distinctive structure in 3D phase space.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
question: 'Is the Lorenz Attractor truly random?',
|
|
43
|
+
answer: 'No. The Lorenz system is entirely deterministic, meaning its future state is fully defined by its current state and equations. However, because it is chaotic, it is completely unpredictable in the long term without infinite precision of the initial conditions.',
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
import { bibliography } from '../bibliography';
|
|
48
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
49
|
+
|
|
50
|
+
export const content: ToolLocaleContent = {
|
|
51
|
+
slug,
|
|
52
|
+
title,
|
|
53
|
+
description,
|
|
54
|
+
ui: {
|
|
55
|
+
copied: 'Copied',
|
|
56
|
+
noHistory: 'No history',
|
|
57
|
+
load: 'Load',
|
|
58
|
+
delete: 'Delete',
|
|
59
|
+
title: 'Lorenz Attractor',
|
|
60
|
+
subTitle: 'Deterministic Chaos and Sensitive Dependence',
|
|
61
|
+
parameterControls: 'System Parameters',
|
|
62
|
+
simulationSpeed: 'Simulation Speed (dt)',
|
|
63
|
+
initialPerturbation: 'Initial Perturbation (dx)',
|
|
64
|
+
trajectories: 'Trajectories',
|
|
65
|
+
distance: 'Divergence Distance',
|
|
66
|
+
exponentialGrowth: 'Exponential Divergence',
|
|
67
|
+
resetDefault: 'Reset',
|
|
68
|
+
clearPath: 'Clear',
|
|
69
|
+
play: 'Resume',
|
|
70
|
+
pause: 'Pause',
|
|
71
|
+
coords: 'Coordinates',
|
|
72
|
+
divergenceExplanation: 'The divergence chart shows the Euclidean distance between the two trajectories over time. Notice how it remains near zero before spiking rapidly, illustrating the butterfly effect.',
|
|
73
|
+
},
|
|
74
|
+
seo: [
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'Deterministic Chaos: Understanding the Lorenz Equations',
|
|
78
|
+
level: 2,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'The Lorenz system is a landmark formulation in nonlinear dynamics and chaos theory. Originally derived in 1963 by the meteorologist and mathematician <strong>Edward Lorenz</strong>, the model was born out of a simplified representation of atmospheric convection. Lorenz simplified the complex fluid dynamics equations of atmospheric flow into three coupled, ordinary differential equations. His discovery that these simple, deterministic equations could produce highly complex, non-periodic, and chaotic behavior changed our understanding of physical systems.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'The system is defined by three coupled differential equations that track a coordinate in a three-dimensional phase space over time:',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'list',
|
|
90
|
+
items: [
|
|
91
|
+
'<strong>dx/dt = σ * (y - x):</strong> Describes the rate of convective motion. The parameter σ (Prandtl number) represents the ratio of fluid viscosity to thermal conductivity.',
|
|
92
|
+
'<strong>dy/dt = x * (ρ - z) - y:</strong> Represents the temperature difference between ascending and descending convective currents. The parameter ρ (Rayleigh number) represents the convective heating intensity.',
|
|
93
|
+
'<strong>dz/dt = x * y - β * z:</strong> Tracks the distortion of the vertical temperature profile from a linear gradient. The parameter β is a geometric aspect ratio of the convective physical cell.',
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: 'title',
|
|
98
|
+
text: 'The Butterfly Effect: Sensitive Dependence on Initial Conditions',
|
|
99
|
+
level: 3,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: 'paragraph',
|
|
103
|
+
html: 'The defining feature of chaotic systems is their <strong>sensitive dependence on initial conditions</strong>, popularly known as the <strong>Butterfly Effect</strong>. In a non-chaotic system, a minor difference in the initial state leads to a proportionally minor difference in the final state. In a chaotic system, however, the distance between two trajectories starting arbitrarily close to each other grows exponentially over time.',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
type: 'paragraph',
|
|
107
|
+
html: 'This sensitivity is demonstrated in this simulator by running two trajectories (T1 in Cyan and T2 in Pink) that start with a tiny separation (defined by the Perturbation slider). Initially, they travel along virtually the same path, rendering a blended purple line. After a short period of time, the minor starting difference is amplified by the system\'s nonlinear terms, and the paths diverge completely, orbiting different wings of the attractor.',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'table',
|
|
111
|
+
headers: ['Parameter', 'Standard Value', 'Physical Setting', 'System Behavior on Change'],
|
|
112
|
+
rows: [
|
|
113
|
+
['σ (Sigma)', '10.0', 'Prandtl Number', 'Determines the fluid\'s internal friction. Higher values speed up the reaction of velocity changes relative to temperature gradients.'],
|
|
114
|
+
['ρ (Rho)', '28.0', 'Rayleigh Number', 'Main driver of chaos. Below ρ = 1, the origin is the only stable point. At ρ = 28, the system is fully chaotic.'],
|
|
115
|
+
['β (Beta)', '8/3 (2.667)', 'Geometric Aspect Ratio', 'Controls the physical width-to-height ratio of the convection cells. Modifies the scale and rotation speed of the orbits.'],
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
type: 'title',
|
|
120
|
+
text: 'Phase Space, Strange Attractors, and Fractals',
|
|
121
|
+
level: 3,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'paragraph',
|
|
125
|
+
html: 'In classical physics, trajectories eventually settle into steady points (sinks) or repeat the same path indefinitely (limit cycles). The Lorenz system does neither. The path loops in three dimensions infinitely without ever crossing itself, since the system is deterministic and unique at every coordinate. This infinite, non-repeating structure is bounded within a finite volume of phase space, forming a <strong>strange attractor</strong>.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: 'The geometry of this attractor is fractal, with a Hausdorff dimension of approximately 2.06. This means the attractor is more than a two-dimensional surface but less than a solid three-dimensional volume, showcasing a complex topological structure where paths fold over each other without intersecting.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'title',
|
|
133
|
+
text: 'Applications of Chaos Theory in Science',
|
|
134
|
+
level: 3,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'paragraph',
|
|
138
|
+
html: 'The lessons learned from the Lorenz attractor extend far beyond weather forecasting. Chaos theory has influenced many modern fields of study:',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'list',
|
|
142
|
+
items: [
|
|
143
|
+
'<strong>Meteorology:</strong> Established the fundamental limits of weather predictability, leading to ensemble forecasting methods.',
|
|
144
|
+
'<strong>Cryptography:</strong> The deterministic yet unpredictable nature of chaotic orbits is used to generate secure pseudo-random keys and encrypt sensitive data streams.',
|
|
145
|
+
'<strong>Cardiology:</strong> Used to model cardiac rhythms, where healthy hearts exhibit chaotic characteristics, while periodic rhythms can indicate pathology.',
|
|
146
|
+
'<strong>Engineering:</strong> Helps design stable structures by analyzing and avoiding chaotic resonance in suspension bridges and mechanical systems.',
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
faq,
|
|
151
|
+
bibliography,
|
|
152
|
+
howTo,
|
|
153
|
+
schemas: [
|
|
154
|
+
{
|
|
155
|
+
'@context': 'https://schema.org',
|
|
156
|
+
'@type': 'SoftwareApplication',
|
|
157
|
+
name: title,
|
|
158
|
+
description: description,
|
|
159
|
+
applicationCategory: 'ScientificApplication',
|
|
160
|
+
operatingSystem: 'Any',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
'@context': 'https://schema.org',
|
|
164
|
+
'@type': 'FAQPage',
|
|
165
|
+
mainEntity: faq.map((item) => ({
|
|
166
|
+
'@type': 'Question',
|
|
167
|
+
name: item.question,
|
|
168
|
+
acceptedAnswer: {
|
|
169
|
+
'@type': 'Answer',
|
|
170
|
+
text: item.answer,
|
|
171
|
+
},
|
|
172
|
+
})),
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
'@context': 'https://schema.org',
|
|
176
|
+
'@type': 'HowTo',
|
|
177
|
+
name: title,
|
|
178
|
+
step: howTo.map((step) => ({
|
|
179
|
+
'@type': 'HowToStep',
|
|
180
|
+
name: step.name,
|
|
181
|
+
text: step.text,
|
|
182
|
+
})),
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
};
|