Red de conocimiento informático - Problemas con los teléfonos móviles - Programación de VC, brinde consejos de expertos.

Programación de VC, brinde consejos de expertos.

El algoritmo más clásico:

// Función: Determinar si un punto está dentro de un polígono

// Método: Resuelve la línea horizontal y el polígono que pasa por ella el punto Puntos de intersección de cada lado

//Conclusión: ¡El punto de intersección de un lado es un número impar, establecido!

//Parámetros:

/ / PUNTO p es un punto especificado

// LPPOINT ptPolygon Las coordenadas de cada vértice del polígono (el primer y último punto pueden ser inconsistentes)

// int nCount El número de puntos fijos del polígono

BOOL PtInPolygon (POINT p, LPPOINT ptPolygon, int nCount)

{

int nCross = 0;

para (int i = 0; i < nCount; i++)

{

PUNTO p1 = ptPolygon[i]

PUNTO p2 = ptPolygon[(i + 1) % nCount];

// Resolver para la intersección de y=p.y y p1p2

if ( p1.y == p2.y ) // p1p2 es paralelo a y =p0.y

continuar;

if ( p.y < min(p1.y, p2.y) ) // El punto de intersección está en la línea de extensión de p1p2

continuar;

if ( p.y >= max(p1 .y, p2.y) ) // El punto de intersección está en la línea de extensión de p1p2

continuar;

// Encuentra la coordenada X del punto de intersección ----------- ---------------------- ---------------------- -

doble x = (doble)(p.y - p1.y) * (doble)(p2.x - p1.x) / (doble)(p2.y - p1.y) + p1;

si ( x > p.x )

. nCross++; // Solo cuenta las intersecciones unilaterales

}

// Unilateral El punto de intersección es un número par y el punto está fuera del polígono---

return (nCross % 2 == 1);

}

Siéntete libre de usar el código anterior. Lo he estado usando durante más de diez años.