예제 #1
0
        public bool Prueba(double x, double y)
        {
            mSalioRuta o = new mSalioRuta();

            pl_punto p = new pl_punto();
            p.x = x;
            p.y = y;

            return o.VerificarPuntoEnRuta(p);
        }
예제 #2
0
        public bool VerificarPuntoEnRuta(pl_punto pv)
        {
            bool ban = false;
            for (int i = 0; i < lPuntosRuta.Count() -1; i++)
            {
                pl_punto p1 = lPuntosRuta[i];
                pl_punto p2 = lPuntosRuta[i+1];

                pl_recta recta = new pl_recta(p1, p2); // Recta que pasa por un tramo de la ruta

                double m2 = -(1 / recta.m);
                pl_recta perpendicular = new pl_recta(pv, m2); // Recta perpendicular a la recta anterior, que pasa por el punto a verificar

                pl_punto pc = new pl_punto();
                pc.x = (perpendicular.b - recta.b) / (recta.m - perpendicular.m);
                pc.y = recta.m * pc.x + recta.b;  // Punto en que se cortan las dos rectas

                if ((_entrePuntos(pc, p1, p2)) && (distanciaEntre(pc, pv) <= mError)) {
                    ban = true;
                    i = lPuntosRuta.Count();
                }
            }
            return ban;
        }
예제 #3
0
        public mSalioRuta()
        {
            // El contructor debe recibir lista de puntos de la ruta y el margen de error en Kilometros

            mError = 0.2;

            lPuntosRuta = new List<pl_punto>();

            pl_punto punto1 = new pl_punto();
            punto1.x = 1;
            punto1.y = 14;

            pl_punto punto2 = new pl_punto();
            punto2.x = 2;
            punto2.y = 9;

            pl_punto punto3 = new pl_punto();
            punto3.x = 5;
            punto3.y = 13;

            lPuntosRuta.Add(punto1);
            lPuntosRuta.Add(punto2);
            lPuntosRuta.Add(punto3);
        }
예제 #4
0
 public bool _entrePuntos(pl_punto pv, pl_punto p1, pl_punto p2)
 {
     double dt = distanciaEntre(p2,p1); // Distancia Total
     double d1 = distanciaEntre(pv,p1);
     double d2 = distanciaEntre(pv,p2);
     if ((d1 + d2) == dt) return true;
     else return false;
 }
예제 #5
0
 public double distanciaEntre(pl_punto p1, pl_punto p2)
 {
     double d = Math.Sqrt(Math.Pow((p2.x - p1.x), 2) + Math.Pow((p2.y - p1.y), 2));
     return d;
 }
예제 #6
0
 public bool _siDentroPunto(pl_punto pv, pl_punto p1)
 {
 }
예제 #7
0
 public pl_recta(pl_punto punto1, pl_punto punto2)
 {
     this.m = (punto2.y - punto1.y) / (punto2.x - punto1.x);
     this.b = punto1.y - this.m * punto1.x;
 }
예제 #8
0
 public pl_recta(pl_punto punto, double m)
 {
     this.m = m;
     this.b = punto.y - m * punto.x;
 }
예제 #9
0
 public pl_recta(pl_punto punto1, pl_punto punto2)
 {
     this.m = (punto2.y - punto1.y)/(punto2.x - punto1.x);
     this.b = punto1.y - this.m * punto1.x;
 }
예제 #10
0
 public pl_recta(pl_punto punto, double m)
 {
     this.m = m;
     this.b = punto.y - m * punto.x;
 }