Red de conocimiento informático - Material del sitio web - Cómo implementar "determinar si un punto está dentro de un rango de plano irregular (son posibles tanto cóncavo como convexo)" en VC6.0

Cómo implementar "determinar si un punto está dentro de un rango de plano irregular (son posibles tanto cóncavo como convexo)" en VC6.0

Si es un polígono convexo, es más fácil. Simplemente use rayos y puntos de intersección para juzgar. Eche un vistazo a CGAL.

Existe un programa de ejemplo para Echar un vistazo

#include lt;CGAL/Exact_predicates_inexact_constructions_kernel.hgt;

#include lt;CGAL/Polygon_2_algorithms.hgt;

#include lt;iostreamgt;

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;

typedef K::Point_2 Point;

usando std::cout; std::endl;

void check_inside(Punto pt, Punto *pgn_begin, Punto *pgn_end, K rasgos)

{

cout lt; El punto " lt; lt; pt ;

switch(CGAL::bounded_side_2(pgn_begin, pgn_end, pt, traces)) {

case CGAL::ON_BOUNDED_SIDE:

cout lt;lt; " está dentro del polígono.\n";

break;

case CGAL::ON_BOUNDARY:

cout lt; lt; " está en el límite del polígono .\n";

break;

case CGAL::ON_UNBOUNDED_SIDE:

cout lt;lt " el polígono.\n";

break;

}

}

int main()

{

Punto puntos[] = { Punto(0,0), Punto(5.1,0), Punto(1,1), Punto(0.5,6)};

// comprueba si el polígono es simple .

cout lt;lt; "El polígono es "

lt;lt; (CGAL::is_simple_2(puntos, puntos 4, K( )) ? "" : "no ")

lt; "simple." lt;

check_inside(Punto(0.5, 0.5), puntos 4, K());

check_inside(Punto(1.5, 2.5), puntos, puntos 4, K());

c

heck_inside(Punto(2.5, 0), puntos, puntos 4, K());

devuelve 0;

}