示例#1
0
文件: actor.py 项目: apehua/m6
    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)
示例#2
0
    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)
示例#3
0
    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
示例#4
0
文件: robot.py 项目: DrDub/pilas
    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