Example #1
0
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
Example #2
0
 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