Примеры в этой статье делятся с вами конкретным кодом для Java, чтобы определить, находится ли точка в пределах диапазона, нарисованной для вашей ссылки. Конкретный контент заключается в следующем
Isptinpoly.java
пакет com.ardo.util.circle; импортировать java.util.arraylist; импортировать java.util.list; /*** Java определяет, находится ли точка в пределах диапазона нарисования (Poly 【Isptinpoly】/Circle 【Distencepc】)* @param point point* @param pts vertex of the Polygon* @return Point возвращает в полигоне, в противном случае он возвращает False* @author ardo*/public isptinpoly {//** aTpector** aTpectOr** aThOuthor Ardo*/Public PointOnpoly. @param point point* @param pts вершина полигона* @return Point Возвращает True в полигоне, в противном случае возвращает False*/ public static boolean isptinpoly (точка2D точка, список <point2d> pts) {int n = pts.size (); Boolean Boundorvertex = true; // Если точка находится на вершине или краю многоугольника, ее можно рассматривать как точку в многоугольнике, и она будет непосредственно возвращено истинной int incectCount = 0; // Количество перекрестных точек x двойной точностью = 2E-10; // допуск при сравнении с 0 во время расчета плавающей точки расчета 2D P1, P2; // Собственные вершины точка 2D P = точка; // Текущая точка p1 = pts.get (0); // левая вершина для (int i = 1; i <= n; ++ i) {// Проверить все лучи if (p.equals (p1)) {return boundortex; // p - вершина} p2 = pts.get (i % n); // right vertex if (px <math.min.x.xget (i % n); Math.max (p1.x, p2.x)) {// ray находится за пределами наших интересов p1 = p2; Продолжить; // Следующая левая точка Ray} if (px> math.min (p1.x, p2.x) && px <math.max (p1.x, p1.x)) {// ray пересекается по алгоритму (общая часть) if (py <= math.max (p1.y, p2.y)) {//x x x x. > = Math.min (p1.y, p2.y)) {// povers на горизонтальном лучшем обратном границе; } if (p1.y == p2.y) {// ray является вертикальным if (p1.y == py) {// povers на вертикальном луче returnorvertex; } else {// до Ray ++ recesectCount; }} else {// поперечная точка на левой стороне Double Xinters = (px - p1.x) * (p2.y - p1.y)/(p2.x - p1.x) + p1.y; // поперечная точка y if (math.abs (py - xinters) <precision) {// перекрытия на ray reture Boundorvertex; } if (py <xinters) {// перед Ray ++ recesectCount; }}}} else {// Специальный случай, когда Рэй пересекает через вершину if (px == p2.x && py <= p2.y) {// p пересечение P2 point2d p3 = pts.get ((i+1) % n); // Следующая вершина if (px> = math.min (p1.x, p3.x) && px <= math.max (p1.x, p3.x)) {// px лежит между p1.x & p3.x ++ recectcount; } else {recsectCount += 2; }}} p1 = p2; // Следующая левая точка Ray} if (recesectcount % 2 == 0) {// ровные числа находятся за пределами полигона возврата false; } else {// нечетные числа находятся внутри полигона возврата true; }}/** * Определите, находится ли он внутри круга * @param p * @param c * @return */public Static String Distancepc (точка2d p, circle c) {// Судить о взаимосвязи между расстоянием между точкой и центром круга и радиусом кружной строки s; double d2 = math.hypot ((p.getx () - c.getcc (). getx ()), (p.gety () - c.getcc (). gety ())); System.out.println ("d2 =="+d2); Double r = c.getr (); if (d2> r) {s = "вне круга"; } else if (d2 <r) {s = "внутри круга"; } else {s = "на кругу"; } return s; } public static void main (string [] args) {point2d point = new Point2d (116.404072, 39.916605); // Проверьте, находится ли точка внутри списка многоугольников <point2d> pts = new ArrayList <popt2d> (); pts.add (New Point2d (116,395, 39,910)); pts.add (New Point2d (116.394, 39.914)); pts.add (New Point2d (116.403, 39.920)); pts.add (New Point2d (116.402, 39.914)); PTS.Add (New Point2d (116.410, 39.913)); if (isptinpoly (point, pts)) {System.out.println («Точка находится внутри многоугольника»); } else {System.out.println («Точка находится за пределами многоугольника»); } // Проверьте, находится ли точка внутри точки круговой точки2d CenterPoint = new Point2d (116.404172, 39.916605); Круг C = новый круг (); C.SetCC (CenterPoint); C.Setr (0,0056); String S = DistancePC (точка, C); System.out.println («Точка в круге:"+s); }} Circle.java
/ ** * Круговой класс * @author ardo * */ public class circle {private double r; Private Point2d CC; public void setr (двойной a) {r = a; } public void setcc (point2d centerofcir) {cc = centerOfCir; } public double getr () {return r; } public point2d getCc () {return cc; }} Point2d.java
public class point2d {public double x; Public Double Y; public point2d (double x, double y) {super (); this.x = x; this.y = y; } public double getx () {return x; } public void setX (double x) {this.x = x; } public double gety () {return y; } public void sety (double y) {this.y = y; }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.