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++) p>
{
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.