コード例 #1
0
    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)
コード例 #2
0
    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)