def computeMotion(self): """Find the motion of a planet with its distance and its mass.""" angle = random.uniform(0, 2 * math.pi) norm = self.distance position = Vector.createFromPolar(norm, angle) angle = (angle + math.pi / 2) % (2 * math.pi) norm = self.speed # in m/s-1 velocity = Vector.createFromPolar(norm, angle) acceleration = Vector.null() return Motion(position, velocity, acceleration)
def __call__(self, position, velocity, born): """Return a missile with the same motion.""" s = SegmentAnatomy.createFromTuples((0, 0), (1, 0)) s.angle = velocity.angle m = Motion(copy.deepcopy(position), copy.deepcopy(velocity)) m.position += Vector.createFromPolar(born + 1, velocity.angle) m.velocity.norm += self.speed self.shooting = False return [self.type(s, [m], damage=self.damage, duration=self.duration)]
def show(self, context, point=Point(0, 0), angle=0): """Show the moment.""" if len(self) >= 1: mp = self.position v = Vector.createFromPolar(mp.norm, angle) v.color = mp.color v.show(context, point) if len(self) >= 2: angle += math.pi / 2 mv = self.velocity v = Vector.createFromPolar(mv.norm, angle) v.color = mv.color v.show(context, point) if len(self) >= 3: angle += math.pi / 2 ma = self.acceleration a = Vector.createFromPolar(ma.norm, angle) a.color = ma.color a.show(context, point)
def shoot(self): """Return a missile with the same motion.""" shooted = [] for i in range(self.n): anatomy = SegmentAnatomy.createFromTuples((0, 0), (1, 0)) angle = self.shooting_view * i / self.n anatomy.rotate(self.velocity.angle + angle) m = Motion(copy.deepcopy(self.position), copy.deepcopy(self.velocity)) m.position += Vector.createFromPolar(self.born + 1, m.velocity.angle) m.velocity.norm += self.shooting_speed shooted.append(SegmentMissile(a, m)) return shooted
def __call__(self, position, velocity, born): """Return a missile with the same motion.""" self.shooting = False shooted = [] for i in range(self.n): s = SegmentAnatomy.createFromTuples((0, 0), (1, 0)) s.angle = velocity.angle angle = self.view * i / self.n s.rotate(velocity.angle + angle) m = Motion(copy.deepcopy(position), copy.deepcopy(velocity)) m.position += Vector.createFromPolar(born + 1, m.velocity.angle) m.velocity.norm += self.speed shooted.append(self.type(s, [m])) return shooted
def getVector(self): """Return the vector associated with the rotation of the particle.""" angle = self.angle[0] angle %= (2 * math.pi) return Vector.createFromPolar(1, angle)