From 93888de6df75d500f10ed2519ec6b9c5677d5675 Mon Sep 17 00:00:00 2001 From: "Zhelobkovichps.23" Date: Wed, 22 Sep 2021 15:00:05 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 8 ++++++++ src/main/java/problem/Problem.java | 12 +++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 Readme.md diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..00a4dba --- /dev/null +++ b/Readme.md @@ -0,0 +1,8 @@ +# Итоговый проект по информатике + +###Желобкович Павел + +На плоскости задано множество точек. Найти из них такие 4 точки, что построенный +по ним 4-хугольник не является самопересекающимся и содержит в себе +максимальное количество точек множества + diff --git a/src/main/java/problem/Problem.java b/src/main/java/problem/Problem.java index c97423d..6bda267 100644 --- a/src/main/java/problem/Problem.java +++ b/src/main/java/problem/Problem.java @@ -6,20 +6,22 @@ import java.util.Scanner; /** - * Класс задачи + * Типовая */ public class Problem { /** - * текст задачи + * На плоскости задано множество точек. Найти из них такие 4 точки, что построенный + * по ним 4-хугольник не является самопересекающимся и содержит в себе + * максимальное количество точек множества */ public static final String PROBLEM_TEXT = "ПОСТАНОВКА ЗАДАЧИ:\n" + - "Заданы два множества точек в пространстве.\n" + - "Требуется построить пересечения и разность этих множеств"; + "Задано множество точек на плоскости.\n" + + "Требуется найти такие 4 точки ,что построенный по ним 4-хугольник не является самопересекающимся и содержит в себе максимальное количество точек множества"; /** * заголовок окна */ - public static final String PROBLEM_CAPTION = "Итоговый проект ученика 10-7 Иванова Ивана"; + public static final String PROBLEM_CAPTION = "Итоговый проект ученика 10-3 класса Желобковича Павла "; /** * путь к файлу From fcb99790c3c936ee8df294dd4bdac2b16e8817d9 Mon Sep 17 00:00:00 2001 From: "Zhelobkovichps.23" Date: Wed, 22 Sep 2021 15:00:48 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 00a4dba..e752a9f 100644 --- a/Readme.md +++ b/Readme.md @@ -1,6 +1,6 @@ # Итоговый проект по информатике -###Желобкович Павел +### Желобкович Павел На плоскости задано множество точек. Найти из них такие 4 точки, что построенный по ним 4-хугольник не является самопересекающимся и содержит в себе From efe8626d1558bcb054296497bf4a0bc79c08d235 Mon Sep 17 00:00:00 2001 From: Medvezehonokok Date: Wed, 6 Apr 2022 20:14:02 +0300 Subject: [PATCH 3/3] 22 --- README.md | 9 ++- Readme.md | 8 -- src/main/java/project/Main.java | 7 ++ src/main/java/project/MyFrame.java | 120 ++++++++++++++++++++++++++++ src/main/java/project/Point.java | 19 +++++ src/main/java/project/Solution.java | 24 ++++++ src/main/java/project/Triangle.java | 11 +++ 7 files changed, 188 insertions(+), 10 deletions(-) delete mode 100644 Readme.md create mode 100644 src/main/java/project/Main.java create mode 100644 src/main/java/project/MyFrame.java create mode 100644 src/main/java/project/Point.java create mode 100644 src/main/java/project/Solution.java create mode 100644 src/main/java/project/Triangle.java diff --git a/README.md b/README.md index ffa8a5b..f2a5b30 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ -# JavaGl239Project +# Итоговый проект по информатике -Проект +### Желобкович Павел + +Множество точек на плоскости назовем дваждытреугольным, +если каждая точка этого множества является вершиной хотя бы двух правильных треугольников, +построенных по точкам множества. Определить, удовлетворяет ли заданное множество точек +этому свойству. diff --git a/Readme.md b/Readme.md deleted file mode 100644 index e752a9f..0000000 --- a/Readme.md +++ /dev/null @@ -1,8 +0,0 @@ -# Итоговый проект по информатике - -### Желобкович Павел - -На плоскости задано множество точек. Найти из них такие 4 точки, что построенный -по ним 4-хугольник не является самопересекающимся и содержит в себе -максимальное количество точек множества - diff --git a/src/main/java/project/Main.java b/src/main/java/project/Main.java new file mode 100644 index 0000000..8829143 --- /dev/null +++ b/src/main/java/project/Main.java @@ -0,0 +1,7 @@ +package project; + +public class Main { + public static void main(String[] args) { + MyFrame frame = new MyFrame("title"); + } +} diff --git a/src/main/java/project/MyFrame.java b/src/main/java/project/MyFrame.java new file mode 100644 index 0000000..022e6d4 --- /dev/null +++ b/src/main/java/project/MyFrame.java @@ -0,0 +1,120 @@ +package project; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class MyFrame extends JFrame { + + /* + Данный метод помогает читать точки из файла + */ + public void getPointsFromFile() { + points.clear(); + try { + File file = new File("in.txt"); + Scanner sc = new Scanner(file); + while (sc.hasNextLine()) { + double x = sc.nextDouble(); + double y = sc.nextDouble(); + Point point = new Point(x, y); + points.add(point); + } + sc.close(); + } catch (Exception e) { + System.out.println("U did something wrong: " + e); + } + } + + Solution solution = new Solution(new ArrayList<>()); + List points = new ArrayList<>(); + + public MyFrame(String title) { + super(title); + setVisible(true); + setDefaultCloseOperation(EXIT_ON_CLOSE); + addMouseListener(new MyMouseListener()); + setSize(300, 300); + } + + @Override + public void paint(Graphics g) { + super.paint(g); + + Graphics2D graphics2D = (Graphics2D) g; + BasicStroke stroke = new BasicStroke(2); + graphics2D.setStroke(stroke); + + for (Point value : points) { + value.count = 0; + g.drawOval((int) value.x - 5, (int) value.y - 5, 10, 10); + } + + for (int i = 0; i < points.size(); i++) { + for (int j = i + 1; j < points.size(); j++) { + for (int k = j + 1; k < points.size(); k++) { + if (solution.isRightTriangle(points.get(i), points.get(j), points.get(k))) { + increaseCount(i, j, k); + Triangle newTriangle = new Triangle(points.get(i), points.get(j), points.get(k)); + solution.triangles.add(newTriangle); + solution.drawTriangle(g, newTriangle); + } + } + } + } + + for (int i = 0; i < solution.triangles.size(); i++) { + g.setColor(Color.MAGENTA); + + if (solution.triangles.get(i).p1.count >= 2 + || solution.triangles.get(i).p2.count >= 2 + || solution.triangles.get(i).p3.count >= 2) { + solution.drawTriangle(g, solution.triangles.get(i)); + } + } + + for (Point point : points) { + if (point.count >= 2) { + g.setColor(Color.RED); + g.drawOval((int) point.x - 5, (int) point.y - 5, 10, 10); + g.fillOval((int) point.x - 5, (int) point.y - 5, 10, 10); + } + } + } + + private void increaseCount(int i, int j, int k) { + points.get(i).count++; + points.get(j).count++; + points.get(k).count++; + } + + private class MyMouseListener implements MouseListener { + @Override + public void mouseClicked(MouseEvent e) { + Point newPoint = new Point(e.getX(), e.getY()); + points.add(newPoint); + repaint(); + } + + @Override + public void mousePressed(MouseEvent e) { + } + + @Override + public void mouseReleased(MouseEvent e) { + } + + @Override + public void mouseEntered(MouseEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + } + } +} diff --git a/src/main/java/project/Point.java b/src/main/java/project/Point.java new file mode 100644 index 0000000..48c4441 --- /dev/null +++ b/src/main/java/project/Point.java @@ -0,0 +1,19 @@ +package project; + +public class Point { + double x; + double y; + + int count; + + public Point(double x, double y) { + this.x = x; + this.y = y; + } + + public double getLength(Point p2) { + return Math.sqrt( + Math.pow(this.x - p2.x, 2) + Math.pow(this.y - p2.y, 2) + ); + } +} diff --git a/src/main/java/project/Solution.java b/src/main/java/project/Solution.java new file mode 100644 index 0000000..5065f3f --- /dev/null +++ b/src/main/java/project/Solution.java @@ -0,0 +1,24 @@ +package project; + +import java.awt.*; +import java.util.List; + +public class Solution { + List triangles; + + public Solution(List triangles) { + this.triangles = triangles; + } + + public void drawTriangle(Graphics g, Triangle triangle) { + g.drawLine((int) triangle.p1.x, (int) triangle.p1.y, (int) triangle.p2.x, (int) triangle.p2.y); + g.drawLine((int) triangle.p1.x, (int) triangle.p1.y, (int) triangle.p3.x, (int) triangle.p3.y); + g.drawLine((int) triangle.p2.x, (int) triangle.p2.y, (int) triangle.p3.x, (int) triangle.p3.y); + } + + public boolean isRightTriangle(Point p1, Point p2, Point p3) { + return Math.abs(p1.getLength(p2) - p1.getLength(p3)) <= 25 + && Math.abs(p1.getLength(p3) - p2.getLength(p3)) <= 25 + && Math.abs(p1.getLength(p2) - p2.getLength(p3)) <= 25; + } +} diff --git a/src/main/java/project/Triangle.java b/src/main/java/project/Triangle.java new file mode 100644 index 0000000..b008d37 --- /dev/null +++ b/src/main/java/project/Triangle.java @@ -0,0 +1,11 @@ +package project; + +public class Triangle { + public Point p1, p2, p3; + + public Triangle(Point p1, Point p2, Point p3) { + this.p1 = p1; + this.p2 = p2; + this.p3 = p3; + } +}