Asteroid temperatur eingebaut

This commit is contained in:
2026-04-23 10:30:02 +02:00
parent 9138b542ac
commit 79fc30c212
14 changed files with 378 additions and 0 deletions
+376
View File
@@ -0,0 +1,376 @@
<?php
declare(strict_types=1);
ini_set('display_errors', '1');
error_reporting(E_ALL);
session_start();
$loggedIn = isset($_SESSION['user_id']);
$pageTitle = 'Asteroidtemperatur – AstroTools';
$headerIntroPre = 'Astronomie-Werkzeuge';
$headerIntroTitle = 'Asteroid-Temperaturrechner';
$headerIntroSub = 'Gleichgewichts- und Subsolartemperatur eines Asteroiden berechnen (NEATM).';
?>
<?php require __DIR__ . '/header.php'; ?>
<style>
.at-layout {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.5rem;
align-items: start;
}
@media (max-width: 700px) {
.at-layout { grid-template-columns: 1fr; }
}
.at-param-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0.75rem 1rem;
}
@media (max-width: 480px) {
.at-param-grid { grid-template-columns: 1fr; }
}
.at-param {
display: flex;
flex-direction: column;
gap: 0.3rem;
}
.at-param label {
font-size: 0.78rem;
color: var(--text-dim);
letter-spacing: 0.04em;
}
.at-param input[type=range] {
width: 100%;
accent-color: var(--gold);
cursor: pointer;
}
.at-param .at-num {
display: flex;
align-items: center;
gap: 0.5rem;
}
.at-param .at-num input[type=number] {
flex: 1;
background: var(--bg);
border: 1px solid var(--border);
border-radius: var(--radius);
color: var(--text);
padding: 0.35rem 0.6rem;
font-size: 0.92rem;
min-width: 0;
}
.at-param .at-num input[type=number]:focus {
outline: none;
border-color: var(--gold-dim);
}
.at-param .at-unit {
font-size: 0.78rem;
color: var(--text-dim);
white-space: nowrap;
}
.at-hint {
font-size: 0.75rem;
color: var(--text-dim);
line-height: 1.45;
min-height: 2.2em;
}
/* Ergebnisse */
.at-results {
display: flex;
flex-direction: column;
gap: 1rem;
}
.at-result-row {
display: flex;
align-items: baseline;
gap: 0.6rem;
flex-wrap: wrap;
}
.at-result-label {
font-size: 0.78rem;
color: var(--text-dim);
min-width: 4.5rem;
}
.at-result-sym {
font-family: 'Georgia', serif;
font-style: italic;
color: var(--gold-pale);
font-size: 1rem;
min-width: 3rem;
}
.at-result-val {
font-size: 1.45rem;
font-weight: 600;
color: var(--gold);
letter-spacing: 0.01em;
}
.at-result-c {
font-size: 0.9rem;
color: var(--text-dim);
}
/* Albedo-Vorschau */
.at-albedo-wrap {
display: flex;
align-items: center;
gap: 0.75rem;
margin-top: 0.5rem;
}
.at-albedo-swatch {
width: 2.2rem;
height: 2.2rem;
border-radius: 50%;
border: 1px solid var(--border);
flex-shrink: 0;
transition: background 0.2s;
}
.at-albedo-label {
font-size: 0.78rem;
color: var(--text-dim);
}
/* Preset-Buttons */
.at-presets {
display: flex;
flex-wrap: wrap;
gap: 0.45rem;
margin-top: 0.25rem;
}
/* Trennlinie */
.at-divider {
border: none;
border-top: 1px solid var(--border);
margin: 0.75rem 0;
}
</style>
<div class="at-layout">
<!-- Linke Spalte: Eingaben -->
<div class="card">
<h2>Parameter</h2>
<div class="at-param-grid">
<div class="at-param">
<label for="at-r">Sonnenabstand <em>r</em></label>
<div class="at-num">
<input type="number" id="at-r" min="0.05" max="50" step="0.01" value="1.00">
<span class="at-unit">AE</span>
</div>
<input type="range" id="at-r-slider" min="0.05" max="10" step="0.01" value="1.00">
<p class="at-hint">Abstand zur Sonne in Astronomischen Einheiten. Einstrahlung skaliert mit 1/r².</p>
</div>
<div class="at-param">
<label for="at-a">Bond-Albedo <em>A</em></label>
<div class="at-num">
<input type="number" id="at-a" min="0" max="0.999" step="0.001" value="0.050">
<span class="at-unit">0–1</span>
</div>
<input type="range" id="at-a-slider" min="0" max="0.999" step="0.001" value="0.050">
<p class="at-hint">Anteil der reflektierten Gesamtenergie. Dunkel ≈ 0,02–0,10.</p>
</div>
<div class="at-param">
<label for="at-eps">Emissivität <em>ε</em></label>
<div class="at-num">
<input type="number" id="at-eps" min="0.01" max="1" step="0.01" value="0.90">
<span class="at-unit">0–1</span>
</div>
<input type="range" id="at-eps-slider" min="0.01" max="1" step="0.01" value="0.90">
<p class="at-hint">Wie gut die Oberfläche Wärme abstrahlt. Typisch 0,90–0,95.</p>
</div>
<div class="at-param">
<label for="at-eta">Beaming-Faktor <em>η</em></label>
<div class="at-num">
<input type="number" id="at-eta" min="0.1" max="3" step="0.01" value="1.00">
<span class="at-unit">&gt; 0</span>
</div>
<input type="range" id="at-eta-slider" min="0.1" max="3" step="0.01" value="1.00">
<p class="at-hint">Rauigkeits-/Anisotropie-Korrektur. Typisch 0,7–1,4; Standard 1,0.</p>
</div>
</div>
<hr class="at-divider">
<div class="at-albedo-wrap">
<div class="at-albedo-swatch" id="at-albedo-swatch"></div>
<span class="at-albedo-label">Albedo-Vorschau (Helligkeit der Oberfläche)</span>
</div>
<hr class="at-divider">
<p class="at-albedo-label" style="margin-bottom:0.4rem;">Bekannte Asteroiden</p>
<div class="at-presets">
<button class="btn btn-sm btn-secondary" data-preset="c">C-Typ</button>
<button class="btn btn-sm btn-secondary" data-preset="s">S-Typ</button>
<button class="btn btn-sm btn-secondary" data-preset="vesta">Vesta</button>
<button class="btn btn-sm btn-secondary" data-preset="eros">Eros</button>
<button class="btn btn-sm btn-secondary" data-preset="bennu">Bennu</button>
<button class="btn btn-sm btn-secondary" data-preset="ryugu">Ryugu</button>
<button class="btn btn-sm btn-secondary" data-preset="neufang">(2183) Neufang</button>
<button class="btn btn-sm btn-danger" id="at-reset">Zurücksetzen</button>
</div>
</div>
<!-- Rechte Spalte: Ergebnisse + Erklärung -->
<div style="display:flex;flex-direction:column;gap:1.25rem;">
<div class="card">
<h2>Temperaturen</h2>
<div class="at-results">
<div>
<div class="at-result-row">
<span class="at-result-label">Gleichgewicht</span>
<span class="at-result-sym">T<sub>eq</sub></span>
<span class="at-result-val" id="at-teq-k">–</span>
<span class="at-result-c" id="at-teq-c"></span>
</div>
<p class="at-hint" style="margin-top:0.25rem;">Isotherme Gleichgewichtstemperatur — globaler Mittelwert über die gesamte Oberfläche.</p>
</div>
<hr class="at-divider">
<div>
<div class="at-result-row">
<span class="at-result-label">Subsolar</span>
<span class="at-result-sym">T<sub>ss</sub></span>
<span class="at-result-val" id="at-tss-k">–</span>
<span class="at-result-c" id="at-tss-c"></span>
</div>
<p class="at-hint" style="margin-top:0.25rem;">Subsolartemperatur — heißester Punkt direkt unter der Sonne auf der Tagseite.</p>
</div>
</div>
</div>
<div class="card">
<h2>Formeln</h2>
<table class="data-table">
<tr><td>T<sub>eq</sub></td><td>⁴√[ (1−A)·S / (4·ε·σ·η) ]</td></tr>
<tr><td>T<sub>ss</sub></td><td>⁴√[ (1−A)·S / (ε·σ·η) ]</td></tr>
<tr><td>S</td><td>S₀ / r² &nbsp;mit S₀ = 1361 W/m²</td></tr>
<tr><td>σ</td><td>5,670 × 10⁻⁸ W m⁻² K⁻⁴</td></tr>
</table>
<p class="hint" style="margin-top:0.75rem;">
Modell: NEATM (Near-Earth Asteroid Thermal Model).
T<sub>ss</sub> = 4<sup>¼</sup> · T<sub>eq</sub> ≈ 1,414 · T<sub>eq</sub>.
</p>
</div>
</div>
</div>
<script>
(function () {
const SIGMA = 5.670374419e-8;
const S0 = 1361.0;
const PRESETS = {
default: { r: 1.00, A: 0.050, eps: 0.90, eta: 1.00 },
c: { r: 2.50, A: 0.040, eps: 0.90, eta: 1.00 },
s: { r: 2.00, A: 0.150, eps: 0.90, eta: 1.00 },
vesta: { r: 2.36, A: 0.200, eps: 0.90, eta: 1.00 },
eros: { r: 1.46, A: 0.120, eps: 0.90, eta: 1.00 },
bennu: { r: 1.13, A: 0.020, eps: 0.90, eta: 1.00 },
ryugu: { r: 1.19, A: 0.020, eps: 0.90, eta: 1.00 },
neufang: { r: 3.01, A: 0.045, eps: 0.90, eta: 1.00 },
};
const numR = document.getElementById('at-r');
const numA = document.getElementById('at-a');
const numEps = document.getElementById('at-eps');
const numEta = document.getElementById('at-eta');
const sldR = document.getElementById('at-r-slider');
const sldA = document.getElementById('at-a-slider');
const sldEps = document.getElementById('at-eps-slider');
const sldEta = document.getElementById('at-eta-slider');
const outTeqK = document.getElementById('at-teq-k');
const outTeqC = document.getElementById('at-teq-c');
const outTssK = document.getElementById('at-tss-k');
const outTssC = document.getElementById('at-tss-c');
const swatch = document.getElementById('at-albedo-swatch');
function fmt(val, decimals = 2) {
return val.toFixed(decimals).replace('.', ',');
}
function calculate() {
const r = parseFloat(numR.value);
const A = parseFloat(numA.value);
const eps = parseFloat(numEps.value);
const eta = parseFloat(numEta.value);
if (!isFinite(r) || r <= 0 || !isFinite(A) || A < 0 || A >= 1 ||
!isFinite(eps) || eps <= 0 || !isFinite(eta) || eta <= 0) {
outTeqK.textContent = '–';
outTeqC.textContent = '';
outTssK.textContent = '–';
outTssC.textContent = '';
return;
}
const S = S0 / (r * r);
const Teq = Math.pow((1 - A) * S / (4.0 * eps * SIGMA * eta), 0.25);
const Tss = Math.pow((1 - A) * S / ( eps * SIGMA * eta), 0.25);
outTeqK.textContent = fmt(Teq, 2) + ' K';
outTeqC.textContent = '(' + fmt(Teq - 273.15, 2) + ' °C)';
outTssK.textContent = fmt(Tss, 2) + ' K';
outTssC.textContent = '(' + fmt(Tss - 273.15, 2) + ' °C)';
const v = Math.round(Math.min(1, Math.max(0, A)) * 255);
swatch.style.background = `rgb(${v},${v},${v})`;
}
function sync(numInput, slider) {
numInput.addEventListener('input', () => {
slider.value = numInput.value;
calculate();
});
slider.addEventListener('input', () => {
numInput.value = slider.value;
calculate();
});
}
sync(numR, sldR);
sync(numA, sldA);
sync(numEps, sldEps);
sync(numEta, sldEta);
function applyPreset(p) {
numR.value = sldR.value = p.r;
numA.value = sldA.value = p.A;
numEps.value = sldEps.value = p.eps;
numEta.value = sldEta.value = p.eta;
calculate();
}
document.querySelectorAll('[data-preset]').forEach(btn => {
btn.addEventListener('click', () => {
const key = btn.dataset.preset;
if (PRESETS[key]) applyPreset(PRESETS[key]);
});
});
document.getElementById('at-reset').addEventListener('click', () => {
applyPreset(PRESETS.default);
});
calculate();
})();
</script>
<?php require __DIR__ . '/footer.php'; ?>
+1
View File
@@ -134,5 +134,6 @@ function manageablePublicPages(): array
'moonyear.php' => 'Mondphasen-Jahresübersicht',
'wochenvorhersage.php' => 'Wochenvorhersage',
'satellitenhimmel.php' => 'Satellitenhimmel',
'asteroid_temp.php' => 'Asteroid-Temperatur',
];
}
+1
View File
@@ -153,6 +153,7 @@ $menuGroups = [
['href' => 'sternenhimmel.php', 'label' => 'Sternenhimmel'],
['href' => 'satellitenhimmel.php', 'label' => 'Satellitenhimmel'],
['href' => 'meteorshowers.php', 'label' => 'Meteorströme'],
['href' => 'asteroid_temp.php', 'label' => 'Asteroid-Temperatur'],
['href' => 'geocron/index.php', 'label' => 'Geocron'],
['href' => 'geocron3d.php', 'label' => 'Geocron 3D'],
['href' => 'geocron3d_C.php', 'label' => 'Geocron 3D Cesium'],
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.