def isMatched(self, robot, ball): max_e_dist = 40 their_defender = self.world.their_defender (target_x, target_y) = self.goalCentre() ball_y = self.world.ball.y ball_x = self.world.ball.x zone = self.world.pitch.zones[self.robot.zone] zone = self.world.pitch.zones[self.robot.zone] between = (ball_x - target_x) * (ball_x - self.midX) < 0.0 if between or ball_x < 1.0: def_ang = their_defender._vector.angle def_pos = their_defender._vector p1 = array( [self.midX, 0.0] ) p2 = array( [self.midX, self.max_y] ) ad = array([math.cos(def_ang), math.sin(def_ang)]) p3 = array( [def_pos.x, def_pos.y] ) p4 = array( p3 + ad) si = MyMath.seg_intersect( p1,p2, p3,p4) #log_dot(si, 'yellow', 'haha') #log('inter', si, 'MatchY') g_to_mid = self.midX - target_x y = si[1] y = clip(y, max_e_dist, self.max_y - max_e_dist) consol.log('facing', g_to_mid * ad[0] > 0.0, 'MatchY') if g_to_mid * ad[0] > 0.0: return math.fabs(robot.y - y) < ERROR else: return math.fabs(robot.y - self.midY) < ERROR else: y = clip(ball.y, max_e_dist, self.max_y - max_e_dist) return math.fabs(robot.y - y) < ERROR
def nextCommand(self): their_defender = self.world.their_defender (target_x, target_y) = self.goalCentre() ball_y = self.world.ball.y ball_x = self.world.ball.x zone = self.world.pitch.zones[self.robot.zone] zone = self.world.pitch.zones[self.robot.zone] max_e_dist = 40 between = (ball_x - target_x) * (ball_x - self.midX) < 0.0 if between or ball_x < 1.0: def_ang = their_defender._vector.angle def_pos = their_defender._vector p1 = array( [self.midX, 0.0] ) p2 = array( [self.midX, self.max_y] ) ad = array([math.cos(def_ang), math.sin(def_ang)]) p3 = array( [def_pos.x, def_pos.y] ) p4 = array( p3 + ad) si = MyMath.seg_intersect( p1,p2, p3,p4) #log_dot(si, 'yellow', 'haha') #log('inter', si, 'MatchY') g_to_mid = self.midX - target_x y = si[1] y = clip(y, max_e_dist, self.max_y - max_e_dist) consol.log('facing', g_to_mid * ad[0] > 0.0, 'MatchY') if g_to_mid * ad[0] > 0.0: command = self.go_to_asym(zone.center()[0], y, max_speed=100, min_speed=50) else: command = self.go_to_asym(self.midX, self.midY, max_speed=100, min_speed=50) else: y = clip(ball_y, max_e_dist, self.max_y - max_e_dist) command = self.go_to_asym(zone.center()[0], ball_y, max_speed=100, min_speed=50) return command