style(wind): adopt automatically discovered runtime formatting

This commit is contained in:
Bilawal Sidhu committed 2026-09-15 10:54:09 -05:00
1 parent a5dad07cc4
commit 9ae79cf34a
13 files changed
+421 -97

No files matched your search

+24 -6
View File
@@ -1,6 +1,6 @@
/** Normalize a longitude into the half-open world interval. */
export function normalizeLongitude(lon) {
return ((lon + 180) % 360 + 360) % 360 - 180;
return ((((lon + 180) % 360) + 360) % 360) - 180;
}
/** Sample a north-to-south, seam-wrapped wind grid bilinearly. */
@@ -38,23 +38,41 @@ export function windSpeed(u, v) {
/** Map wind magnitude to a fixed CSS colour ramp (calm blue → strong red). */
export function windColor(speed, { max = 30 } = {}) {
const stops = ['#1e3a8a', '#2563eb', '#22d3ee', '#34d399', '#fbbf24', '#f97316', '#ef4444'];
const stops = [
'#1e3a8a',
'#2563eb',
'#22d3ee',
'#34d399',
'#fbbf24',
'#f97316',
'#ef4444',
];
const t = Math.max(0, Math.min(1, speed / max));
const position = t * (stops.length - 1);
const index = Math.min(stops.length - 2, Math.floor(position));
const fraction = position - index;
if (t === 1) return stops.at(-1);
const parse = (color) => color.match(/\w\w/g).map((part) => parseInt(part, 16));
const parse = (color) =>
color.match(/\w\w/g).map((part) => parseInt(part, 16));
const a = parse(stops[index]);
const b = parse(stops[index + 1]);
return `rgb(${a.map((value, i) => Math.round(value + (b[i] - value) * fraction)).join(', ')})`;
}
/** Advance a particle by a wind vector, mutating and returning it. */
export function advectParticle(particle, wind, dtSeconds, { speedScale = 1 } = {}) {
export function advectParticle(
particle,
wind,
dtSeconds,
{ speedScale = 1 } = {},
) {
particle.lon = normalizeLongitude(
particle.lon + (wind.u * dtSeconds * speedScale) / metersPerDegreeLon(particle.lat),
particle.lon +
(wind.u * dtSeconds * speedScale) / metersPerDegreeLon(particle.lat),
);
particle.lat = Math.max(
-89,
Math.min(89, particle.lat + (wind.v * dtSeconds * speedScale) / 111320),
);
particle.lat = Math.max(-89, Math.min(89, particle.lat + (wind.v * dtSeconds * speedScale) / 111320));
return particle;
}