Skip to content

Commit d02cbc9

Browse files
authored
cause her to be carried away of the flood
And the serpent cast out of his mouth water as a flood after the woman, that he might cause her to be carried away of the flood. (Revelation 12:15)
1 parent 8215072 commit d02cbc9

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
2+
//And the serpent cast out of his mouth water as a flood after the woman, that he might cause her to be carried away of the flood. (Revelation 12:15)
3+
4+
package com.javarush.task.task40.task4004;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
/*
10+
Принадлежность точки многоугольнику
11+
*/
12+
13+
class Point {
14+
public int x;
15+
public int y;
16+
17+
Point(int x, int y) {
18+
this.x = x;
19+
this.y = y;
20+
}
21+
}
22+
23+
public class Solution {
24+
public static void main(String[] args) {
25+
List<Point> polygon = new ArrayList<>();
26+
polygon.add(new Point(0, 0));
27+
polygon.add(new Point(0, 10));
28+
polygon.add(new Point(10, 10));
29+
polygon.add(new Point(10, 0));
30+
31+
System.out.println(isPointInPolygon(new Point(5, 5), polygon));
32+
System.out.println(isPointInPolygon(new Point(100, 100), polygon));
33+
}
34+
35+
public static boolean isPointInPolygon(Point point, List<Point> polygon) {
36+
int intersect_count = 0; //напишите тут ваш код
37+
for (int i = 0; i < polygon.size(); i++) {
38+
Point p1 = polygon.get(i > 0 ? i - 1 : polygon.size() - 1);
39+
Point p2 = polygon.get(i);
40+
41+
if (isIntersect(point.x, point.y, p1, p2)) intersect_count++;
42+
}
43+
return intersect_count % 2 == 1;
44+
}
45+
46+
private static boolean isIntersect(int x, int y, Point p1, Point p2) {
47+
int dy1 = p1.y - y;
48+
int dy2 = p2.y - y;
49+
50+
if (Math.signum(dy1) == Math.signum(dy2)) return false;
51+
52+
int dx1 = p1.x - x;
53+
int dx2 = p2.x - x;
54+
55+
if (dx1 >= 0 && dx2 >= 0) return true;
56+
if (dx1 < 0 && dx2 < 0) return false;
57+
58+
int dx0 = dy1 * (p1.x - p2.x) / (p1.y - p2.y);
59+
60+
return dx0 <= dx1;
61+
}
62+
}
63+
64+
/*
65+
Принадлежность точки многоугольнику
66+
67+
Дан многоугольник, заданный координатами своих вершин.
68+
69+
Ребра многоугольника не пересекаются.
70+
71+
Необходимо реализовать метод isPointInPolygon(Point point, List<Point> polygon), который проверит, принадлежит ли переданная точка многоугольнику.
72+
73+
Для граничных точек принадлежность не определена: isPointInPolygon может вернуть как true так и false.
74+
75+
Метод main не изменяй.
76+
77+
78+
79+
80+
81+
Требования:
82+
83+
1. Метод isPointInPolygon должен вернуть true, если в него передать точку с координатами: 5, 5 и многоугольник, созданный в методе main.
84+
85+
2. Метод isPointInPolygon должен вернуть false, если в него передать точку с координатами: 100, 100 и многоугольник, созданный в методе main.
86+
87+
3. Программа должна вывести 2 строки: true и false.
88+
89+
4. Метод isPointInPolygon должен корректно работать для любых входных данных.
90+
91+
5. Метод main не изменяй.
92+
*/

0 commit comments

Comments
 (0)