From 2014dcf9b73c3f1eeacd1fa46912a43d599d6e0b Mon Sep 17 00:00:00 2001 From: vini Date: Sun, 19 Jul 2026 11:11:31 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20poeira=20da=20Via=20L=C3=A1ctea=20org?= =?UTF-8?q?=C3=A2nica=20=E2=80=94=20bordas=20suaves,=20manchas,=20Saco=20d?= =?UTF-8?q?e=20Carv=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Substitui as faixas senoidais binárias por: queda quadrática suave nas bordas, caminho/largura irregulares (senos incomensuráveis), escuridão variando em manchas ao longo da banda e nuvens escuras discretas em posições reais (Saco de Carvão junto ao Cruzeiro, Cachimbo em Ofiúco). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_015HtPHsTnDcLVSCiF5FGHZj --- plugin/contents/ui/dancer.html | 45 ++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/plugin/contents/ui/dancer.html b/plugin/contents/ui/dancer.html index ed8919e..53e5f14 100644 --- a/plugin/contents/ui/dancer.html +++ b/plugin/contents/ui/dancer.html @@ -1302,15 +1302,44 @@ function mwColor(dl) { return [mix(255, 236, 186), mix(226, 224, 205), mix(188, 214, 242)]; } -/* Faixas de poeira (Grande Fenda + secundária): 1 = livre, ~0.1 = dentro da poeira */ +/* Nuvens escuras discretas em posições reais aproximadas + (Saco de Carvão junto ao Cruzeiro, região do Cachimbo em Ofiúco...) */ +const MW_DARKS = [ + { l: 303, b: -1.5, rl: 3.5, rb: 3.0, s: 0.85 }, // Saco de Carvão + { l: 357, b: 4.5, rl: 5.0, rb: 2.2, s: 0.80 }, // Cachimbo (Ofiúco) + { l: 31, b: -1.0, rl: 4.0, rb: 1.8, s: 0.75 }, + { l: 16, b: 2.5, rl: 3.0, rb: 1.6, s: 0.70 }, + { l: 344, b: -2.5, rl: 3.2, rb: 1.8, s: 0.70 }, +]; + +/* Contribuição de uma faixa de poeira com borda suave (0 = fora, s = centro) */ +function laneDark(b, center, halfw, strength) { + const d = Math.abs(b - center) / Math.max(halfw, 0.3); + return d >= 1 ? 0 : strength * (1 - d * d) ** 2; +} + +/* Poeira: 1 = céu livre, ->0.08 = poeira densa. Caminhos e larguras + irregulares (senos incomensuráveis) + escuridão em manchas, não uniforme */ function mwDust(l, b, dl) { - if (dl > 100) return 1; - const fade = dl > 70 ? (100 - dl) / 30 : 1; // fenda some longe do centro - const lane1 = Math.abs(b - 1.6 * Math.sin(l * DEG * 2.2)) < - (2.2 + 1.2 * Math.sin(l * 0.7)) * fade; - const lane2 = Math.abs(b + 2.6 - 1.2 * Math.sin(l * DEG * 1.4 + 1.7)) < - (1.3 + 0.8 * Math.sin(l * 1.3 + 0.5)) * fade; - return (lane1 || lane2) ? 0.1 : 1; + if (dl > 105) return 1; + const fade = Math.min(1, (105 - dl) / 35); // fenda some longe do centro + const x = l * DEG; + const wob1 = Math.sin(x * 2.2) + 0.6 * Math.sin(x * 4.9 + 1.7) + + 0.35 * Math.sin(x * 9.3 + 0.6); + const wob2 = Math.sin(x * 1.4 + 1.7) + 0.6 * Math.sin(x * 3.7 + 4.2); + const patch1 = 0.62 + 0.38 * Math.sin(x * 1.1 + 2.9) * Math.sin(x * 2.6 + 0.4); + const patch2 = 0.55 + 0.45 * Math.sin(x * 0.9 + 5.1); + let dark = laneDark(b, 0.9 * wob1, 2.1 + 0.9 * Math.sin(x * 3.3 + 2.2), + 0.9 * patch1); + dark = Math.max(dark, laneDark(b, -2.4 + 0.7 * wob2, + 1.4 + 0.7 * Math.sin(x * 2.8 + 1.1), + 0.8 * patch2)); + for (const d of MW_DARKS) { + const dlc = Math.min(Math.abs(l - d.l), 360 - Math.abs(l - d.l)); + const dd = (dlc / d.rl) ** 2 + ((b - d.b) / d.rb) ** 2; + if (dd < 1) dark = Math.max(dark, d.s * (1 - dd)); + } + return 1 - Math.min(0.92, dark * fade); } /* Nuvens estelares (Scutum, Sagitário, Carina...) — adensamentos fixos na banda */