ASTEROID STRIKES
What would an asteroid or comet impact be like? That depends on lots of things, such as how big it is, how fast it’s travelling – and how close you are to the impact site. (Scroll down or go full screen to see what your impact would be like!)
PRESETS
function setControl(input, value) {
input.value = value;
input.dispatchEvent(new Event("input", {bubbles: true}));
return;
}
// TODO - some sort of quarto bug with these!
viewof presetButtons = Inputs.button([
[
html`<img src="/images/comet.png">Comet`,
() => {
setControl(viewof impactAngle, 30);
setControl(viewof startingVelocity, 50000);
setControl(viewof bodyDensity, 1000);
}
],
[
html`<img src="/images/rock-asteroid.png">Rock asteroid`,
() => {
setControl(viewof impactAngle, 30);
setControl(viewof startingVelocity, 16000);
setControl(viewof bodyDensity, 2500);
}
],
[
html`<img src="/images/iron-asteroid.png">Iron asteroid`,
() => {
setControl(viewof impactAngle, 30);
setControl(viewof startingVelocity, 16000);
setControl(viewof bodyDensity, 8000);
}
]
]);
CONTROLS
// L_0
viewof bodyDiameter = Inputs.range(
[0.01, 10000],
{
label: "Body diameter (m)",
value: 5,
transform: Math.log,
format: x => x.toFixed(2)
});
// rho_i
viewof bodyDensity = Inputs.range(
[1000, 10000],
{
label: html`Density (kg/m<sup>3</sup>)`
}
)
// v_0
viewof startingVelocity = Inputs.range(
[15000, 70000],
{
label: html`Speed (km/s)`,
format: x => (x / 1000).toFixed(1) // m/s but display in km/s
}
)
// theta
viewof impactAngle = Inputs.range(
[0.1, 90],
{
label: "Impact angle (°)",
format: x => x.toFixed(1)
});
// angle illustration (updates dynamically with angle changes)
svg`<svg width=70 height=60 aria-hidden="true">
<!-- arrowhead -->
<defs>
<marker id="arrowhead" markerWidth="10" markerHeight="7"
refX="0" refY="3.5" orient="auto" markerUnits="strokeWidth">
<polygon points="0 0, 10 3.5, 0 7" fill="red" />
</marker>
</defs>
<!-- axes -->
<line x1="5" y1="60" x2="60" y2="60" stroke="white"/>
<!-- asteroid -->
<circle cx="60" cy="60" r="5" fill="red"
transform="rotate(-${impactAngle} 10 60)" />
<line x1="60" y1="60" x2="45" y2="60" marker-end="url(#arrowhead)" stroke="red"
transform="rotate(-${impactAngle} 10 60)" />
<text x="5" y="55" font-size="0.5rem" fill="white">${impactAngle.toFixed(1)}°</text>
</svg>`
kineticEnergy =
(Math.PI / 12) *
bodyDensity *
(bodyDiameter ** 3) *
(startingVelocity ** 2);
kineticEnergyTNT = kineticEnergy / (4.18 * (10 ** 15));
function jouleFormat(x) {
return(
x.toLocaleString(undefined,
{ minimumFractionDigits: 0, maximumFractionDigits: 0 }) +
" joules")
}
function tntFormat(mt) {
let tntString = mt >= 1 ?
mt.toLocaleString(undefined,
{ minimumFractionDigits: 0, maximumFractionDigits: 0 }) + " megatonnes" :
mt >= (1 / 1000) ?
(mt * 1000).toFixed(1) + " tonnes" :
mt >= (1 / 1000000) ?
(mt * 1000000).toFixed(1) + " kg" :
(mt * 1000000000).toFixed(1) + " grams";
return(tntString + " of TNT");
}
A body this fast, dense and large would have of energy before it entered the Earth’s atmosphere.
(That’s equivalent to !)
HOW RARE ARE THEY?
recurranceInterval = 109 * (kineticEnergyTNT ** 0.78);
// eq. 3*, 4*
/* NOTE - the errata to collins et al. 2005 has:
T_RL = T_RE / (2 * [1 - cos(delta)])
but i think this is still wrong. i think it's actually:
T_RL = T_RE * 2 / (1 - cos(delta)) */
fractionEarth = 0.5 * (1 - Math.cos(impactDistance / 6371000));
reccuranceIntervalDistance = recurranceInterval / fractionEarth;
function yearFormat(x) {
return(x.toLocaleString(undefined, { minimumFractionDigits: 1, maximumFractionDigits: 1 }))
}
recurranceIntervalString = recurranceInterval >= 1 ?
yearFormat(recurranceInterval) + " years" :
yearFormat(recurranceInterval) >= (1 / 12) ?
(yearFormat(recurranceInterval * 12)) + " months" :
(yearFormat(recurranceInterval * 365)) + " days";
reccuranceIntervalDistanceString = reccuranceIntervalDistance >= 1 ?
yearFormat(reccuranceIntervalDistance) + " years" :
yearFormat(reccuranceIntervalDistance) >= (1 / 12) ?
(yearFormat(reccuranceIntervalDistance * 12)) + " months" :
(yearFormat(reccuranceIntervalDistance * 365)) + " days";
A body with this much energy is expected to land somewhere on Earth every …
… But since only % of the Earth is within km of you, a body like this is only expected to land that close every !
(That’s assuming all parts of the Earth are equally likely to be struck.)
ATMOSPHERIC ENTRY
entryChanges = bodyDiameter < 1000
entryChanges ?
md`` :
md`A body this big wouldn't even lose much mass as it fell through the atmosphere.`
scaleHeight = 8000 // [m]
surfaceAirDensity = 1 // [kg m^-3]
function densityAtHeight(height) {
return(surfaceAirDensity * Math.exp((-height) / scaleHeight));
}
// velocity at a given height (eq. 8*)
function velocityAtHeight(height) {
return(
startingVelocity *
Math.exp(
(3 * densityAtHeight(height) * 2 * scaleHeight) /
(4 * bodyDensity * bodyDiameter *
Math.sin(impactAngle * Math.PI / 180))))
}
yieldStrength = 10 ** (2.107 + (0.0624 * Math.sqrt(bodyDensity)))
// if I_f > 1, ignore beakupHeight - it reaches the surface intact
I_f = 4.07 * (
2 * scaleHeight * yieldStrength /
(bodyDensity * bodyDiameter * (velocityAtHeight(0) ** 2) *
Math.sin(impactAngle)))
// v_i from velocityAtHeight? height 0, since it's impact velocity?
// this is circular >_>
breakupHeight =
(-scaleHeight) * (
Math.log(yieldStrength / (surfaceAirDensity *
(velocityAtHeight(0) ** 2))) +
1.308 -
(0.314 * I_f) -
(1.303 * Math.sqrt(1 - I_f)))
(!burnup) && reachesSurface ?
md`This body would **reach the Earth's surface completely intact.**` :
(!burnup) ?
md`This body would start to break up about
**${(breakupHeight / 1000).toFixed(1)} km** above the Earth's surface. It could hit the ground as a cluster of smaller bodies, or explode in the sky as an airburst.` :
md`A body this small would **burn up completely in the sky!**`
micro = require("micromodal@0.4.10")
micro.init({
awaitOpenAnimation: true,
awaitCloseAnimation: true
});
Use + Remix
These charts, as well as the analyses that underpin them, are available under a Creative Commons Attribution 4.0 licence.
Please acknowledge 360info and our data sources when you use these charts and data.
Embed this chart in your article
Copy and paste the following code:
<iframe
src="https://360info-asteroidimpacts.pages.dev/
calculator" title="What would an asteroid or comet
impact be like? That depends on lots of things,
such as how big it is, how fast it's travelling –
and how close you are to the impact site."
width="450" height="1500" scrolling="yes"
style="border:none;" allowfullscreen></iframe>
This content is subject to 360info’s Terms of Use.
Get the data and code
Visit the GitHub repository to:
About
INTERACTIVE by James Goldie, 360info
These calculations are based on Collins, Melosh & Marcus (2005), who developed them for use in the Earth Impacts Effects Program.
This is a very simplified model of asteroid and comet impacts that is designed for educational purposes.
(A version of the paper that includes errata is also available. We’ve made an additional correction to equation 4.)
Image credits
asteroid-bg.jpg
by Paul Volkmer on Unsplash (CC BY 4.0)comet.png
by Icons8 (Icons8 Free Plan requires attribution)rock-asteroid.png
,iron-asteroid.png
by Icons8 (Icons8 Free Plan requires attribution)