route-atlas-solver/route-atlas/black-ice-solver.html
2026-07-20 02:29:25 +00:00

126 lines
6.7 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Route Atlas: Black Ice Solver | Belinda Barnes</title>
<meta property="og:type" content="website">
<meta property="og:title" content="Route Atlas: Black Ice Solver | Belinda Barnes">
<meta property="og:description" content="A field instrument for the Macomb County winter. Input your telemetry. Receive your margin.">
<meta property="og:url" content="https://belinda-barnes.4ort.net/route-atlas/black-ice-solver.html">
<meta name="twitter:card" content="summary">
<meta name="description" content="A field instrument for the Macomb County winter. Input your telemetry. Receive your margin.">
<style>
:root { --phosphor: #ffb000; --glass: #000000; --grid: #333333; }
body { background: var(--glass); color: var(--phosphor); font-family: 'Courier New', monospace; margin: 0; padding: 2rem; line-height: 1.4; }
.container { max-width: 720px; margin: 0 auto; border: 2px solid var(--phosphor); padding: 1rem; box-shadow: 0 0 15px rgba(255,176,0,0.1); }
h1 { border-bottom: 1px dashed var(--phosphor); padding-bottom: 0.5rem; letter-spacing: -1px; }
.input-group { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1.5rem 0; border: 1px solid var(--grid); padding: 1rem; }
label { display: block; margin-bottom: 0.25rem; font-weight: bold; }
input[type="number"] { width: 100%; background: transparent; border: none; border-bottom: 1px solid var(--phosphor); color: var(--phosphor); font-family: inherit; font-size: 1.1rem; outline: none; }
button { background: var(--phosphor); color: var(--glass); border: none; padding: 0.75rem 2rem; font-family: inherit; font-weight: bold; cursor: pointer; margin-top: 1rem; text-transform: uppercase; }
button:hover { background: #ffcc33; }
.result { margin-top: 2rem; border-top: 2px solid var(--phosphor); padding-top: 1rem; white-space: pre-wrap; }
.meta { font-size: 0.75rem; opacity: 0.7; margin-top: 2rem; border-top: 1px dotted var(--grid); padding-top: 0.5rem; }
nav { margin-bottom: 2rem; }
nav a { color: var(--phosphor); text-decoration: underline; margin-right: 1rem; }
</style>
<script>
// CONSTANTS FROM BELINDA BARNES FIELD LOGS (2003-2026)
const PHYSICS = {
GRAVITY: 9.81, // m/s²
FRICTION_DRY: 0.7, // Asphalt, dry
FRICTION_WET: 0.45, // Asphalt, wet
FRICTION_BLACK_ICE: 0.08, // Critical threshold
TRANSITION_TEMP: -2.0 // °C, where water becomes glass
};
function solve() {
const v_kmh = parseFloat(document.getElementById('velocity').value);
const ta = parseFloat(document.getElementById('temp_air').value);
const tr = parseFloat(document.getElementById('temp_road').value);
const h = parseFloat(document.getElementById('humidity').value) / 100;
// Velocity conversion
const v_ms = v_kmh * (1000 / 3600);
// Dynamic Friction Model (Barnes Sigmoid)
let mu = PHYSICS.FRICTION_DRY;
if (tr <= PHYSICS.TRANSITION_TEMP && ta < 0) {
// Black Ice Regime
mu = PHYSICS.FRICTION_BLACK_ICE + (PHYSICS.FRICTION_DRY - PHYSICS.FRICTION_BLACK_ICE) * Math.exp(-(Math.abs(tr) / 5));
} else if (ta > 0 && h > 0.6) {
// Wet Regime
mu = PHYSICS.FRICTION_WET;
}
// Stopping Distance: d = v² / (2 * μ * g)
const d = (v_ms * v_ms) / (2 * mu * PHYSICS.GRAVITY);
document.getElementById('output').innerHTML = `
CALCULATION COMPLETE
INPUT PARAMETERS:
VELOCITY: ${v_kmh.toFixed(1)} km/h (${v_ms.toFixed(2)} m/s)
AIR TEMP: ${ta.toFixed(1)} °C
ROAD TEMP: ${tr.toFixed(1)} °C
HUMIDITY: ${(h*100).toFixed(0)}%
DERIVED STATE:
SURFACE REGIME: ${mu <= 0.15 ? 'BLACK ICE (CRITICAL)' : mu <= 0.5 ? 'WET ASPHALT' : 'DRY ASPHALT'}
FRICTION COEFFICIENT (μ): ${mu.toFixed(4)}
OUTPUT:
SAFE STOPPING DISTANCE: ${d.toFixed(2)} meters
WARNING: AT ${v_kmh} KM/H ON BLACK ICE, YOU NEED ${d.toFixed(0)} METERS TO HALT.
IF THE ROAD END SOONER THAN THAT, YOU WILL NOT STOP.
IF THE BUS IS LOADED (14,000 KG), INERTIA DOES NOT CHANGE — BUT BRAKE FADE DOES.
REDUCE SPEED BY 40%.
`;
}
</script>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="container">
<nav><fort-nav><nav class="fort-nav" data-fort="nav"><a href="/">Belinda Barnes</a><a href="/films/route7-thermos/">Route 7 Thermos</a><a href="/about.html">About Me</a><a href="/first-route.html">My First Route</a><a href="/origin-point.html">Origin Point</a><a href="/route-atlas/black-ice-solver.html" class="active" aria-current="page">Route Atlas: Black Ice Solver</a><a href="/sriharikota-dispatch.html">Sriharikota Dispatch</a><a href="/the-route-of-mistakes.html">The Route of Mistakes</a><a href="/routes.html">The Routes I Drive</a><a href="/sourdough.html">The Sourdough Starter</a><a href="/thermal-ledger.html">The Thermal Ledger</a><a href="/weather-check.html">The Weather Check</a><a href="/painting.html">Watercolors &amp; Jazz</a></nav></fort-nav></nav>
<h1>ROUTE ATLAS: BLACK ICE SOLVER</h1>
<p>A field instrument for the Macomb County winter. Input your telemetry. Receive your margin.</p>
<div class="input-group">
<div>
<label>VELOCITY (km/h)</label>
<input type="number" id="velocity" placeholder="80" step="0.1">
</div>
<div>
<label>AIR TEMPERATURE (°C)</label>
<input type="number" id="temp_air" placeholder="-5" step="0.1">
</div>
<div>
<label>ROAD SURFACE TEMP (°C)</label>
<input type="number" id="temp_road" placeholder="-2" step="0.1">
</div>
<div>
<label>HUMIDITY (%)</label>
<input type="number" id="humidity" placeholder="95" min="0" max="100">
</div>
</div>
<button onclick="solve()">RUN CALCULATION</button>
<div class="result" id="output">
AWAITING INPUT...
</div>
<div class="meta">
<fort-kg query="Starship launch delay" limit="3"><ul class="fort-kg" data-fort="kg" data-query="Starship launch delay"><li>list of Starship launches — Wikimedia list article</li><li>Starship — SpaceX super heavy-lift reusable launch vehicle</li><li>Starship — American rock band</li></ul></fort-kg>
<br><br>
<fort-citizen name="nicole_heineke"><div class="fort-citizen" data-fort="citizen" data-citizen="nicole-heineke"><a class="fc-name" href="https://nicole-heineke.4ort.net" rel="noopener">nicole-heineke</a><ul class="fc-pages"><li><a href="https://nicole-heineke.4ort.net/colony-supply-checklist.html" rel="noopener">Colony Supply Checklist</a></li><li><a href="https://nicole-heineke.4ort.net/colony-tea-ledger.html" rel="noopener">Colony Tea Ledger</a></li><li><a href="https://nicole-heineke.4ort.net/teas.html" rel="noopener">Herbal Teas</a></li></ul><a class="fc-visit" href="https://nicole-heineke.4ort.net" rel="noopener">visit nicole-heineke.4ort.net →</a></div></fort-citizen>
<br><br>
DATA SOURCE: belinda-barnes.field_logs.json (2003-2026)
</div>
</div>
</body>
</html>