def distancia_con(self, otro_actor): """Determina la distancia con el ``otro_actor`` :param otro_actor: El otro actor para ver la distancia :type otro_actor: pilas.actores.Actor """ return utils.distancia_entre_dos_actores(self, otro_actor)
def ping(self): """ Devuelve la distancia en centimetros al objeto frente al robot. """ actoresValidos = self._actoresEnLaEscena() x2, y2 = _puntosParaLaRecta(self.actor.x, self.actor.y, self.actor.rotacion, 200) linea_actor_1 = _puntos_de_la_linea(self.actor.x, self.actor.y, x2, y2) if linea_actor_1["B"] == 0: pendiente = 0 elif abs(linea_actor_1["A"]) > EPSILON: pendiente = 1.0 / linea_actor_1["A"] valor = 601 for otroActor in actoresValidos: if abs(linea_actor_1["A"]) > EPSILON: linea_generada = _puntoEInterseccionConLaLinea( otroActor.x, otroActor.y, pendiente) else: linea_generada = {"A": 1, "B": 0, "C": -otroActor.x} if _interseccionEntreLineas(linea_actor_1, linea_generada) is None: continue # No son paralelas oax2, oay2 = _interseccionEntreLineas(linea_actor_1, linea_generada) # Si está atrás del robot if self._esta_atras(x2, y2, oax2, oay2): continue # Si la intersección está fuera de la circ. del actor no hay obstáculo if not _verificarPuntoEnLaCircunferencia( otroActor.x, otroActor.y, oax2, oay2, otroActor.radio_de_colision): continue # las rectas son perpendiculares y el punto en comun está en el area del otroActor # Calcular la distancia entre el actor y el punto de interseccion con el actor valorActual = utils.distancia_entre_dos_actores( self.actor, otroActor) if (valorActual < valor): valor = valorActual return valor
def ping(self): """ Devuelve la distancia en centimetros al objeto frente al robot. """ actoresValidos = self._actoresEnLaEscena() x2, y2 = _puntosParaLaRecta(self.actor.x, self.actor.y, self.actor.rotacion, 200) linea_actor_1 = _puntos_de_la_linea(self.actor.x, self.actor.y, x2, y2) if linea_actor_1["B"] == 0: pendiente = 0 elif abs(linea_actor_1["A"]) > EPSILON: pendiente = 1.0 / linea_actor_1["A"] valor = 601 for otroActor in actoresValidos : if abs(linea_actor_1["A"]) > EPSILON: linea_generada = _puntoEInterseccionConLaLinea(otroActor.x, otroActor.y, pendiente) else: linea_generada = { "A": 1, "B": 0, "C": -otroActor.x } if _interseccionEntreLineas(linea_actor_1, linea_generada) is None: continue # No son paralelas oax2, oay2 = _interseccionEntreLineas(linea_actor_1, linea_generada) # Si está atrás del robot if self._esta_atras(x2, y2, oax2, oay2): continue # Si la intersección está fuera de la circ. del actor no hay obstáculo if not _verificarPuntoEnLaCircunferencia(otroActor.x, otroActor.y, oax2, oay2, otroActor.radio_de_colision): continue # las rectas son perpendiculares y el punto en comun está en el area del otroActor # Calcular la distancia entre el actor y el punto de interseccion con el actor valorActual = utils.distancia_entre_dos_actores(self.actor, otroActor) if (valorActual < valor): valor = valorActual return valor