Os exemplos deste artigo compartilham com você o código específico para Java para determinar se um ponto está dentro do intervalo desenhado para sua referência. O conteúdo específico é o seguinte
Isptinpoly.java
pacote com.ardo.util.circle; importar java.util.arraylist; importar java.util.list; /*** Java determina se um ponto está dentro da faixa desenhada (poli 【isptinpoly】/círculo 【distencepc】)* @param ponto de detecção de ponto* @param pts vértice do poliGon* @return point retorna true no poligon, caso contrário, retorna falsa* @author ardo*/isptinpinpinpina Ponto de detecção* @param pts vértice do polígono* @return Point retorna true no polígono, caso contrário, retorne false*/ public static boolean isptinpoly (ponto2d ponto, list <oint2d> pts) {int n = pts.size (); limite booleano parax = true; // Se o ponto estiver no vértice ou borda do polígono, ele poderá ser considerado um ponto no polígono e será retornado diretamente true int intersectCount = 0; // contagem de pontos cruzados de x dupla precisão = 2e-10; // tolerância ao comparar com 0 durante o ponto de cálculo do ponto flutuante Ponto de cálculo2d p1, p2; // vizinhos vértices vinculados Point2d p = ponto; // o ponto atual p1 = pts.get (0); // vértice esquerdo para (int i = 1; i <= n; ++ i) {// verifique todos os raios se (p.equals (p1)) {return loudeadVex; // px px; Math.max (p1.x, p2.x)) {// ray está fora de nossos interesses p1 = p2; continue; // próximo ponto esquerdo do raio} if (px> math.min (p1.x, p2.x) && px <math.max (p1.x, p2.x)) {// ray está cruzando pelo algoritmo (parte comum de) se (py <= math.max (p1.y, p2.y) { Math.Min (P1.Y, P2.Y)) {// Sobreções em um Retorno de Raio Horizontal Louservertex; } if (p1.y == p2.y) {// raio é vertical if (p1.y == py) {// sobrecarrega em um limite de retorno de raio vertical; } else {// antes do Ray ++ IntersectCount; }} else {// Ponto cruzado no lado esquerdo xinters duplo = (px - p1.x) * (p2.y - p1.y)/(p2.x - p1.x) + p1.y; // ponto cruzado de y if (math.abs (py - xinters) <precisão) {// sobreposição em um raio de devolução de raio; } if (py <xinters) {// antes do ray ++ intersectCount; }}}} else {// Caso especial quando Ray está atravessando o vértice if (px == p2.x && py <= p2.y) {// p cruzando sobre P2 Point2d p3 = pts.get ((i+1) % n); // Próximo vértice if (px> = math.min (p1.x, p3.x) && px <= math.max (p1.x, p3.x)) {// px está entre p1.x e p3.x ++ intersectCount; } else {intersectCount += 2; }}} p1 = p2; // Próximo ponto de esquerda do raio} if (intersectCount % 2 == 0) {// Os números pares estão fora do polígono retornar false; } else {// números ímpares estão dentro do polígono retornar true; }}/** * Determine se está dentro do círculo * @param p * @param c * @return */public static string distancepc (ponto2d p, círculo c) {// julga a relação entre a distância entre o ponto e o centro do círculo e o raio do círculo s; duplo d2 = math.hypot ((p.getx () - c.getcc (). getX ()), (p.gety () - c.getcc (). gety ())); System.out.println ("d2 =="+d2); duplo r = c.getR (); if (d2> r) {s = "fora do círculo"; } else if (d2 <r) {s = "dentro do círculo"; } else {s = "no círculo"; } retornar s; } public static void main (string [] args) {Point2d Point = new Point2d (116.404072, 39.916605); // Teste se um ponto está dentro de uma lista de polígonos <Point2d> pts = new ArrayList <Point2d> (); pts.add (novo Point2d (116.395, 39.910)); pts.add (novo Point2d (116.394, 39.914)); pts.add (novo Point2d (116.403, 39.920)); pts.add (novo Point2d (116.402, 39.914)); pts.add (novo Point2d (116.410, 39.913)); if (isptinpoly (ponto, pts)) {System.out.println ("Point está dentro de um polígono"); } else {System.out.println ("Point está fora de um polígono"); } // Teste se um ponto está dentro de um ponto de círculo2d Centerpoint = new Point2d (116.404172, 39.916605); Círculo c = novo círculo (); C.Setcc (Centerpoint); c.setr (0,0056); String s = distancepc (ponto, c); System.out.println ("é o ponto do círculo:"+s); }} Circ.java
/ ** * classe circular * @author ardo * */ public class Circle {private Double r; private Point2d CC; public void setR (duplo a) {r = a; } public void setCC (ponto2d CenterOfcir) {cc = CenterOfcir; } public duplo getr () {return r; } public Point2d getCC () {return cc; }} Point2d.java
classe pública Point2d {public Double X; público duplo y; public Point2d (duplo x, duplo y) {super (); this.x = x; this.y = y; } public duplo getx () {return x; } public void setx (duplo x) {this.x = x; } public duplo gety () {return y; } public void Sety (duplo y) {this.y = y; }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.