Added random rotation to pendel
This commit is contained in:
parent
80c974b291
commit
e9d094b95f
1 changed files with 16 additions and 5 deletions
21
pendel.py
21
pendel.py
|
@ -1,4 +1,5 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
from math import sin, cos, pi
|
||||||
|
|
||||||
from game import *
|
from game import *
|
||||||
|
|
||||||
|
@ -30,6 +31,9 @@ class Vector(object):
|
||||||
def __sub__(self, other):
|
def __sub__(self, other):
|
||||||
return self.__add__(other.__neg__())
|
return self.__add__(other.__neg__())
|
||||||
|
|
||||||
|
def rotate(self,alpha):
|
||||||
|
return Vector( cos(alpha) * self.x - sin(alpha) * self.y, sin(alpha) * self.x + cos(alpha) * self.y)
|
||||||
|
|
||||||
def len(self):
|
def len(self):
|
||||||
return math.sqrt( self.x * self.x + self.y * self.y )
|
return math.sqrt( self.x * self.x + self.y * self.y )
|
||||||
|
|
||||||
|
@ -41,7 +45,8 @@ class Vector(object):
|
||||||
|
|
||||||
class PendelSim(Game):
|
class PendelSim(Game):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(PendelSim,self).__init__(1000,600, 60)
|
super(PendelSim,self).__init__(1300,700, 60)
|
||||||
|
self.time = 0
|
||||||
self.init_data()
|
self.init_data()
|
||||||
self.mousedown = False
|
self.mousedown = False
|
||||||
self.mousepos = (0,0)
|
self.mousepos = (0,0)
|
||||||
|
@ -54,16 +59,22 @@ class PendelSim(Game):
|
||||||
|
|
||||||
|
|
||||||
def init_data(self):
|
def init_data(self):
|
||||||
self.staff_lengths = staff_lengths = [ randint(150,200), randint(100,200), randint(100,150) ]
|
self.staff_lengths = staff_lengths = [ randint(200,300), randint(100,220), randint(30,120) ]
|
||||||
fixed_joint = Vector( self._width/2, self._height/5 )
|
fixed_joint = Vector( self._width/2, self._height/5 )
|
||||||
joint_a = fixed_joint - Vector(staff_lengths[0],0)
|
joint_a = fixed_joint - Vector(staff_lengths[0],0).rotate( (randint(0,180) / 180 * pi) )
|
||||||
joint_b = joint_a - Vector(0,-staff_lengths[1])
|
joint_b = joint_a - Vector(staff_lengths[1],0).rotate( (randint(0,180) / 180 * pi) )
|
||||||
joint_c = joint_b - Vector(-staff_lengths[2],0)
|
joint_c = joint_b - Vector(staff_lengths[2],0).rotate( (randint(0,180) / 180 * pi) )
|
||||||
self.joints = [fixed_joint, joint_a, joint_b, joint_c ]
|
self.joints = [fixed_joint, joint_a, joint_b, joint_c ]
|
||||||
self.joint_speed = [ Vector(0,0), Vector(0,0), Vector(0,0), Vector(0,0) ]
|
self.joint_speed = [ Vector(0,0), Vector(0,0), Vector(0,0), Vector(0,0) ]
|
||||||
self.old_joints = self.joints
|
self.old_joints = self.joints
|
||||||
|
|
||||||
def on_update(self, dtime):
|
def on_update(self, dtime):
|
||||||
|
self.time += dtime
|
||||||
|
if self.time > 10:
|
||||||
|
self.resetpath()
|
||||||
|
self.init_data()
|
||||||
|
self.time = 0
|
||||||
|
|
||||||
new_joints = self.joints[:]
|
new_joints = self.joints[:]
|
||||||
for i in range(1,4):
|
for i in range(1,4):
|
||||||
new_joints[i] += (0.99 * self.joint_speed[i] + Vector(0,40)) * dtime
|
new_joints[i] += (0.99 * self.joint_speed[i] + Vector(0,40)) * dtime
|
||||||
|
|
Loading…
Reference in a new issue