import math from Point import Point class Spring: """Physical model of a spring. """ def __init__(self, m0, m1, k, l0=None, damping=None): """Construct a spring. """ self.m0 = m0 self.m1 = m1 self.k = k if l0: self.l0 = l0 else: self.l0 = self.m0.getPosition().DistanceTo(self.m1.getPosition()) self.damping = damping self.e = Point([0,0,0]) def calcSpringForce(self): """Calculate the spring force. """ delta = self.m1.getPosition() - self.m0.getPosition() l = delta.Length() self.e = delta.Normalized() # Fspring = (l - l0) * k Fspring = self.e * (l - self.l0) * self.k self.m0.F += Fspring self.m1.F -= Fspring def calcDampingForce(self): """Calculate the damping force. """ if self.damping: # Fdamping = v in e * dampingFactor Fdamping = self.e.Dot(self.m1.v - self.m0.v) * self.damping * self.e self.m0.F += Fdamping self.m1.F -= Fdamping def Print(self): self.e.Print() def SetSpringConstant(self,k): self.k = k