class NodeMovement: def __init__(self): self.src = Point() self.dest = Point() self.src_time = 0.0 self.speed = 0.0 self.distance = 0.0 self.total_time = 0.0 self.dx = 0.0 self.dy = 0.0 def load_trace(self, trace): l = trace.split() self.src_time = float(l[1]) self.src.x = float(l[3][1:-1]) self.src.y = float(l[4][:-1]) self.src.z = float(l[5][:-2]) self.dest.x = float(l[6][1:-1]) self.dest.y = float(l[7][:-2]) self.speed = float(l[8]) self.distance = self.src.distance_to(self.dest) self.total_time = self.distance / self.speed self.dx = self.dest.x - self.src.x self.dy = self.dest.y - self.src.y def position_at(self, time): dt = time - self.src_time if dt > 0.0 and self.total_time > 0.0: ratio = dt / self.total_time p = Point() p.x = self.src.x + self.dx * ratio p.y = self.src.y + self.dy * ratio return p else: return self.src