Initial commit
This commit is contained in:
commit
87035de28c
4 changed files with 93 additions and 0 deletions
15
.gitignore
vendored
Normal file
15
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
.dub
|
||||
docs.json
|
||||
__dummy.html
|
||||
docs/
|
||||
/physics
|
||||
physics.so
|
||||
physics.dylib
|
||||
physics.dll
|
||||
physics.a
|
||||
physics.lib
|
||||
physics-test-*
|
||||
*.exe
|
||||
*.o
|
||||
*.obj
|
||||
*.lst
|
||||
13
dub.json
Normal file
13
dub.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"authors": [
|
||||
"Jonathan Harker"
|
||||
],
|
||||
"copyright": "Copyright © 2021, Jonathan Harker",
|
||||
"dependencies": {
|
||||
"quantities": "~>0.11.0",
|
||||
"simpleconfig": "~>0.3.0"
|
||||
},
|
||||
"description": "A tiny physics calculator",
|
||||
"license": "AGPL3",
|
||||
"name": "physics"
|
||||
}
|
||||
7
dub.selections.json
Normal file
7
dub.selections.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"fileVersion": 1,
|
||||
"versions": {
|
||||
"quantities": "0.11.0",
|
||||
"simpleconfig": "0.3.0"
|
||||
}
|
||||
}
|
||||
58
source/app.d
Normal file
58
source/app.d
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
import std.conv;
|
||||
import std.getopt;
|
||||
import std.stdio;
|
||||
import std.string;
|
||||
import quantities.runtime;
|
||||
import quantities.si;
|
||||
|
||||
// Aaceleration limits (in g):
|
||||
const double lossOfConsciousness = 15.0;
|
||||
const double internalInjuries = 25.0;
|
||||
const double fatal = 40.0;
|
||||
const double puree = 100.0;
|
||||
|
||||
const Acceleration g = 9.8 * metre / second /second; // about 35.3 km/h/s
|
||||
const Mass typicalHuman = 80 * kilogram;
|
||||
|
||||
double getVelocity() {
|
||||
string v = "";
|
||||
while (!isNumeric(v)) {
|
||||
write("How fast was The Flash going? Enter a speed, as km/h: ");
|
||||
v = readln().strip();
|
||||
}
|
||||
return to!double(v);
|
||||
}
|
||||
|
||||
void main(string[] argv) {
|
||||
double velocity = 0;
|
||||
auto args = getopt(argv,
|
||||
"velocity|v", "How fast The Flash was going", &velocity
|
||||
);
|
||||
if (args.helpWanted) {
|
||||
defaultGetoptPrinter("A stupid superhero physics calculator.", args.options);
|
||||
return;
|
||||
}
|
||||
writeln("Hello, welcome to the stupid superhero physics calculator.");
|
||||
if (!velocity) velocity = getVelocity();
|
||||
|
||||
// v = vᵢ + at; vᵢ = 0, ∴ v = at, a = v/t
|
||||
Speed v = parseSI!Speed(format!"%s km/h"(velocity));
|
||||
Time t = 0.1 * second;
|
||||
Acceleration a = v / t;
|
||||
// F = ma
|
||||
Force f = typicalHuman * a;
|
||||
double accel_g = a / g;
|
||||
|
||||
writefln("The Flash goes from stand-still to %s in a tenth of a second, thus accelerating at %.1f g.", "%.0f km/h".siFormat(v), accel_g);
|
||||
writefln("This would exert a force of %s on a typical human body.", "%.1f kN".siFormat(f));
|
||||
|
||||
if (accel_g > puree) {
|
||||
writefln("Accelerating humans at over %.0f g requires hosing down afterwards.", puree);
|
||||
} else if (accel_g > fatal) {
|
||||
writefln("Accelerating humans at over %.0f g is usually fatal.", fatal);
|
||||
} else if (accel_g > internalInjuries) {
|
||||
writefln("Accelerating humans at over %.0f g results in injuries including internal bleeding.", internalInjuries);
|
||||
} else if (accel_g > lossOfConsciousness) {
|
||||
writefln("Accelerating humans at over %.0f g results in loss of consciousness.", lossOfConsciousness);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue