Stylize Moon and planet visibility

This commit is contained in:
vini 2026-07-19 16:06:43 -03:00
parent e262395fb3
commit 4e31217186

View file

@ -1269,13 +1269,13 @@ const TWINKLE_MAG = 4.0; // até esta magnitude a estrela cintila; acima é e
const DEG = Math.PI / 180;
window.__skyTimeOffset = 0; // debug: ms somados ao relógio p/ testar a rotação
const PLANET_SPECS = [
[Astronomy.Body.Mercury, 'Mercúrio', [205, 190, 165], 2439.7],
[Astronomy.Body.Venus, 'Vênus', [255, 232, 180], 6051.8],
[Astronomy.Body.Mars, 'Marte', [255, 120, 82], 3389.5],
[Astronomy.Body.Jupiter, 'Júpiter', [255, 218, 170], 69911],
[Astronomy.Body.Saturn, 'Saturno', [238, 205, 135], 58232],
[Astronomy.Body.Uranus, 'Urano', [145, 225, 235], 25362],
[Astronomy.Body.Neptune, 'Netuno', [105, 150, 255], 24622],
[Astronomy.Body.Mercury, 'Mercúrio', [190, 188, 182]],
[Astronomy.Body.Venus, 'Vênus', [255, 241, 204]],
[Astronomy.Body.Mars, 'Marte', [238, 105, 70]],
[Astronomy.Body.Jupiter, 'Júpiter', [232, 202, 164]],
[Astronomy.Body.Saturn, 'Saturno', [224, 195, 128]],
[Astronomy.Body.Uranus, 'Urano', [151, 223, 226]],
[Astronomy.Body.Neptune, 'Netuno', [91, 126, 220]],
];
const KM_PER_AU = 149597870.7;
const MOON_RADIUS_KM = 1737.4;
@ -1841,7 +1841,8 @@ function updateSolarSystem(date, lst, W, H, horizonPx) {
const angularRadiusPx = (radiusKm, distanceAu) =>
Math.asin(Math.min(1, radiusKm / (distanceAu * KM_PER_AU))) / DEG *
(horizonPx / ALT_TOP);
const moonRadius = angularRadiusPx(MOON_RADIUS_KM, moonCoords.eq.dist);
const realMoonRadius = angularRadiusPx(MOON_RADIUS_KM, moonCoords.eq.dist);
const moonRadius = Math.max(realMoonRadius, Math.min(18, H * 0.0075));
/* Transformação vetorial oficial do exemplo camera.js do Astronomy
Engine: ângulo do limbo claro em relação ao alto do horizonte. */
@ -1864,14 +1865,16 @@ function updateSolarSystem(date, lst, W, H, horizonPx) {
} : null;
const planets = [];
for (const [body, name, color, radiusKm] of PLANET_SPECS) {
for (const [body, name, color] of PLANET_SPECS) {
const coords = bodyCoordinates(body);
if (!coords.sc) continue;
const illumination = Astronomy.Illumination(body, date);
planets.push({
...coords.sc, alt: coords.aa.alt, az: coords.aa.az, name, color, body,
magnitude: illumination.mag,
radius: Math.max(0.55, angularRadiusPx(radiusKm, coords.eq.dist)),
/* Tamanho visual ampliado por magnitude: os discos angulares reais
seriam subpixel, mas posição e brilho relativo continuam reais. */
radius: Math.max(1.8, Math.min(5.2, 3.45 - illumination.mag * 0.46)),
});
}
solarSystemFrame = { moon, planets };