forked from Khan/khan-exercises
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkinematics.js
94 lines (80 loc) · 2.22 KB
/
kinematics.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
jQuery.extend(KhanUtil, {
PRECISION: 2,
VARIABLES: ["d", "v_i", "v_f", "a", "t"],
UNITS: {
"d": "\\text{m}",
"v_i": "\\frac{\\text{m}}{\\text{s}}",
"v_f": "\\frac{\\text{m}}{\\text{s}}",
"a": "\\frac{\\text{m}}{\\text{s}^2}",
"t": "\\text{s}"
},
rollUnknowns: function() {
var omitted, unknown;
do {
omitted = KhanUtil.randFromArray(KhanUtil.VARIABLES);
unknown = KhanUtil.randFromArray(KhanUtil.VARIABLES);
} while (omitted === unknown);
return [omitted, unknown];
},
randomFreefallMotion: function() {
var accel = -9.8;
var v_init = (KhanUtil.rand(2) ? 0 : KhanUtil.randRange(-100, 300)/10);
var time = KhanUtil.randRange(0, 200)/10;
var disp = v_init*time + (1/2)*accel*time*time;
var v_final = v_init + accel * time;
var unknowns = KhanUtil.rollUnknowns();
return {
d: disp,
v_i: v_init,
v_f: v_final,
a: accel,
t: time,
omitted: unknowns[0],
unknown: unknowns[1]
};
},
randomConstantMotion: function() {
var accel = 0;
var time = KhanUtil.randRange(1, 25);
var veloc = KhanUtil.randRange(5, 25);
var disp = time * veloc;
var unknowns;
do {
unknowns = KhanUtil.rollUnknowns();
} while ( ( unknowns[0] === "d" && unknowns[1] === "t" ) ||
( unknowns[0] === "t" && unknowns[1] === "d" ) );
return {
d: disp,
v_i: veloc,
v_f: veloc,
a: accel,
t: time,
omitted: unknowns[0],
unknown: unknowns[1]
};
},
randomAccelMotion: function() {
// generated numbers are going to be messy anyway, so might as well
// make them all messy
var accel = KhanUtil.randRangeNonZero(-200, 200)/10;
var v_init = KhanUtil.randRange(-400, 400)/10;
var time = KhanUtil.randRange(100, 200)/10;
var disp = v_init * time + (1/2) * accel * time * time;
var v_final = v_init + accel * time;
var unknowns = KhanUtil.rollUnknowns();
return {
d: disp,
v_i: v_init,
v_f: v_final,
a: accel,
t: time,
omitted: unknowns[0],
unknown: unknowns[1]
};
},
// Returns a string containing the value and the associated unit
// for the value (determined by the variable, e.g. "d" or "t")
u: function( motion, variable ) {
return KhanUtil.roundTo(KhanUtil.PRECISION, motion[variable]) + "\\ " + KhanUtil.UNITS[variable];
}
});