Skip to content

Commit 7945393

Browse files
authored
Merge pull request algorithm-archivists#2 from KingFredrickVI/master
Added Python example for Verlet
2 parents 53133cd + 21408c7 commit 7945393

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

chapters/computational_physics/verlet.md

+80
Original file line numberDiff line numberDiff line change
@@ -252,3 +252,83 @@ public static void main(String[] args) {
252252
253253
}
254254
```
255+
256+
#### Python
257+
258+
```Python
259+
260+
# KingFredrickVI
261+
262+
263+
class Ball:
264+
265+
def __init__(self, pos=0, vel=0, acc=0):
266+
self.pos = pos
267+
self.vel = vel
268+
self.acc = acc
269+
270+
271+
class Simulation:
272+
273+
def __init__(self, obj, dt = 0.01):
274+
self.obj = obj
275+
self.dt = dt
276+
self.prev_pos = self.obj.pos
277+
278+
def run(self):
279+
self.time = 0
280+
281+
while self.obj.pos > 0:
282+
self.time += self.dt
283+
self.step()
284+
285+
def step(self):
286+
pass
287+
288+
289+
class Verlet(Simulation):
290+
291+
def step(self):
292+
temp_pos = self.obj.pos
293+
self.obj.pos = self.obj.pos * 2 - self.prev_pos + self.obj.acc * self.dt * self.dt
294+
self.prev_pos = temp_pos
295+
296+
297+
class Stormer_Verlet(Simulation):
298+
299+
def step(self):
300+
temp_pos = self.obj.pos
301+
self.obj.pos = self.obj.pos * 2 - self.prev_pos + self.obj.acc * self.dt * self.dt
302+
self.prev_pos = temp_pos
303+
304+
self.obj.vel += self.obj.acc * self.dt
305+
306+
307+
class Velocity_Verlet(Simulation):
308+
309+
def step(self):
310+
self.obj.pos += self.obj.vel * self.dt + 0.5 * self.obj.acc * self.dt * self.dt
311+
self.obj.vel += self.obj.acc * self.dt
312+
313+
314+
def main():
315+
sim = Verlet(Ball(pos = 5.0, acc = -10))
316+
sim.run()
317+
318+
print "Verlet:", sim.time
319+
320+
sim = Stormer_Verlet(Ball(pos = 5.0, acc = -10))
321+
sim.run()
322+
323+
print "Stormer Verlet:", sim.time
324+
325+
sim = Velocity_Verlet(Ball(pos = 5.0, acc = -10))
326+
sim.run()
327+
328+
print "Velocity Verlet:", sim.time
329+
330+
331+
if __name__ == "__main__":
332+
main()
333+
334+
```

0 commit comments

Comments
 (0)