Los ejemplos en este artículo comparten con usted el código específico para Java para determinar si un punto está dentro del rango dibujado para su referencia. El contenido específico es el siguiente
ISptinpoly.java
paquete com.ardo.util.circle; import java.util.arrayList; import java.util.list; /*** java determina si un punto está dentro del rango dibujado (poli 【iptinpoly】/circle 【distencePc】)* @param Punto de detección de puntos* @param pts vértice del polygon* @@return El punto devuelve verdadero en el polygon, de lo contrario regresa falso* @author ardo*/public class es aptinpoly {/***. @Param Point Detection Point* @param pts Vértice del polígono* @return Point Devuelve verdadero en Polygon, de lo contrario devuelve falso*/ public static boolean isptinpoly (punto2d punto, list <point2d> pts) {int n = pts.size (); boolean boundorvertex = true; // Si el punto está en el vértice o el borde del polígono, se puede considerar como un punto en el polígono, y se devolverá directamente int IntersectCount = 0; // Cross Puntos Recuento de X doble precisión = 2e-10; // tolerancia al comparar con 0 durante el punto de cálculo del tipo de punto flotante Point2d p1, p2; // vecinos vértices Point2d p = punto; // El punto actual p1 = pts.get (0); // vértice izquierdo para (int i = 1; i <= n; ++ i) {// verifique todos los rayos if (p.equals (p1)) {return boundervertex; // p es un vértice} p2 = pts.get (i % n); // vertex correcto if (px <hath.min (p1.x, p2, p2. Math.max (p1.x, p2.x)) {// ray está fuera de nuestros intereses p1 = p2; continuar; // siguiente ray ray izquierda punto} if (px> math.min (p1.x, p2.x) && px <math.max (p1.x, p2.x)) {// ray está cruzando por el algoritmo (parte común de) if (py <= math.max (p1.y, p2.y)) {// x está antes de ray if ((p1.x = Math.min (p1.y, p2.y)) {// se superpone en un rayo horizontal boundorvertex; } if (p1.y == p2.y) {// ray es vertical if (p1.y == py) {// se superpone en un rayo vertical return boundIrVeverx; } else {// antes de ray ++ intersectCount; }} else {// punto cruzado en el lado izquierdo doble xinters = (px - p1.x) * (p2.y - p1.y)/(p2.x - p1.x) + p1.y; // punto cruzado de y if (math.abs (py - xinters) <precisión) {// severlies en un rayo retorny Boundorvertex; } if (py <xinters) {// antes de ray ++ intersectCount; }}}} else {// Caso especial cuando el rayo se cruza a través del vértice if (px == p2.x && py <= p2.y) {// P cruzando p2 punto2d p3 = pts.get ((i+1) % n); // Siguiente vértice if (px> = math.min (p1.x, p3.x) && px <= math.max (p1.x, p3.x)) {// px se encuentra entre p1.x & p3.x ++ intersectcount; } else {intersectCount += 2; }}} p1 = p2; // Siguiente rayo Punto izquierdo} if (InterSectCount % 2 == 0) {// Los números incluso están fuera del retorno de Polygon False; } else {// Los números impares están dentro del retorno de Polygon True; }}/** * Determine si está dentro del círculo * @param p * @param c * @return */public static string DistancePc (punto2d p, círculo c) {// juzga la relación entre el punto y el centro del círculo y el radio de la cadena del círculo S; doble d2 = math.hypot ((p.getx () - c.getcc (). getx ()), (p.gety () - c.getcc (). gety ())); System.out.println ("d2 =="+d2); doble r = c.getr (); if (d2> r) {s = "fuera del círculo"; } else if (d2 <r) {s = "dentro del círculo"; } else {s = "en el círculo"; } return s; } public static void main (string [] args) {punto2d punto = nuevo punto2d (116.404072, 39.916605); // prueba si un punto está dentro de una lista de polígono <int2d> pts = new ArrayList <Point2d> (); pts.add (nuevo punto2d (116.395, 39.910)); pts.add (nuevo punto2d (116.394, 39.914)); pts.add (nuevo punto2d (116.403, 39.920)); pts.add (nuevo punto2d (116.402, 39.914)); pts.add (nuevo punto2d (116.410, 39.913)); if (isptinpoly (punto, pts)) {system.out.println ("el punto está dentro de un polígono"); } else {System.out.println ("El punto está fuera de un polígono"); } // Pruebe si un punto está dentro de un círculo Point2D CenterPoint = nuevo Point2D (116.404172, 39.916605); Círculo c = nuevo círculo (); C.SetCC (CenterPoint); C.SetR (0.0056); Cadena S = DistancePC (Point, C); System.out.println ("es el punto en el círculo:"+S); }} Círculo.java
/ ** * clase circular * @author ardo * */ public class circle {private double r; Punto privado 2D CC; public void setr (doble a) {r = a; } public void setcc (Point2d CenterOfcir) {cc = CenterOfCir; } public doble getr () {return r; } public Point2d getCc () {return cc; }} Point2d.java
Class Public Point2d {public Double x; público doble y; public Point2d (doble x, doble y) {super (); this.x = x; this.y = y; } public doble getx () {return x; } public void setX (doble x) {this.x = x; } public doble gety () {return y; } public void sety (doble y) {this.y = y; }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.