Skip to content

Commit f76495a

Browse files
Butt4cak3jiegillet
authored andcommitted
Reimplemented Verlet Integration in Python (#256)
* Reimplemented Verlet Integration in Python * Improved readability of verlet and velocity_verlet
1 parent 0f667ed commit f76495a

File tree

2 files changed

+47
-64
lines changed

2 files changed

+47
-64
lines changed
Lines changed: 44 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,55 @@
1-
# KingFredrickVI
2-
class Ball:
1+
def verlet(pos, acc, dt):
2+
prev_pos = pos
3+
time = 0
34

4-
def __init__(self, pos=0, vel=0, acc=0):
5-
self.pos = pos
6-
self.vel = vel
7-
self.acc = acc
5+
while pos > 0:
6+
time += dt
7+
next_pos = pos * 2 - prev_pos + acc * dt * dt
8+
prev_pos, pos = pos, next_pos
89

10+
return time
911

10-
class Simulation:
12+
def stormer_verlet(pos, acc, dt):
13+
prev_pos = pos
14+
time = 0
15+
vel = 0
1116

12-
def __init__(self, obj, dt = 0.01):
13-
self.obj = obj
14-
self.dt = dt
15-
self.prev_pos = self.obj.pos
17+
while pos > 0:
18+
time += dt
19+
next_pos = pos * 2 - prev_pos + acc * dt * dt
20+
prev_pos, pos = pos, next_pos
21+
vel += acc * dt
1622

17-
def run(self):
18-
self.time = 0
23+
return time, vel
1924

20-
while self.obj.pos > 0:
21-
self.time += self.dt
22-
self.step()
25+
def velocity_verlet(pos, acc, dt):
26+
time = 0
27+
vel = 0
2328

24-
def step(self):
25-
pass
26-
27-
28-
class Verlet(Simulation):
29-
30-
def step(self):
31-
temp_pos = self.obj.pos
32-
self.obj.pos = self.obj.pos * 2 - self.prev_pos + self.obj.acc * self.dt * self.dt
33-
self.prev_pos = temp_pos
34-
35-
class Stormer_Verlet(Simulation):
36-
37-
def step(self):
38-
temp_pos = self.obj.pos
39-
self.obj.pos = self.obj.pos * 2 - self.prev_pos + self.obj.acc * self.dt * self.dt
40-
self.prev_pos = temp_pos
41-
42-
self.obj.vel += self.obj.acc * self.dt
43-
44-
class Velocity_Verlet(Simulation):
45-
46-
def step(self):
47-
self.obj.pos += self.obj.vel * self.dt + 0.5 * self.obj.acc * self.dt * self.dt
48-
self.obj.vel += self.obj.acc * self.dt
29+
while pos > 0:
30+
time += dt
31+
pos += vel * dt + 0.5 * acc * dt * dt
32+
vel += acc * dt
4933

34+
return time, vel
5035

5136
def main():
52-
sim = Verlet(Ball(pos = 5.0, acc = -10))
53-
sim.run()
54-
55-
print("Verlet:", sim.time)
56-
57-
sim = Stormer_Verlet(Ball(pos = 5.0, acc = -10))
58-
sim.run()
59-
60-
print("Stormer Verlet:", sim.time)
61-
62-
sim = Velocity_Verlet(Ball(pos = 5.0, acc = -10))
63-
sim.run()
64-
65-
print("Velocity Verlet:", sim.time)
66-
67-
68-
if __name__ == "__main__":
37+
time = verlet(5, -10, 0.01)
38+
print("Verlet")
39+
print("Time: {:.10f}".format(time))
40+
print()
41+
42+
time, vel = stormer_verlet(5, -10, 0.01)
43+
print("Stormer-Verlet")
44+
print("Time: {:.10f}".format(time))
45+
print("Velocity: {:.10f}".format(vel))
46+
print()
47+
48+
time, vel = velocity_verlet(5, -10, 0.01)
49+
print("Velocity Verlet")
50+
print("Time: {:.10f}".format(time))
51+
print("Velocity: {:.10f}".format(vel))
52+
print()
53+
54+
if __name__ == '__main__':
6955
main()
70-
71-
72-

contents/verlet_integration/verlet_integration.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Here is what it looks like in code:
3939
{% sample lang="java" %}
4040
[import:2-18, lang:"java"](code/java/verlet.java)
4141
{% sample lang="py" %}
42-
[import:28-33, lang:"python"](code/python/verlet.py)
42+
[import:1-9, lang:"python"](code/python/verlet.py)
4343
{% sample lang="hs" %}
4444
Unfortunately, this has not yet been implemented in haskell, so here's Julia code:
4545
[import:1-13, lang:"julia"](code/julia/verlet.jl)
@@ -85,7 +85,7 @@ Here's what it looks like in code:
8585
{% sample lang="java" %}
8686
[import:21-40, lang:"java"](code/java/verlet.java)
8787
{% sample lang="py" %}
88-
[import:35-42, lang:"python"](code/python/verlet.py)
88+
[import:11-21, lang:"python"](code/python/verlet.py)
8989
{% sample lang="hs" %}
9090
Unfortunately, this has not yet been implemented in scratch, so here's Julia code:
9191
[import:15-31, lang:"julia"](code/julia/verlet.jl)
@@ -142,7 +142,7 @@ Here is the velocity Verlet method in code:
142142
{% sample lang="java" %}
143143
[import:43-57, lang:"java"](code/java/verlet.java)
144144
{% sample lang="py" %}
145-
[import:44-48, lang:"python"](code/python/verlet.py)
145+
[import:23-32, lang:"python"](code/python/verlet.py)
146146
{% sample lang="hs" %}
147147
Unfortunately, this has not yet been implemented in haskell, so here's Julia code:
148148
[import:33-45, lang:"julia"](code/julia/verlet.jl)

0 commit comments

Comments
 (0)