sourcehypertextpubliclatbstoolsen.pug

//- meta
	slug: "latbs/tools"
	lang: en
	title: "Tools"
	category: meta
	pageCreated: "2024-04-03"
	pageUpdated: "2025-11-08"

extends ../../../views/latbs/layout.pug

append cosmetics
	link(rel="stylesheet", href="/latbs/tools/tools.css")
	script(src="/cosmetics/d3.v7.min.js")
	script(src="/latbs/tools/kepler.js")

block content
	p Here are some useful tools i made for my own reference while worldbuilding. They are only loosely accurate and probably contain bugs and errors. If you are an astrophysicist and you use this to plan your mission it is your own fault if it crashes.
	+h2("Communications time calculator")
	p Three hundred million metres per second — it’s not just a good idea; it’s the law!
	#commtimecalc.tool
		div#commtimecalc-entry
			| Sending a message from 
			select#commtimecalc-planet1(onchange="showCommTime()")
				option(value="hermes") Hermes (Mercury)
				option(value="venus") Venus
				option(value="earth" selected) Earth
				option(value="mars") Mars
				option(value="ceres") Ceres
				option(value="jupiter") Jupiter
				option(value="saturn") Saturn
				option(value="ouranos") Ouranos (Uranus)
				option(value="neptune") Neptune
				option(value="pluto") Pluto
				option(value="haumea") Haumea
				option(value="makemake") Makemake
				option(value="persephone") Persephone (Eris)
				option(value="sedna") Sedna
			|  to 
			select#commtimecalc-planet2(onchange="showCommTime()")
				option(value="hermes") Hermes (Mercury)
				option(value="venus") Venus
				option(value="earth") Earth
				option(value="mars" selected) Mars
				option(value="ceres") Ceres
				option(value="jupiter") Jupiter
				option(value="saturn") Saturn
				option(value="ouranos") Ouranos (Uranus)
				option(value="neptune") Neptune
				option(value="pluto") Pluto
				option(value="haumea") Haumea
				option(value="makemake") Makemake
				option(value="persephone") Persephone (Eris)
				option(value="sedna") Sedna
			|  at 
			input#commtimecalc-date(type="datetime-local" value="2558-05-26T12:00" min="1950-01-01T12:00" max="2600-01-01T12:00" onchange="showCommTime()")
			|  #[+sc("UT")] would take about…
		strong#commtimecalc-daily-result 11 minutes, 42 seconds
		div.table-container#commtimecalc-weekly-table
			table
				thead
					tr
						th(colspan=2) Other dates around then
				tbody
					tr
						td 3 days ago
						td: b 11m 51s
					tr
						td 2 days ago
						td: b 11m 48s
					tr
						td Yesterday
						td: b 11m 45s
					tr
						td Today
						td: b 11m 42s
					tr
						td Tomorrow
						td: b 11m 39s
					tr
						td In 2 days
						td: b 11m 36s
					tr
						td In 3 days
						td: b 11m 33s
	+h2("Orrery")
	#orrery-tool.tool
		svg#orrery-plot
			g#orrery-graticule
			g#orrery-chart
				g#orrery-orbits
				g#orrery-circles
		div#orrery-controls
			label(for="orrery-date") Date
			input#orrery-date(type="datetime-local" value="2558-05-26T12:00" min="1950-01-01T12:00" max="2600-01-01T12:00")
			div#orrery-date-buttons
					button.date-button.long-db(onclick='todayOrrDate();') Today
					button.date-button.long-db(onclick='resetOrrDate();') 2558
					button.date-button(onclick='shiftOrrDate(3652.5);') +10y
					button.date-button(onclick='shiftOrrDate(365.25);') +1y
					button.date-button(onclick='shiftOrrDate(30);') +30d
					button.date-button(onclick='shiftOrrDate(1);') +1d
					button.date-button(onclick='shiftOrrDate(-3652.5);') -10y
					button.date-button(onclick='shiftOrrDate(-365.25);') -1y
					button.date-button(onclick='shiftOrrDate(-30);') -30d
					button.date-button(onclick='shiftOrrDate(-1);') -1d
			
			label(for="orrery-perspective-slider") Perspective
			div#orrery-perspective
				input#orrery-perspective-slider(type="range" min="0" max="90" value="90")
				div
					div.orrery-dinkus#orrery-perspective-dinkus 90°
			
			label(for="orrery-zoom") Zoom
			div#orrery-zoom
				div#orrery-zoom-dinkus-container
					div.orrery-dinkus#orrery-zoom-dinkus 15 Tm
				input#orrery-zoom-slider(type="range" min="11" max="13.5228787" step="any" list="orrery-zoom-list" value="12.69897")
				datalist#orrery-zoom-list
					option(value="13" label="Persephone")
					option(value="12.69897" label="Pluto")
					option(value="12.12493" label="Saturn")
					option(value="11.8239" label="Jupiter")
					option(value="11.30103" label="Earth")
	+h2("Porkchop plotter")
	p A porkchop plot shows how expensive a trip from one planet to another will be in terms of delta-#[var v]#[+sn(1)] depending on when you set out and when you arrive. This doesn’t matter so much in the outer system, where most transport is via titanic torqued-up torchships that can get you anywhere, any time, so long as you don’t point the exhaust the wrong way and kill millions of people, but in the inner system, where distances are comparatively lesser, ships less powerful, and waiting times not #[em so] bad, waiting for the right launch window is everything.
	+sn(1)
		p #[i A quick rocket-science digression:] delta-#[var v] is the total change in velocity your spacecraft needs to make over its mission. More delta-#[var v] means you’ll have to carry along exponentially more fuel, thanks to that bastard Tsiolkovsky and his rocket equation, so minimising it is important if you want to get off the ground.
		p Note that since it represents the #[em total] change in velocity over the whole trip, rather than the rate of change, it’s measured in plain old metres per second, rather than metres per second squared. If you want to convert that into miles or astronomical units or Martian secs or hours, please direct all inquiries into the nearest graveyard orbit.
	#porkchop.tool
		div#porkchop-entry
			| I would like to get from 
			select#porkchop-planet1
				option(value="hermes") Hermes (Mercury)
				option(value="venus") Venus
				option(value="earth" selected) Earth
				option(value="mars") Mars
				option(value="ceres") Ceres
				option(value="jupiter") Jupiter
				option(value="saturn") Saturn
				option(value="ouranos") Ouranos (Uranus)
				option(value="neptune") Neptune
				option(value="pluto") Pluto
				option(value="haumea") Haumea
				option(value="makemake") Makemake
				option(value="persephone") Persephone (Eris)
				option(value="sedna") Sedna
			|  to 
			select#porkchop-planet2
				option(value="hermes") Hermes (Mercury)
				option(value="venus") Venus
				option(value="earth") Earth
				option(value="mars" selected) Mars
				option(value="ceres") Ceres
				option(value="jupiter") Jupiter
				option(value="saturn") Saturn
				option(value="ouranos") Ouranos (Uranus)
				option(value="neptune") Neptune
				option(value="pluto") Pluto
				option(value="haumea") Haumea
				option(value="makemake") Makemake
				option(value="persephone") Persephone (Eris)
				option(value="sedna") Sedna
			| , departing in 
			input#porkchop-departure(type="number" value="2020" min="1950" max="2600" step="1")
			| . 
			button#porkchop-calculate(onclick="showPorkchop()") Calculate
		svg#porkchop-plot