def evade(self, pursuer): relative_heading = Vector2.dot(pursuer.get_head_direction(), self.vehicle.get_head_direction()) to_evade = pursuer.get_position() - self.vehicle.get_position() is_evade_forward = Vector2.dot(to_evade, self.vehicle.get_head_direction()) > 0 if relative_heading < -0.95 and is_evade_forward: # acos(0.95) = 18 return self.flee(pursuer.get_position()) look_ahead_time = to_evade.length() / (self.vehicle.get_max_speed() + pursuer.get_speed()) return self.flee(pursuer.get_position() + pursuer.get_velocity() * look_ahead_time)
def pursuit(self, evader): # 判断智能体的朝向足够下,并且是同向 relative_heading = Vector2.dot(evader.get_head_direction(), self.vehicle.get_head_direction()) to_evade = evader.get_position() - self.vehicle.get_position() is_evade_forward = Vector2.dot(to_evade, self.vehicle.get_head_direction()) > 0 if relative_heading < -0.95 and is_evade_forward: # acos(0.95) = 18 return self.arrive(evader.get_position(), SteeringBehaviors.NORMAL) look_ahead_time = to_evade.length() / (self.vehicle.get_max_speed() + evader.get_speed()) return self.arrive(evader.get_position() + evader.get_velocity() * look_ahead_time, SteeringBehaviors.NORMAL)