@jjlmoya/utils-science 1.20.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 +2 -1
- package/src/category/i18n/de.ts +1 -1
- package/src/category/i18n/fr.ts +6 -6
- package/src/category/i18n/ru.ts +1 -1
- package/src/category/index.ts +4 -1
- package/src/category/seo.astro +2 -2
- package/src/entries.ts +7 -1
- package/src/index.ts +3 -0
- package/src/pages/[locale]/[slug].astro +5 -4
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/no_en_dash.test.ts +70 -0
- package/src/tests/seo_length.test.ts +5 -3
- package/src/tests/title_quality.test.ts +1 -1
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/asteroid-impact/bibliography.astro +2 -2
- package/src/tool/asteroid-impact/component.astro +16 -9
- package/src/tool/asteroid-impact/i18n/fr.ts +6 -6
- package/src/tool/asteroid-impact/i18n/ru.ts +4 -4
- package/src/tool/asteroid-impact/index.ts +1 -0
- package/src/tool/asteroid-impact/script.ts +13 -7
- package/src/tool/cellular-renewal/bibliography.astro +2 -2
- package/src/tool/cellular-renewal/i18n/fr.ts +13 -13
- package/src/tool/cellular-renewal/i18n/ru.ts +17 -17
- package/src/tool/cellular-renewal/i18n/zh.ts +9 -9
- package/src/tool/cellular-renewal/index.ts +1 -0
- package/src/tool/colony-counter/bibliography.astro +2 -2
- package/src/tool/colony-counter/i18n/ru.ts +5 -5
- package/src/tool/colony-counter/i18n/zh.ts +2 -2
- package/src/tool/colony-counter/index.ts +1 -0
- package/src/tool/cosmic-inflation/bibliography.astro +14 -0
- package/src/tool/cosmic-inflation/bibliography.ts +12 -0
- package/src/tool/cosmic-inflation/component.astro +270 -0
- package/src/tool/cosmic-inflation/cosmic-inflation-calculator.css +277 -0
- package/src/tool/cosmic-inflation/entry.ts +26 -0
- package/src/tool/cosmic-inflation/i18n/de.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/en.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/es.ts +168 -0
- package/src/tool/cosmic-inflation/i18n/fr.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/id.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/it.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/ja.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/ko.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/nl.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/pl.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/pt.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/ru.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/sv.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/tr.ts +188 -0
- package/src/tool/cosmic-inflation/i18n/zh.ts +188 -0
- package/src/tool/cosmic-inflation/index.ts +11 -0
- package/src/tool/cosmic-inflation/logic/CosmicInflationEngine.ts +21 -0
- package/src/tool/cosmic-inflation/seo.astro +15 -0
- 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/tool/microwave-detector/bibliography.astro +2 -2
- package/src/tool/microwave-detector/component.astro +9 -7
- package/src/tool/microwave-detector/i18n/fr.ts +4 -4
- package/src/tool/microwave-detector/i18n/ru.ts +18 -18
- package/src/tool/microwave-detector/i18n/zh.ts +10 -10
- package/src/tool/microwave-detector/index.ts +1 -0
- package/src/tool/microwave-detector/logic/MicrowaveEngine.ts +5 -1
- package/src/tool/simulation-probability/bibliography.astro +2 -2
- package/src/tool/simulation-probability/i18n/fr.ts +5 -5
- package/src/tool/simulation-probability/i18n/ru.ts +7 -7
- package/src/tool/simulation-probability/i18n/zh.ts +4 -4
- package/src/tool/simulation-probability/index.ts +1 -0
- package/src/tool/temperature-timeline/bibliography.astro +14 -0
- package/src/tool/temperature-timeline/bibliography.ts +12 -0
- package/src/tool/temperature-timeline/component.astro +289 -0
- package/src/tool/temperature-timeline/entry.ts +26 -0
- package/src/tool/temperature-timeline/i18n/de.ts +213 -0
- package/src/tool/temperature-timeline/i18n/en.ts +213 -0
- package/src/tool/temperature-timeline/i18n/es.ts +178 -0
- package/src/tool/temperature-timeline/i18n/fr.ts +213 -0
- package/src/tool/temperature-timeline/i18n/id.ts +213 -0
- package/src/tool/temperature-timeline/i18n/it.ts +213 -0
- package/src/tool/temperature-timeline/i18n/ja.ts +213 -0
- package/src/tool/temperature-timeline/i18n/ko.ts +213 -0
- package/src/tool/temperature-timeline/i18n/nl.ts +213 -0
- package/src/tool/temperature-timeline/i18n/pl.ts +213 -0
- package/src/tool/temperature-timeline/i18n/pt.ts +213 -0
- package/src/tool/temperature-timeline/i18n/ru.ts +213 -0
- package/src/tool/temperature-timeline/i18n/sv.ts +213 -0
- package/src/tool/temperature-timeline/i18n/tr.ts +213 -0
- package/src/tool/temperature-timeline/i18n/zh.ts +213 -0
- package/src/tool/temperature-timeline/index.ts +11 -0
- package/src/tool/temperature-timeline/logic/TemperatureTimelineEngine.ts +58 -0
- package/src/tool/temperature-timeline/planet-temperature-timeline.css +158 -0
- package/src/tool/temperature-timeline/seo.astro +15 -0
- package/src/tools.ts +6 -0
- package/src/types.ts +1 -1
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
|
|
4
|
+
const slug = 'cosmic-inflation-calculator';
|
|
5
|
+
const description = '计算宇宙暴胀时期早期宇宙的指数级膨胀。';
|
|
6
|
+
const title = '宇宙暴胀计算器:早期宇宙膨胀';
|
|
7
|
+
|
|
8
|
+
const howTo = [
|
|
9
|
+
{
|
|
10
|
+
name: '选择数值',
|
|
11
|
+
text: '拖动滑块查看结果。',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: '比较尺度因子',
|
|
15
|
+
text: '观察空间膨胀了多少个数量级。',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: '分析动态扭曲',
|
|
19
|
+
text: '画布显示了空间的膨胀。',
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
const faq = [
|
|
24
|
+
{
|
|
25
|
+
"question": "什么是宇宙暴胀,它为什么会发生?",
|
|
26
|
+
"answer": "宇宙暴胀是一个理论,它假设在宇宙最初的极短时间内(具体在大爆炸后约 10^-36 秒),空间经历了超高速和指数级的膨胀。它的发生是因为一种被称为暴胀子的理论标量场处于假真空的高能量密度状态,从而产生了负压力和排斥性重力,拉伸了时空结构。"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"question": "e-folds(e-折叠数)的数量意味着什么?",
|
|
30
|
+
"answer": "e-folds数测量指数级膨胀阶段的持续时间。一次 e-fold 表示宇宙大小乘以欧拉数(约 2.718)所需的时间。如果宇宙经历 N 次 e-folds,其尺度因子将增加 e^N 倍。标准的宇宙学模型要求至少 50 到 60 个 e-folds 才能正确解决平坦性和视界问题。"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"question": "暴胀如何解决视界问题?",
|
|
34
|
+
"answer": "视界问题质疑为什么宇宙中极其遥远的区域具有几乎相同的宇宙微波背景(CMB)辐射温度,即使光速本不允许它们相互作用以达到热平衡。暴胀通过表明在指数级膨胀之前,整个可观测宇宙是一个因果连接且热均匀 purchasing 的微小区域,然后瞬间被拉伸到视界之外,从而解决了这个问题。"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"question": "什么是平坦性问题,它是如何解决的?",
|
|
38
|
+
"answer": "今天宇宙的能量密度极其接近临界密度,这意味着空间是平坦的,误差极小。如果没有暴胀,任何初始的平坦性偏差都会随着时间指数级增长,从而在大爆炸时需要不可能的精细调节。暴胀极其剧烈地拉伸了空间曲率,稀释了任何初始曲率,类似于巨大的球体表面在局部看起来完全是平坦的。"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"question": "什么是再加热(reheating)过程?",
|
|
42
|
+
"answer": "再加热是标志着暴胀结束的热转变。在暴胀期间,由于体积的指数级膨胀,宇宙冷却到接近绝对零度的温度。当暴胀子场衰变到其势能的最小值时,其剩余能量通过量子相互作用以标准模型粒子的形式倾泻到空间中,使宇宙充满了炽热而高密度的等离子体,从而开始了传统的标准大爆炸阶段。"
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
export const content: ToolLocaleContent = {
|
|
47
|
+
slug,
|
|
48
|
+
title,
|
|
49
|
+
description,
|
|
50
|
+
ui: {
|
|
51
|
+
title: '宇宙暴胀计算器',
|
|
52
|
+
efoldsLabel: 'e-folds数量 (N)',
|
|
53
|
+
energyLabel: '初始能量尺度 (GeV)',
|
|
54
|
+
scaleFactorResult: '尺度因子增长',
|
|
55
|
+
reheatingTempResult: '估计再加热温度',
|
|
56
|
+
chartTitle: '时空结构扭曲',
|
|
57
|
+
presetGuth: '标准(古斯)',
|
|
58
|
+
presetChaotic: '混沌',
|
|
59
|
+
presetExtreme: '极端极限',
|
|
60
|
+
efoldsTooltip: '典型模型预测在50到60个e-folds之间。',
|
|
61
|
+
energyTooltip: 'GUT尺度约为10^16 GeV。',
|
|
62
|
+
scaleFactorTooltip: '代表总膨胀系数。',
|
|
63
|
+
reheatingTooltip: '暴胀结束时的温度。',
|
|
64
|
+
analogyInsuff: '中度暴胀。这种膨胀是不够的。',
|
|
65
|
+
analogyProton: '宇宙在极短时间内从质子大小膨胀到星系大小。',
|
|
66
|
+
analogyObservable: '宇宙在10^-32秒内从亚原子尺度膨胀到大于可观测宇宙的范围。',
|
|
67
|
+
},
|
|
68
|
+
seo: [
|
|
69
|
+
{
|
|
70
|
+
"type": "title",
|
|
71
|
+
"text": "宇宙学:宇宙暴胀理论与时空膨胀",
|
|
72
|
+
"level": 2
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"type": "paragraph",
|
|
76
|
+
"html": "宇宙暴胀是连接粒子物理学与观测天体物理学的基本支柱。该理论由物理学家阿兰·古斯和安德雷·林德于 1980 年代初提出,假设早期宇宙经历了一个由暴胀子的标量场能量密度驱动的指数级膨胀阶段。这种膨胀在极短的时间内使宇宙的体积增加了至少 10^26 倍,解决了经典大爆炸模型的深刻悖论,并为宇宙结构的形成提供了理论框架。"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"type": "title",
|
|
80
|
+
"text": "暴胀模型和参数的比较",
|
|
81
|
+
"level": 3
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"type": "paragraph",
|
|
85
|
+
"html": "暴胀子场的不同势能会产生不同的膨胀率和再加热温度。以下是本计算器中模拟的主要模型特征:"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"type": "table",
|
|
89
|
+
"headers": [
|
|
90
|
+
"暴胀模型",
|
|
91
|
+
"e-folds 范围 (N)",
|
|
92
|
+
"能量尺度 (GeV)",
|
|
93
|
+
"物理和动态结果"
|
|
94
|
+
],
|
|
95
|
+
"rows": [
|
|
96
|
+
[
|
|
97
|
+
"<strong>标准古斯</strong>",
|
|
98
|
+
"50 - 60",
|
|
99
|
+
"10^16",
|
|
100
|
+
"解决平坦性和视界问题;暴胀通过缓慢相变中的气泡成核而结束。"
|
|
101
|
+
],
|
|
102
|
+
[
|
|
103
|
+
"<strong>混沌暴胀 (林德)</strong>",
|
|
104
|
+
"60 或更多",
|
|
105
|
+
"10^16",
|
|
106
|
+
"暴胀子沿着简单的抛物线势能平缓滚动;避免了突然的相变问题。"
|
|
107
|
+
],
|
|
108
|
+
[
|
|
109
|
+
"<strong>极端极限</strong>",
|
|
110
|
+
"90 或更多",
|
|
111
|
+
"10^19 (普ランク)",
|
|
112
|
+
"接近量子引力极限的能量;原始时空的巨大拉伸。"
|
|
113
|
+
]
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"type": "title",
|
|
118
|
+
"text": "解决经典大爆炸问题",
|
|
119
|
+
"level": 3
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"type": "paragraph",
|
|
123
|
+
"html": "在暴胀理论发展之前,经典大爆炸宇宙学存在严重的理论不一致。源于宇宙微波背景均匀性的视界问题,以及与空间临界密度相关的平坦性问题,都表明需要极不可能的初始条件。暴胀通过拉伸热均匀的微观区域并动态展平局部空间几何形状,自然地解决了这两个难题。此外,它稀释了早期宇宙中本应大量形成的磁单极子的浓度。"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"type": "title",
|
|
127
|
+
"text": "暴胀模型的观测天文学证据",
|
|
128
|
+
"level": 3
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"type": "paragraph",
|
|
132
|
+
"html": "宇宙暴胀理论不仅是一个优雅的数学结构;它还有由 COBE、WMAP 和 Planck 等空间卫星确认的强有力的间接证据:"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"type": "list",
|
|
136
|
+
"items": [
|
|
137
|
+
"<strong>CMB 均匀性:</strong> 宇宙微波背景辐射表现出均匀的温度,在可见天空的相反两侧仅有十万分之一的变化。",
|
|
138
|
+
"<strong>平坦几何:</strong> 宇宙曲率的测量证实,空间是平坦的,误差小于 1%,这与巨大的暴胀拉伸相一致。",
|
|
139
|
+
"<strong>单极子的缺乏:</strong> 逻辑上解释了在我们的可观测宇宙中完全没有稳定的、高密度的磁单极子。",
|
|
140
|
+
"<strong>涨落光谱:</strong> 在宇宙背景中观察到的各向异性显示光谱指数略低于 1,正如慢滚暴胀子模型所预测的那样。"
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"type": "title",
|
|
145
|
+
"text": "量子涨落与星系的种子",
|
|
146
|
+
"level": 3
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"type": "paragraph",
|
|
150
|
+
"html": "宇宙暴胀最非凡的方面在于它能够充当宇宙显微镜。在指数级膨胀期间,暴胀子场的微观量子涨落被拉伸到天文尺度。在暴胀结束时,这些涨落冻结为物质密度变化(原始扰动)。这些密度差异充当了引力种子,在数十亿年的时间里拉拢物质,诞生了第一批恒星、星系、星系团以及我们今天观察到的宇宙网。"
|
|
151
|
+
}
|
|
152
|
+
],
|
|
153
|
+
faq,
|
|
154
|
+
bibliography,
|
|
155
|
+
howTo,
|
|
156
|
+
schemas: [
|
|
157
|
+
{
|
|
158
|
+
'@context': 'https://schema.org',
|
|
159
|
+
'@type': 'SoftwareApplication',
|
|
160
|
+
name: title,
|
|
161
|
+
description: description,
|
|
162
|
+
applicationCategory: 'ScientificApplication',
|
|
163
|
+
operatingSystem: 'Any',
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
'@context': 'https://schema.org',
|
|
167
|
+
'@type': 'FAQPage',
|
|
168
|
+
mainEntity: faq.map((item) => ({
|
|
169
|
+
'@type': 'Question',
|
|
170
|
+
name: item.question,
|
|
171
|
+
acceptedAnswer: {
|
|
172
|
+
'@type': 'Answer',
|
|
173
|
+
text: item.answer,
|
|
174
|
+
},
|
|
175
|
+
})),
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
'@context': 'https://schema.org',
|
|
179
|
+
'@type': 'HowTo',
|
|
180
|
+
name: title,
|
|
181
|
+
step: howTo.map((step) => ({
|
|
182
|
+
'@type': 'HowToStep',
|
|
183
|
+
name: step.name,
|
|
184
|
+
text: step.text,
|
|
185
|
+
})),
|
|
186
|
+
},
|
|
187
|
+
],
|
|
188
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { cosmicInflation } from './entry';
|
|
2
|
+
import type { ToolDefinition } from '../../types';
|
|
3
|
+
|
|
4
|
+
export * from './entry';
|
|
5
|
+
|
|
6
|
+
export const COSMIC_INFLATION_TOOL: ToolDefinition = {
|
|
7
|
+
entry: cosmicInflation,
|
|
8
|
+
Component: () => import('./component.astro'),
|
|
9
|
+
SEOComponent: () => import('./seo.astro'),
|
|
10
|
+
BibliographyComponent: () => import('./bibliography.astro'),
|
|
11
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface InflationResult {
|
|
2
|
+
scaleFactorRatio: number;
|
|
3
|
+
horizonRatio: number;
|
|
4
|
+
finalEnergyDensity: number;
|
|
5
|
+
reheatingTemperature: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export class CosmicInflationEngine {
|
|
9
|
+
public calculate(efolds: number, initialEnergyScaleGev: number): InflationResult {
|
|
10
|
+
const scaleFactorRatio = Math.exp(efolds);
|
|
11
|
+
const horizonRatio = scaleFactorRatio;
|
|
12
|
+
const finalEnergyDensity = Math.pow(initialEnergyScaleGev, 4) * Math.exp(-4 * efolds);
|
|
13
|
+
const reheatingTemperature = initialEnergyScaleGev * Math.exp(-efolds);
|
|
14
|
+
return {
|
|
15
|
+
scaleFactorRatio,
|
|
16
|
+
horizonRatio,
|
|
17
|
+
finalEnergyDensity,
|
|
18
|
+
reheatingTemperature,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { cosmicInflation } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'en' } = Astro.props;
|
|
11
|
+
const content = await cosmicInflation.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -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
|
+
};
|