Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - cobold

#1
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.





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.