class Agent: def __init__(self, x=50, y=50, m=100, vx=0, vy=0): self._r = Vector(x, y) # initial position self._m = m # mass self._v = Vector(vx, vy) # velocity def update(self, other): if type(other) is Agent: r = other.get_position() - self._r dist = r.len() if dist < 1: return acc = Const.G * other.get_mass() / r.sqr_len() sin = r.y / dist cos = r.x / dist a = Vector(cos * acc, sin * acc) self._v += a * Const.dT self._r += self._v * Const.dT w = Globals.objects_data["widget_width"] h = Globals.objects_data["widget_height"] if self.get_x() < self.get_mass(): self._r.x = self.get_mass() self._v.invert_x() if self.get_x() > w - self.get_mass(): self._r.x = w - self.get_mass() self._v.invert_x() if self.get_y() < self.get_mass(): self._r.y = self.get_mass() self._v.invert_y() if self.get_y() > h - self.get_mass(): self._r.y = h - self.get_mass() self._v.invert_y() return self._r.x, self._r.y def get_x(self): return self._r.x def get_y(self): return self._r.y def get_mass(self): return self._m def get_position(self): return self._r def get_vx(self): return self._v.x def get_vy(self): return self._v.y
def __init__(self, x=50, y=50, m=100, vx=0, vy=0): self._r = Vector(x, y) # initial position self._m = m # mass self._v = Vector(vx, vy) # velocity