-
-
Notifications
You must be signed in to change notification settings - Fork 360
/
Copy pathverlet.swift
69 lines (56 loc) · 1.67 KB
/
verlet.swift
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
func verlet(pos: Double, acc: Double, dt: Double) -> Double {
var pos = pos
var temp_pos, time: Double
var prev_pos = pos
time = 0.0
while (pos > 0) {
time += dt
temp_pos = pos
pos = pos*2 - prev_pos + acc * dt * dt
prev_pos = temp_pos
}
return time
}
func stormerVerlet(pos: Double, acc: Double, dt: Double) -> (time: Double, vel: Double) {
var pos = pos
var temp_pos, time, vel: Double
var prev_pos = pos
vel = 0
time = 0
while (pos > 0) {
time += dt
temp_pos = pos
pos = pos*2 - prev_pos + acc * dt * dt
prev_pos = temp_pos
vel += acc*dt
}
return (time:time, vel:vel)
}
func velocityVerlet(pos: Double, acc: Double, dt: Double) -> (time: Double, vel: Double) {
var pos = pos
var time, vel : Double
vel = 0
time = 0
while (pos > 0) {
time += dt
pos += vel*dt + 0.5*acc * dt * dt
vel += acc*dt
}
return (time:time, vel:vel)
}
func main() {
let verletTime = verlet(pos: 5.0, acc: -10.0, dt: 0.01)
print("[#]\nTime for Verlet integration is:")
print("\(verletTime)")
let stormer = stormerVerlet(pos: 5.0, acc: -10.0, dt: 0.01);
print("[#]\nTime for Stormer Verlet integration is:")
print("\(stormer.time)")
print("[#]\nVelocity for Stormer Verlet integration is:")
print("\(stormer.vel)")
let velVerlet = velocityVerlet(pos: 5.0, acc: -10, dt: 0.01)
print("[#]\nTime for velocity Verlet integration is:")
print("\(velVerlet.time)")
print("[#]\nVelocity for velocity Verlet integration is:")
print("\(velVerlet.vel)")
}
main()