Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: cobold en 04 de Septiembre de 2013, 09:06:32 PM

Título: Problema con la detección de puntos en polígonos
Publicado por: cobold en 04 de Septiembre de 2013, 09:06:32 PM
Hola, soy un novato programador (y novato también en stratos) que tiene cierto problema con, como bien dice el título, la detección de puntos en polígonos.

Antes de crear este tema, estuve estudiando las diversas maneras que hay de detectarlos y encontré aquí un post de fenrir con una duda similar.

Os pongo mi código y os explico después el problema que tengo.

Citar
int joc::estaFora(Point P, Point v[], int n)
{
   int i,j=n-1;
   int oddNodes = 0; // True: senar, està fora; False: parell, està dins

   for(i = 0; i < n; i++)
   {
      if((v.y < P.y   && v[j].y >= P.y)
      ||   (v[j].y < P.y   && v.y >= P.y)
      &&  (v.x <= P.x   || v[j].x <= P.x))
      {
         if(v.x + (P.y - v.y) / (v[j].y - v.y) * (v[j].x - v.x) < P.x)
         {
            oddNodes ++;
         }
      }
      j = i;
   }

   return oddNodes;
}

I los puntos del polígono son estos:

Citar
Point a; a.x = 200; a.y = 200;
Point b; b.x = 250; b.y = 200;
Point c; c.x = 250; c.y = 250;
Point d; d.x = 200; d.y = 250;

// Sería un cuadrado común

El problema es, que al ejecutar el programa, me marca como polígono el cuadrado, y toda la extensión del mismo hacia la derecha hasta el final de la pantalla, como si fuese un gran rectángulo de 1000x50.

Nosé si he puesto bien el orden de los puntos del polígono o algo, pero no encuentro la solución.

Gracias por vuestra atención.

EDITO: Problema arreglado, resulta que oddNodes era un booleano, y yo con el int interpretaba el 1 y el 2 como dentro, y solo era el 1, cosa que hacia que entendiera por dentro un rectangulo de 1000x50. Canviando a bool, todo solucionado.