126 lines
6.7 KiB
HTML
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 & 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>
|